过去几周我一直在研究这个问题,但没有找到明确的答案。
这是我的问题:
对于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中使用我的自定义提交者?
我该怎么办?
答案 0 :(得分:1)
不容易没有;这是我正在尝试解决的问题MAPREDUCE-6823 - 您可以在每个文件系统架构中设置提交者。这不会浮出水面(Hadoop 3.1?)
你应该能够设置sql输出提交者,但我会检查路径。这可能只适用于SQL /数据帧工作。您也可以单独为Parquet设置它,尽管您声明的提交者必须是ParquetOutputCommitter的子类,而netflix则不是。