spark2.4 整合 hadoop2.6.0-cdh5.7.0 原始碼編譯
阿新 • • 發佈:2018-12-20
1.前置要求
- java 8 +
- maven 3.5.4 +
- scala 2.11
2.下載 spark2.4 原始碼包
在spark官網 下載頁面中選擇對應的spark版本和原始碼包
[[email protected] softwore]$ wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0.tgz
[[email protected] softwore]$ tar -zxvf spark-2.4.0.tgz -C ~/app/
3.編譯
3.1 修改配置檔案
為了讓編譯速度得到提升 修改如下的配置檔案;
3.1.1 vim ./dev/make-distribution.sh
#VERSION=$("$MVN" help:evaluate -Dexpression=project.version [email protected] 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | tail -n 1)
#SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version [email protected] 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | tail -n 1)
#SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version [email protected] 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | tail -n 1)
#SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive [email protected] 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | fgrep --count "<id>hive</id>";\
# # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
# # because we use "set -o pipefail"
# echo -n)
# 為了讓編譯的時候跳過檢測
VERSION=2.4.0 # spark 版本
SCALA_VERSION=2.11 # scala版本
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0 #對應的hadoop版本
SPARK_HIVE=1 # 支援的hive
3.1.1 vim ./pom.xml
修改遠端倉庫地址,(修改成阿里映象地址,增加cdh映象地址)
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
3.2 執行編譯命令
./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn -Dhadoop.version=2.6.0-cdh5.7.0
3.2.1 編譯命令分析
./dev/make-distribution.sh \
--name 2.6.0-cdh5.7.0\ # 指定的名字,對最後產生的tgz包名 有聯絡
--tgz \ # 編譯之後打成 tgz 包
-Phadoop-2.6 \ # 支援 hadoop2.6
-Phive\ # 支援 hive
-Phive-thriftserver\ # 支援 hive-thriftserver
-Pyarn\ # 支援 yarn
-Dhadoop.version=2.6.0-cdh5.7.0 # 對應的 hadoop2.6 具體的版本號
可以看到,在編譯命令的時候有一些 -P
-D
的引數指定,這些在 spark的pom.xml 都是有體現的;
首先,在 pom.xml 檔案中 可以看到,spark2.4 版本是支援 hadoop2.6 ,2.7 ,3.1 的版本,然後看出來在對hadoop2.6支援並沒有對應的版本;
然後在此處 找到了 對應的hadoop版本是2.6.5 但是我的是hadoop2.6.0-cdh5.7.0 所以,我在執行編譯命令的時候
指定了 -Phadoop-2.6 和 -Dhadoop.version=2.6.0-cdh5.7.0
3.2.2 關於make-distribution.sh指令碼
對於最後生成編譯好的 spark-2.4.0-bin-2.6.0-cdh5.7.0.tgz 檔案, 但是這個檔名是怎麼來的呢;
在分析 ./dev/make-distribution.sh 這個指令碼的時候
if [ "$MAKE_TGZ" == "true" ]; then
TARDIR_NAME=spark-$VERSION-bin-$NAME
TARDIR="$SPARK_HOME/$TARDIR_NAME"
rm -rf "$TARDIR"
cp -r "$DISTDIR" "$TARDIR"
tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
rm -rf "$TARDIR"
fi
TARDIR_NAME=spark-$VERSION-bin-$NAME
-$NAME 就是我們傳入的-name 引數
tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
最後會把將編譯的spark相關內容 打成 tgz包
參考文件: https://spark.apache.org/docs/latest/building-spark.html