Apache spark 使用提供的Hadoop构建Spark
我一直在尝试用定制的Hadoop构建一个定制的Spark构建(我需要在Hadoop 2.9.1上应用一个补丁,允许我在以Apache spark 使用提供的Hadoop构建Spark,apache-spark,Apache Spark,我一直在尝试用定制的Hadoop构建一个定制的Spark构建(我需要在Hadoop 2.9.1上应用一个补丁,允许我在以s3://开头的路径上使用S3Guard) 以下是我在克隆spark并在我的Dockerfile上使用spark 2.3.1后构建spark的方法: ARG HADOOP_VER=2.9.1 RUN bash -c \ "MAVEN_OPTS='-Xmx2g -XX:ReservedCodeCacheSize=512m' \ ./dev/make-distrib
s3://
开头的路径上使用S3Guard)
以下是我在克隆spark并在我的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 build并没有使用Hadoop提供的JAR
编译Spark的正确方法是什么,这样它就不包括Hadoop JAR,而是使用我提供的JAR
注意:我在独立模式下运行,设置
SPARK\u DIST\u CLASSPATH=$(hadoop CLASSPATH)
,使其指向我的hadoop CLASSPATH。对于自定义hadoop版本,您需要将自己的工件放到本地机器上,并放入在集群中分发的SPARK tar文件中(通常以HDFS格式),并在部署工人时下载(在纱线中;不知道k8s)
要可靠地做到这一点,最好的方法是在本地构建一个具有新版本号的hadoop发行版,并以此为基础构建spark
dev/make-distribution.sh -Phive -Phive-thriftserver -Pyarn -Pkubernetes -Phadoop-3.1 -Phadoop-cloud -Dhadoop.version=2.9.3-SNAPSHOT
这将创建一个带有hadoop aws和您所构建的匹配SDK的spark发行版
速度相当慢:如果可以的话,运行钉枪/锌来加速。如果您引用的版本也在公共repo中,那么很有可能是maven repo~/.m2/存储库中的缓存副本潜入的
然后:在尝试任何更复杂的设置之前,打开spark shell并从那里进行测试
最后,s3guard有一些开放的JIRA,可以不用担心URL中的s3与s3a。那是你的补丁吗?如果没有,是否有效?如果需要它的人感到高兴的话,我们可能会在未来的hadoop版本中使用它。我们将
s3://
处理程序设置为始终由s3a
处理,并希望继续使用s3://
,但支持s3guard。OK/。很久以前有人讨论过dynamodb表中没有完整的s3a://URL。毕竟,这是不必要的。特定的FS实例需要添加前缀。不过还没写出来