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 包
评论