在hadoop2中设置outputCommitterClass属性

时间:2017-09-13 23:09:59

标签: apache-spark hadoop2

过去几周我一直在研究这个问题,但没有找到明确的答案。

这是我的问题:

对于hadoop1x(在mapred lib中),我们可以使用自定义输出提交器:

spark.conf.set(
  "spark.hadoop.mapred.output.committer.class",
  "some committer"
 ) 

或只是致电JobConf.setOutputCommitter

但是,对于hadoop2x(在mapreduce lib中),它从OutputFormat.getOutputCommitter获取提交者,但对于如何setOutputCommitter没有明确的答案。

我发现databricks使用此属性spark.hadoop.spark.sql.sources.outputCommitterClass设置输出提交者。

我尝试使用netflix的s3提交器(com.netflix.bdp.s3.S3DirectoryOutputCommitter),但在日志中,spark仍使用默认提交者:

17/09/13 22:39:36 INFO FileOutputCommitter: File Output Committer Algorithm version is 2
17/09/13 22:39:36 INFO DirectFileOutputCommitter: Nothing to clean up since no temporary files were written.
17/09/13 22:39:36 INFO CSEMultipartUploadOutputStream: close closed:false s3://xxxx/testtable3/.hive-staging_hive_2017-09-13_22-39-34_140_3769635956945982238-1/-ext-10000/_SUCCESS

我想知道是否可以覆盖默认FileOutputCommitter并在mapreduce lib中使用我的自定义提交者?

我该怎么办?

1 个答案:

答案 0 :(得分:1)

不容易没有;这是我正在尝试解决的问题MAPREDUCE-6823 - 您可以在每个文件系统架构中设置提交者。这不会浮出水面(Hadoop 3.1?)

你应该能够设置sql输出提交者,但我会检查路径。这可能只适用于SQL /数据帧工作。您也可以单独为Parquet设置它,尽管您声明的提交者必须是ParquetOutputCommitter的子类,而netflix则不是。