将 Spark fileoutputcommitter.algorithm.version=2 与 AWS Glue 一起使用

Posted

技术标签:

【中文标题】将 Spark fileoutputcommitter.algorithm.version=2 与 AWS Glue 一起使用【英文标题】:Use Spark fileoutputcommitter.algorithm.version=2 with AWS Glue 【发布时间】:2019-06-03 18:27:20 【问题描述】:

我无法弄清楚这一点,但我正在尝试将直接输出提交程序与 AWS Glue 一起使用:

spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2

是否可以将此配置与 AWS Glue 一起使用?

【问题讨论】:

moku 看看我的回答希望对你有帮助!一件事是不需要 spark.hadoop,因为我们直接使用 hadoopConfiguration 所以配置将是 mapreduce.fileoutputcommitter.algorithm.version 而不是 spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 这个有用吗?有什么我可以帮忙的问题吗?如果您同意,请接受答案/投票。谢谢! @RamGhadiyaram 还没有机会测试。如果确实是解决方案,我一定会留下反馈和/或检查您的答案。 【参考方案1】:

选项 1:

Glue 使用 spark 上下文,您也可以将 hadoop 配置设置为 aws glue。因为内部动态帧是一种数据帧。

sc._jsc.hadoopConfiguration().set("mykey","myvalue")

我想你也需要像这样添加对应的类

sc._jsc.hadoopConfiguration().set("mapred.output.committer.class", "org.apache.hadoop.mapred.FileOutputCommitter")

示例 sn-p :

 sc = SparkContext()

    sc._jsc.hadoopConfiguration().set("mapreduce.fileoutputcommitter.algorithm.version","2")

    glueContext = GlueContext(sc)
    spark = glueContext.spark_session

证明该配置存在....

在 python 中调试:

sc._conf.getAll() // print this

在 Scala 中调试:

sc.getConf.getAll.foreach(println)

选项 2:

你尝试使用胶水的工作参数的另一面:

https://docs.aws.amazon.com/glue/latest/dg/add-job.html 它具有文档中提到的键值属性

'--myKey' : 'value-for-myKey'  

您可以按照下面的屏幕截图来编辑作业并使用--conf指定参数

选项 3: 如果您正在使用 aws cli,您可以在下面尝试... https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html

有趣的是他们在文档 dont set 消息中提到,如下所示。但我不知道它为什么会被曝光。

总结:我个人更喜欢option1,因为你有 程序控制。

【讨论】:

【参考方案2】:

转到粘合作业控制台并按如下方式编辑您的作业:

Glue> 作业 > 编辑您的作业> 脚本库和作业参数 (可选)> 作业参数

设置如下:

键:--conf 值:

spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2

【讨论】:

以上是关于将 Spark fileoutputcommitter.algorithm.version=2 与 AWS Glue 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

再谈Spark下写S3文件的File Output Committer问题

再谈Spark下写S3文件的File Output Committer问题

更改 spark_temporary 目录路径

s3上的Spark Dataset Parquet分区创建临时文件夹

将 spark 数据帧转换为 sparklyR 表“tbl_spark”

将 Spark 作业提交到 Spark 集群