我有一个用例,我想将 Spark 配置属性和 hadoop 配置属性与 Spark-submit 命令分开。
spark-submit 命令示例:
/usr/lib/spark/bin/spark-submit --master yarn --class com.benchmark.platform.TPCDSBenchmark --deploy-mode cluster --conf spark.executor.instances=5 --conf spark.dynamicAllocation.minExecutors=2 --conf spark.dynamicAllocation.maxExecutors=5 --conf spark.executor.cores=4 --conf spark.executor.memory=10240M --conf spark.driver.memory=8192M --conf spark.hadoop.hive.metastore.uris=thrift://METASTORE_URI:10016 --conf spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider --conf spark.hadoop.fs.s3a.assumed.role.credentials.provider=com.amazonaws.auth.WebIdentityTokenCredentialsProvider --conf spark.hadoop.fs.s3a.assumed.role.arn=arn:aws:iam::ACCOUNT:ROLE s3://JAR_PATH.jar --iterations=2 --queryFilter=q1-v2.4
我想从上面的命令中提取spark_conf和hadoop_conf。
输出示例:
"spark_conf": {
"spark.driver.memory": "8192M",
"spark.executor.cores": "4",
"spark.executor.memory": "10240M",
"spark.executor.instances": "5",
"spark.dynamicAllocation.maxExecutors": "5",
"spark.dynamicAllocation.minExecutors": "2"
}
"hadoop_conf": {
"spark.hadoop.hive.metastore.uris": "thrift://METASTORE_URI:10016",
"spark.hadoop.fs.s3a.assumed.role.arn": "arn:aws:iam::ACCOUNT:ROLE",
"spark.hadoop.fs.s3a.aws.credentials.provider": "org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider",
"spark.hadoop.fs.s3a.assumed.role.credentials.provider": "com.amazonaws.auth.WebIdentityTokenCredentialsProvider"
}
hadoop 相关配置属性的完整列表可在此处找到:list1 list2 list3 list4。剩余的配置属性可以分配给spark。我不想将这数百个属性保存在数据库中并搜索匹配项。有没有更好的方法来区分两种类型的配置属性?
hadoop 代码将读取
core-site.xml
中的文件内容(在类路径上;hadoop XML)。所有站点设置都位于托管集群上。
Spark 始终读取类路径上的文件
conf/spark-defaults.conf
docs
如果您正在调整 s3a 连接,请知道规范的设置列表(和默认值,除非在 core-default.xml 中更改)位于:Constants.java
文档位于 hadoop-aws。有些文档中没有;大部分是偶然的。查看与执行器线程池大小相关的内容,如果您想要最大的 S3 IO 性能,请向 YARN 请求更多内核
最后,该 webidentity 凭证提供程序读取环境变量
AWS_WEB_IDENTITY_TOKEN_FILE
,它必须指向本地 FS 中的文件。它不会随作业一起传递,因此您需要一种方法来使其跨集群。但我想你已经注意到了。