为spark输出文件设置S3输出文件被授予者

时间:2015-06-03 19:14:56

标签: hadoop amazon-web-services amazon-s3 apache-spark

我在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作业的正确方法是什么?

提前致谢

2 个答案:

答案 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的官方文档中找不到任何参考。