spark編譯

背景

??通常來(lái)講,spark的使用離不開hadoop生態(tài),在spark的官網(wǎng)中已經(jīng)有針對(duì)hadoop通用版本(比如2.6、2.7)的預(yù)編譯版本。但是在實(shí)際生產(chǎn)環(huán)境中使用的hadoop一般是cdh或hdp,與spark預(yù)編譯版本可能會(huì)有兼容性的問(wèn)題,所以要編譯針對(duì)特定hadoop版本的spark。

版本

  • hadoop:2.6.0-cdh5.4.7
  • spark:2.3.1

maven 編譯

前提條件

1.maven版本在3.3.9以上并且jdk在1.8以上
2.設(shè)置MAVEN_OPTS,以便在編譯時(shí)可以用更多的內(nèi)存空間

  export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

了解pom文件

在編譯之前我們首先了解一下spark源碼中的pom文件,首先在<properties/>中提供了編譯spark時(shí)各組件的默認(rèn)版本:

如圖所示,編譯spark時(shí)默認(rèn)的hadoop版本是2.6.5,編譯時(shí)可以通過(guò)-D的方式指定組件版本。

其次,在<profiles/>中提供了編譯時(shí)的可選項(xiàng):
比如編譯的spark要支持yarn,可以在編譯時(shí)用-Pyarn來(lái)指定。

編譯

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

上述命令編譯的spark支持yarn、hive、hadoop2.6,同時(shí)指定了hadoop的版本。

編譯可運(yùn)行的spark包

在spark的源碼的dev目錄下提供了一個(gè)名叫make-distribution.sh的腳本來(lái)編譯一個(gè)可運(yùn)行的spark包,具體用法如下:

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

該腳本實(shí)際用的是上面介紹的mvn編譯,具體用法可以通過(guò)執(zhí)行./dev/make-distribution.sh --help來(lái)查看。

在執(zhí)行該腳本時(shí)要指定--name,它是編譯后包名的一部分:

編譯時(shí)遇到的問(wèn)題

問(wèn)題一:

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

解決:這是由于編譯時(shí)找不到hadoop對(duì)應(yīng)的maven庫(kù),只要在spark的pom文件中加入cdh的maven倉(cāng)庫(kù)即可

<repositories>
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
</repositories>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spark編譯有三種方式:SBT(Simple Build Tool),Maven,Make-distribut...
    Bloo_m閱讀 608評(píng)論 0 2
  • 如果官方給的安裝包不能滿足我們生產(chǎn)環(huán)境的要求又或者我們基于自己的需求修改了spark源碼,那么我們就需要對(duì)spar...
    Sx_Ren閱讀 3,280評(píng)論 1 1
  • 我以近十天的編譯Spark的痛苦經(jīng)歷,來(lái)分享一下如何在國(guó)內(nèi)快速的完成Spark編譯。 其實(shí),唯一的任務(wù)就是將Spa...
    找不到工作的_Ngone閱讀 2,329評(píng)論 0 0
  • 1. 選擇spark版本 在生產(chǎn)環(huán)境中,使用的spark安裝文件都是自編譯的,所以必須自己編譯源碼。首先,確認(rèn)要使...
    奉先閱讀 267評(píng)論 0 0
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,531評(píng)論 0 85

友情鏈接更多精彩內(nèi)容