Spark 源碼編譯

選擇Spark源碼

  • 官網:spark.apache.org
  • 目的:從官網下載源碼進行編譯比下載的安裝包要完整,並且可以定向編譯出匹配自己Hadoop及其他組件的Spark版本

環境準備

  • JDK: Spark 2.2.0及以上版本只支持JDK1.8
  • Maven: maven3.3.9; 設置maven環境變量時,需設置maven內存:
    export MAVEN_OPTS=”-Xmx2g -XX:ReservedCodeCacheSize=512m”

  • scala:scala2.11.8

  • git: 下載 sudo yum install git

編譯

方式一:

  • 命令:mvn -Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -DskipTests clean package
  • 解釋:
    -P,指定profile,即指定Spark支持的其他組件
    -D,指定組件的小版本
    -Pyarn,支持yarn
    -Phive -Phive-thriftserver,支持hive,JDBC
    -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0,指定hadoop版本

  • 編譯報錯:

    1. [ERROR] Failed to execute goal on project spark-launcher_2.11: 
    2. Could not resolve dependencies for project org.apache.spark:spark-launcher_2.11:jar:2.2.0: 
    3. Could not find artifact org.apache.hadoop:hadoop-client:jar:2.6.0-cdh5.7.0 in central (https://repo1.maven.org/maven2) -> [Help 1]
    

    https://repo1.maven.org/maven2 該連接是默認的中央倉庫地址(我們編譯的是CDH版本),使用maven下載jar包,但是默認的連接並沒有找到,所以我們要修改pom.xml,重新設置連接地址,在pom.xml添加如下內容:

    1. <repositories>
    2. <repository>
    3.   <id>cloudera</id>
    4.   <name>cloudera Repository</name>
    5.   <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    6. </repository>
    7. </repositories>
    

    再次輸入命令,編譯。

方式二:

  • 使用此種編譯方式,可以將編譯好的文件打成tar包,推薦使用

    1. ./dev/make-distribution.sh \
    2. --name 2.6.0-cdh5.7.0 \
    3. --tgz \
    4. -Dhadoop.version=2.6.0-cdh5.7.0 \
    5. -Phadoop-2.6 \
    6. -Phive -Phive-thriftserver \
    7. -Pyarn
    
  • 使用這種方式編譯,編譯過程會很慢,需要修改/dev目錄下的make-distribution.sh文件:

    1. #VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
    2. #SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
    3. #    | grep -v "INFO"\
    4. #    | tail -n 1)
    5. #SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
    6. #    | grep -v "INFO"\
    7. #    | tail -n 1)
    8. #SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
    9. #    | grep -v "INFO"\
    10. #    | fgrep --count "<id>hive</id>";\
    11. #    # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
    12. #    # because we use "set -o pipefail"
    13. #    echo -n)
    

    使用#註釋這段內容,並添加如下內容:

    1. VERSION=2.2.0
    2. SCALA_VERSION=2.11
    3. SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0
    4. SPARK_HIVE=1
    
  • 再次編譯,生成spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz壓縮包

  • 生成的壓縮包由make-distribution.sh腳本生成

    1. if [ "$MAKE_TGZ" == "true" ]; then
    2.   TARDIR_NAME=spark-$VERSION-bin-$NAME
    3.   TARDIR="$SPARK_HOME/$TARDIR_NAME"
    4.   rm -rf "$TARDIR"
    5.   cp -r "$DISTDIR" "$TARDIR"
    6.   tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
    7.   rm -rf "$TARDIR"
    8. fi
    

解壓

  • 使用tar -xzvf解壓,查看目錄:
    bin:存放客戶端相關的腳本
    conf:存放配置文件
    data:存放測試數據
    examples:Spark自帶的測試用例,裏面有很多好的例子**
    jars:存放Spark相關的jar包(最佳實踐)
    sbin:存放服務端相關的腳本,啓動停止集羣。。。
    yarn:存放yarn相關的jar包
發佈了44 篇原創文章 · 獲贊 30 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章