我有 spark 2.4.0 和 Hadoop 3.1.1。根据Hadoop 文档,要使用允许将镶木地板文件一致写入 S3 的新 Magic 提交器,我已在以下位置设置了这些值conf/spark-default.conf:
spark.sql.sources.commitProtocolClass com.hortonworks.spark.cloud.commit.PathOutputCommitProtocol
spark.sql.parquet.output.committer.class org.apache.hadoop.mapreduce.lib.output.BindingPathOutputCommitter
spark.hadoop.mapreduce.outputcommitter.factory.scheme.s3a org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory
spark.hadoop.fs.s3a.committer.name magic
spark.hadoop.fs.s3a.committer.magic.enabled true
Run Code Online (Sandbox Code Playgroud)
使用此配置时,我最终遇到了异常:
java.lang.ClassNotFoundException: com.hortonworks.spark.cloud.commit.PathOutputCommitProtocol
Run Code Online (Sandbox Code Playgroud)
我的问题是双重的,首先我是否正确理解 Hadoop 3.1.1 允许一致地将镶木地板文件写入 S3?
其次,如果我理解得很好,如何从 Spark 正确使用新的提交者?