Hadoop 为spark输出文件设置S3输出文件授权人

Hadoop 为spark输出文件设置S3输出文件授权人,hadoop,amazon-web-services,amazon-s3,apache-spark,Hadoop,Amazon Web Services,Amazon S3,Apache Spark,我正在AWS EMR上运行Spark,在获取输出文件的正确权限时遇到一些问题(rdd.saveAsTextFile(“”))。在hive中,我会在开始处添加一行set fs.s3.canned.acl=BucketOwnerFullControl,这将设置正确的权限。对于Spark,我尝试了跑步: hadoop jar /mnt/var/lib/hadoop/steps/s-3HIRLHJJXV3SJ/script-runner.jar \ /home/hadoop/spark/bin/spar

我正在AWS EMR上运行Spark,在获取输出文件的正确权限时遇到一些问题(
rdd.saveAsTextFile(“”)
)。在hive中,我会在开始处添加一行
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.canted.acl=BucketOwnerFullControl”或任何s3 canted权限传递给spark作业的正确方法是什么


提前感谢

我找到了解决方案。在作业中,您必须访问JavaSparkContext,从中获取Hadoop配置并在那里设置参数。例如:

sc._jsc.hadoopConfiguration().set('fs.s3.canned.acl','BucketOwnerFullControl')

在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的官方文档中找不到任何参考资料