使用提供的Hadoop构建Spark

时间:2018-12-17 20:49:35

标签: apache-spark

我一直在尝试使用自定义的Hadoop构建自定义的Spark版本(我需要对Hadoop 2.9.1应用补丁,以允许我在以s3://开头的路径上使用S3Guard)。 / p>

在克隆并在我的Dockerfile上使用Spark 2.3.1之后,这是我如何构建spark:

ARG HADOOP_VER=2.9.1
RUN bash -c \
    "MAVEN_OPTS='-Xmx2g -XX:ReservedCodeCacheSize=512m' \
    ./dev/make-distribution.sh \
    --name hadoop${HADOOP_VER} \
    --tgz \
    -Phadoop-provided \
   -Dhadoop.version=${HADOOP_VER} \
   -Phive \
   -Phive-thriftserver \
   -Pkubernetes"

这可以成功编译,但是当我尝试将Spark与s3://路径一起使用时,我仍然在Hadoop代码上仍然出错,我确定在编译时通过补丁删除了该错误。据我所知,Spark构建不会使用我的Hadoop提供的JAR。

什么是编译Spark的正确方法,以使其不包括Hadoop JAR并使用我提供的方法。

注意:我以独立模式运行,并且设置了SPARK_DIST_CLASSPATH=$(hadoop classpath),使其指向我的Hadoop类路径。

1 个答案:

答案 0 :(得分:1)

对于自定义的hadoop版本,您需要将自己的工件放到本地计算机上,并放到spark tar文件中,该文件在群集中分布(通常在HDFS中),并在部署工作线程时下载(在YARN中;否)关于k8s的想法)

可靠地执行此操作的最佳方法是在本地构建具有新版本号的hadoop版本,并针对该版本构建火花。

dev/make-distribution.sh -Phive -Phive-thriftserver -Pyarn -Pkubernetes -Phadoop-3.1 -Phadoop-cloud -Dhadoop.version=2.9.3-SNAPSHOT

这将使用已构建的hadoop-aws和匹配的SDK创建一个火花发行版。

这非常慢:如果可以加快速度,请运行指甲枪/锌。如果您提到的也是公共存储库中的版本,那么您的Maven存储库〜/ .m2 /存储库中已存储的任何缓存副本都有很大的机会出现。

然后:在尝试任何更复杂的设置之前,先打开Spark Shell并从那里进行测试。

最后,对于s3guard,有一些开放的JIRA不用担心URL中的s3 vs s3a。那是你的补丁吗?如果没有,那行得通吗?如果需要它的人感到高兴,我们可能会在将来的hadoop版本中使用它