1. Spark3 与 Hadoop 的兼容性
上⽂分析 Spark 的版本⾄少为 Spark3,接下来考虑 Spark3 与 hadoop 的兼容性:
经过分析,hadoop 最低版本为 2.7.4,但是 hadoop⽣产环境为 2.6.0,如果升级⻛险成本太⼤,稍有
散失对数据组来说是毁灭性的打击。所以只能在 hadoop2.6.0 的环境下集成 Spark3,需要编辑 Spark3
源码适配 hadoop2.6.0。
2. 编译源码适配 CDH5.11.2
2.1 下载源码
考虑到 Spark3.2 以上引⼊了 hadoop-client-api 和 hadoop-client-runtime 架包,为了减少不必要的依
赖,最后选择 Spark 的版本为 3.1.3,进⼊下载⻚:https://github.com/apache/spark/releases/tag/v3.1.3
2.2 删除所有 test
# 1. 解压
tar -xvf spark-3.1.3.tgz
# 2. 删除所有test,查找⽬录需要使⽤绝对路径
find /Users/ice/Downloads/tmp/spark-3.1.3 -iname "test" -type d -exec rm -
rf "{}" \;
# 3. 删除所有pom.xml内为scope=test的依赖
find spark-3.1.3 -name "pom.xml" -type f
# spark-3.1.3/resource-managers/yarn/pom.xml
# spark-3.1.3/resource-managers/mesos/pom.xml
# spark-3.1.3/resource-managers/kubernetes/core/pom.xml
# spark-3.1.3/resource-managers/kubernetes/integration-tests/pom.xml
# spark-3.1.3/launcher/pom.xml
# ...
复制代码
2.3 删除不必要的模块
编辑根⽬录的 pom.xml:
2.4 编译环境
编译环境依赖的组件:
2.5 设置 maven 源
通⽤的镜像下载使⽤阿⾥云
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0
https://maven.apache.org/xsd/settings-1.2.0.xsd">
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-1.4</id>
<activation>
<jdk>1.4</jdk>
</activation>
<repositories>
<repository>
<id>jdk14</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
<profile>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/clouderarepos/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>cloudera-profile</activeProfile>
</activeProfiles>
</settings>
复制代码
由于依赖的 hadoop 版本是 CDH5.11.2,编辑根⽬录下的 pom.xml 的 repositories 添加 CDH 源
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
复制代码
2.6 编译代码
pom.xml 增加 profile cdh
<profile>
<id>cdh</id>
<properties>
<hadoop.version>2.6.0-cdh5.11.2</hadoop.version>
<curator.version>2.7.1</curator.version>
<commons-io.version>2.4</commons-io.version>
<javax.servlet-api.name>servlet-api</javax.servlet-api.name>
</properties>
</profile>
复制代码
执⾏编译
./build/mvn -Pscala-2.12 -Pcdh -Pyarn -Phive -Phive-thriftserver -DskipTests clean package -X
复制代码
2.7 构建部署架包
dev/make-distribution.sh --name 2.6.0-cdh5.11.2 --pip --r --tgz --mvn mvn -Pscala-2.12 -Pcdh -Pyarn -Phive -Phive-thriftserver -DskipTests -X
复制代码
最后会在⽬录下⽣成 tgz 包
评论