1. 程式人生 > >spark2.4 整合 hadoop2.6.0-cdh5.7.0 原始碼編譯

spark2.4 整合 hadoop2.6.0-cdh5.7.0 原始碼編譯

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