【问题标题】:Add `hadoop-cloud` to Spark's classpath将 `hadoop-cloud` 添加到 Spark 的类路径中
【发布时间】:2021-03-22 03:33:32
【问题描述】:

自从最近宣布 S3 读写强一致性以来,我想尝试新的 S3A 提交者,例如魔法提交者。

根据Spark documentation,我们需要在this commit中添加BindingParquetOutputCommitterPathOutputCommitProtocol两个类路径。

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

我使用的是 Spark 3.0.1

我已经检查了this answer,但不幸的是,OP 切换到开源 S3A 提交者以由 EMR 提供。

【问题讨论】:

    标签: apache-spark hadoop amazon-s3


    【解决方案1】:

    您需要使用 -Phadoop-cloud 模块构建的 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 分支,并仅对该模块进行 maven 构建

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

    你会得到一个新的 spark-hadoop-cloud JAR,你可以将它与新的东西一起使用

    • s3a 提交者只使用了 hadoop-3.1
    • 我们(我)一直在忙于处理一些带有 jobID 和“暂存提交者”的竞争条件
    • 而且,鉴于 S3 是一致的,我建议使用魔法提交者。

    您可以在 spark 中独立测试这些东西,只需做一些最小的工作来写入数据并验证 _SUCCESS 文件是否包含该工作的一些 JSON 摘要。

    无论您使用哪个提交者,请确保您的存储桶已设置为在几天后删除未完成的上传。无论如何你都应该这样做。

    HTH

    【讨论】:

    【解决方案2】:

    如果您使用 stevel 的 mvn 命令进行构建,您还应该包含 -Phadoop-3.2 标志,以便在 pom.xml 中选择 extra-source-dir 标志并将提交程序类编译到 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多