将"hadoop-cloud"添加到Spark的类路径中



由于最近宣布了S3在读写方面的强一致性,我想尝试新的S3A提交器,比如神奇的。

根据Spark文档,我们需要在这个提交中添加两个类路径:BindingParquetOutputCommitterPathOutputCommitProtocoladde。

官方文档建议使用hadoop3.2概要文件构建的Spark。有没有办法在不重新编译Spark的情况下添加这两个类?(由于某些技术原因,我无法使用已构建的Spark(

我使用的是Spark 3.0.1

我已经检查了这个答案,但不幸的是,OP切换到了由EMR提供的开源S3A提交器。

您需要一个使用-Phadoop云模块构建的spark版本。它将新的类添加到spark-hadoop-cloud.jar中,并添加相关的依赖项,对于S3A,这些依赖项是

hadoop-aws-${the-exact-version-of-hadoop-jars-you-have}.jar
aws-sdk-something-${the-exact-version-that-hadoop-jar-was-built-with}.jar

因此,您可以查看您使用的spark分支,并只对该模块进行专业构建

mvn -pl hadoop-cloud -Phadoop-cloud -Dhadoop.version=$hadoop-version install -DskipTests

然后您得到了一个新的spark-hadoopcloudJAR,可以与新的东西一起使用

  • s3a提交程序只提供了hadoop-3.1
  • 我们(I(一直忙于应对一些带有jobID的比赛条件;分段提交器">
  • 而且,如果S3是一致的,我建议使用magic committer

您可以在spark单机版中测试这些东西,只需做一些最低限度的工作来写入数据,并验证_SUCCESS文件是否包含作业的JSON摘要。

无论你使用哪种提交器,都要确保你的bucket设置为在几天后删除未完成的上传。无论如何,你应该在任何地方都这样做。

HTH-

如果使用stevel的mvn命令进行构建,则还应该包含-Phadoop-3.2标志,以便在pom.xml中获取extra-source-dir标志,并将committer类编译到JAR中。因此完整的命令将是mvn -pl hadoop-cloud -Phadoop-cloud -Phadoop-3.2 -Dhadoop.version=$hadoop-version install -DskipTests。看见https://github.com/apache/spark/blob/de351e30a90dd988b133b3d00fa6218bfcaba8b8/hadoop-cloud/pom.xml#L207

最新更新