我在AWS EMR上运行Spark,我在输出文件(rdd.saveAsTextFile('<file_dir_name>')
)上获得正确权限时遇到了一些问题。在配置单元中,我会在开头添加一行set fs.s3.canned.acl=BucketOwnerFullControl
,这将设置正确的权限。对于Spark,我尝试了运行:
hadoop jar /mnt/var/lib/hadoop/steps/s-3HIRLHJJXV3SJ/script-runner.jar \
/home/hadoop/spark/bin/spark-submit --deploy-mode cluster --master yarn-cluster \
--conf "spark.driver.extraJavaOptions -Dfs.s3.canned.acl=BucketOwnerFullControl" \
hdfs:///user/hadoop/spark.py
但是在输出文件上没有正确设置权限。将'fs.s3.canned.acl = BucketOwnerFullControl'或任何S3固定权限传递给spark作业的正确方法是什么?
提前致谢
答案 0 :(得分:6)
我找到了解决方案。在作业中,您必须访问JavaSparkContext并从那里获取Hadoop配置并在那里设置参数。例如:
sc._jsc.hadoopConfiguration().set('fs.s3.canned.acl','BucketOwnerFullControl')
答案 1 :(得分:0)
在spark中传递hadoop配置密钥的正确方法是使用带有前缀为--conf
的密钥的spark.hadoop.
。你的命令看起来像
hadoop jar /mnt/var/lib/hadoop/steps/s-3HIRLHJJXV3SJ/script-runner.jar \
/home/hadoop/spark/bin/spark-submit --deploy-mode cluster --master yarn-cluster \
--conf "spark.hadoop.fs.s3.canned.acl=BucketOwnerFullControl" \
hdfs:///user/hadoop/spark.py
不幸的是我在spark的官方文档中找不到任何参考。