Spark環境搭建(六)-----------sprk源碼編譯

想要搭建本身的Hadoop和spark集羣,尤爲是在生產環境中,下載官網提供的安裝包遠遠不夠的,必需要本身源碼編譯spark才行。java

環境準備:

  1,Maven環境搭建,版本Apache Maven 3.3.9,jar包管理工具;maven

  2,JDK環境搭建,版本1.7.0_51,hadoop由Java編寫;工具

  3 ,Scala 環境搭建,版本 2.11.8,spark是scala編寫的;oop

  4 ,spark 源碼包,從官網選擇測試

  

 編譯前準備:

  0,Maven ,JDK,Scala解壓安裝,並加入到環境變量中ui

  1,wget 源碼到~/source 而且 tar -zxvf spark-2.1.0.tgzurl

  2 , 加入cdh倉庫,在spark-2.1.0/pom.xmlspa

    

 1 <repository>
 2       <id>cloudera-releases</id>
 3       <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
 4       <releases>
 5         <enabled>true</enabled>
 6       </releases>
 7       <snapshots>
 8        <enabled>false</enabled>
 9       </snapshots>
10     </repository>

 

編譯:

  1) 根據本身的機器實際狀況,合理的分配內存給JVM, 經過命令:export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"scala

  2) 在spark-2.1.0/下經過命令:3d

    

./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz  -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.7.0

 

或者經過mvn方式直接編譯(maven編譯完成沒有一個大的完整的包使用)

  

./build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -DskipTests clean package

 

 

  這個編譯過程大約兩個小時,更網速有關,有的Jar包須要FQ下載,全部時間教長

  編譯完成會在spark-2.1.0/下產生一個spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz包,將它解壓,加入到環境變量就算結束了。

解讀編譯命令:

./build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package

  1)    -Dhadoop.version=2.6.0

      在編譯命令上在外部指定(修改)<hadoop.version>2.2.0</hadoop.version> 默認的2.2.0 改成2.6.0

      在spark根目錄下的pom.xml文件中,部分源碼以下,能夠看出默認的hadoop版本是2.2.0

    

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
    <java.version>1.7</java.version>
    <maven.version>3.3.9</maven.version>
    <sbt.project.name>spark</sbt.project.name>
    <slf4j.version>1.7.16</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    <hadoop.version>2.2.0</hadoop.version>
    <protobuf.version>2.5.0</protobuf.version>
    <yarn.version>${hadoop.version}</yarn.version>
    <flume.version>1.6.0</flume.version>
    <zookeeper.version>3.4.5</zookeeper.version>
    <curator.version>2.4.0</curator.version>
    <hive.group>org.spark-project.hive</hive.group>
    <!-- Version used in Maven Hive dependency -->
    <hive.version>1.2.1.spark2</hive.version>
    <!-- Version used for internal directory structure -->
    <hive.version.short>1.2.1</hive.version.short>
    <derby.version>10.12.1.1</derby.version>
    <parquet.version>1.8.1</parquet.version>
    <hive.parquet.version>1.6.0</hive.parquet.version>
    <jetty.version>9.2.16.v20160414</jetty.version>
    <javaxservlet.version>3.1.0</javaxservlet.version>
</properties>
 

 

  2) -Phadoop-2.6

      在源碼pom.xml中,經過外部指定的<profile>的id來選擇編譯時所用到的<profile>

    源碼中,-Phadoop-2.6來選擇id爲hadoop-2.6的<profile>做爲編譯條件

      

<profile>
      <id>hadoop-2.2</id>
    <!-- SPARK-7249: Default hadoop profile. Uses global properties. -->
    </profile>

    <profile>
      <id>hadoop-2.3</id>
      <properties>
        <hadoop.version>2.3.0</hadoop.version>
        <jets3t.version>0.9.3</jets3t.version>
      </properties>
    </profile>

    <profile>
      <id>hadoop-2.4</id>
      <properties>
        <hadoop.version>2.4.1</hadoop.version>
        <jets3t.version>0.9.3</jets3t.version>
      </properties>
    </profile>

    <profile>
      <id>hadoop-2.6</id>
      <properties>
        <hadoop.version>2.6.4</hadoop.version>
        <jets3t.version>0.9.3</jets3t.version>
        <zookeeper.version>3.4.6</zookeeper.version>
        <curator.version>2.6.0</curator.version>
      </properties>
    </profile>

    <profile>
      <id>hadoop-2.7</id>
      <properties>
        <hadoop.version>2.7.3</hadoop.version>
        <jets3t.version>0.9.3</jets3t.version>
        <zookeeper.version>3.4.6</zookeeper.version>

   3) -Phive -Phive-thriftserver和-Pyarn,同上面選擇hadoop的profile同樣,編譯時加上對hive和yarn的支持

  4) -DskipTests clean package  編譯過程當中,跳過測試,實例包等,不進行編譯;

./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.7.0

   1)./dev/make-distribution.sh   經過在dev下的make-distribution.sh編譯

   2)--name 2.6.0-cdh5.7.0 --tgz  編譯後打成一個名爲spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz  的tgz包

   2)-Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver  同maven同樣,經過id選擇<profile>中的內容,進而支持某個模塊

   3)-Dhadoop.version=2.6.0-cdh5.7.0   指定hadoop的版本

make-distribution.sh源碼閱讀

        

        在上圖中能夠看出,編譯腳本已經加入export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m",而且加入了跳過檢測包的語句

        

 

         --mvn 後面添加在編譯mvn時選擇的版本和<profile>

        

        打包命令,以及報名的命名規則

 

 到此,spark源碼記錄完畢。

相關文章
相關標籤/搜索