spark編譯


你好如果你搜到這篇文章,說明你正在經歷spark編譯的各種坑,我當時是編譯了4天,還沒有成功,心態崩了,后來還是在小伙伴的幫助下才成功的。

以下的內容希望能助你成功

 

  • 環境准備

這個過程不是讓你瞪着眼睛看要動手檢查

echo $JAVA_HOME

echo $SCALA_HOME

echo $MAVEN_HOME

echo $HADOOP_HOME

 

軟件 Hadoop scala maven JDK
版本 2.6.0-cdh5.7.0 2.11.12 3.6.1 jdk1.8.0_45

如果你是scala2.11.8,應該也沒有問題,因為看下圖,也就是說我們的spark2.4.2版本對應着2.11版本的任何一個小版本的scala都可以。

 

但是建議用scala因為我用scala2.11.8編譯失敗N次。

彩蛋:官網部署文檔:http://spark.apache.org/docs/latest/building-spark.html
maven一定要用最新版

 

 

 

  • 下載

[root@hadoop001 sourcecode]# pwd
/opt/sourcecode

[root@hadoop001 sourcecode]# wget https://archive.apache.org/dist/spark/spark-2.4.2/spark-2.4.2.tgz
[root@hadoop001 sourcecode]# ll
total 28208
-rw-r--r-- 1 root root 14222744 May 1 12:34 spark-2.2.0.tgz
[root@hadoop001 sourcecode]#

 

  • 解壓

[root@hadoop001 sourcecode]#tar -zxvf spark-2.4.2.tgz -C /home/hadoop/app/

小坑:解壓以后一定要看一下用戶和用戶組是否發生改變

[root@hadoop001 sourcecode]# cd /home/hadoop/app/spark-2.4.2

 

  • 配置文件  --這里有巨坑

  1. 修改make-distribution.sh

      1. [root@hadoop001 spark-2.4.2]# vim dev/make-distribution.sh
        
        **修改** VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null\ | grep -v "INFO"\ | grep -v "WARNING"\ | tail -n 1) SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\ | grep -v "INFO"\ | grep -v "WARNING"\ | tail -n 1) SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\ | grep -v "INFO"\ | grep -v "WARNING"\ | tail -n 1) SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 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.2 ##spark版本 SCALA_VERSION=2.11 SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0 SPARK_HIVE=1 

         

  2. 修改pom文件

在 <repositories> </repositories>塊中添加一下內容,<id>central</id>部分的內容地須在第一個位置

[hadoop@hadoop614 spark-2.4.2]$ vim pom.xml

<repositories>
.......
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>

 

 

  • 恐怖的編譯開始,如果你能一次成功,那你上輩子一定拯救了銀河系

[root@hadoop001 spark-2.4.2]#./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserv
er -Pyarn -Pkubernetes
第一次時長無上限,我有一個同事編譯了6個小時

蔣蔣蔣!!!編譯成功!!!是不是很羡慕,但是自己的卻各種報錯,那看看我遇到的坑吧!

 

  • 坑1

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.12/classes... [ERROR] Java heap space -> [Help 1]

您需要通過設置來配置Maven以使用比平時更多的內存MAVEN_OPTS

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

小提示:配置在你的maven家目錄配置的文件里

 

  • 小坑:報錯

 

[ERROR] Plugin org.codehaus.mojo:build-helper-maven-plugin:3.0.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.codehaus.mojo:build-helper-maven-plugin:jar:3.0.0: Could not transfer artifact org.codehaus.mojo:build-helper-maven-plugin:pom:3.0.0 from/to central (http://maven.aliyun.com/nexus/content/groups/public): maven.aliyun.com:80 failed to respond -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
解決方法: 在pom文件中添加以下依賴即可 <dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
</dependency>

 

  • 坑2:

說明:這個錯誤非常崩潰,因為他可能是不同的地方報錯

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-core_2.11: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile failed.: CompileFailed -> [Help 1]

 

  • 解決方法:

1.你上網搜這個問題一定會看到這樣的 
在spark的pom文件中添加這個依賴,但是下邊的那個version3.2.2,你要看自己的報錯處的具體數字,我的是3.2.2

<dependency>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
</dependency>

不管怎么樣,你先加上吧,因為也沒有別的辦法,如果編譯的過程中報錯說pom文件有問題,具體就是顯示你新加的那個位置有問題,那你就好好檢查一下,如果沒有問題還是報錯,那就刪了吧!

 

2.修改spark的pom文件這里的true,說改了這個在編譯就能解決這個問題。 <scalaVersion>${scala.version}</scalaVersion>
<recompileMode>incremental</recompileMode>
<useZincServer>true</useZincServer>

 

3.如果你試完了以上方法還是報錯,你需要檢查一下你的zinc進程是否還留着,一定要殺死,要不然會讓你的編譯done住或者直接被莫名奇妙的殺死。

圖解莫名奇妙的殺死一般會報錯/home/hadoop/app/spark-2.4.2/build/mvn的第168行"${MVN_BIN}" -DzincPort=${ZINC_PORT} "$@"  killed   
錯誤大約是這樣描述的,當時沒有保存下來,若是這個錯基本上就是因為沒有殺死zinc進程,導致端口號被占用

 

 

下圖是我編譯的時候檢查的時候一個各種進程的殘留,可以看到有很多zinc進程殘留,我們需要殺死,這些都是我的經驗,以及查詢資料獲得的信息,

若果有大佬發現不對請及時提點。

解決方法

ps -ef |grep hadoop  看看有關於zinc的進程全部殺掉

再一次進行編譯。

 

4.如果你進行了以上方法還是沒有編譯成功,或者說報錯都沒有改變,還有一種情況就是那么在你確定環境確實沒有問題的情況下我們要進行一下操作

進入spark家目錄,執行vim dev/make-distribution.sh,找到第39行(MVN="$SPARK_HOME/build/mvn")

把它注掉並且添加MVN="${MAVEN_HOME}/bin/mvn"
  • 圖解

 

最后這一步修改完了,一般就會成功了,具體為什么這樣改,我不是很清楚,當時小伙伴幫助我的時候就這樣改的。

 

  • 部署

 如果你編譯成功了,那我們來部署吧

[root@hadoop001 spark-2.4.2]# ll

-rw-rw-r--  1 root root 224531756 May  2 00:49 spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz

這個包就是我們編譯出來的包

 

  •  解壓

[root@hadoop001 spark-2.4.2]# tar -zxvf spark-2.4.2-bin-2.6.0-cdh5.7.0.tgz -C /home/hadoop/app/

[root@hadoop001 app]# ll

drwxrwxr-x 11  root root  4096 May 2 00:49 spark-2.4.2-bin-2.6.0-cdh5.7.0

 

  • 配置環境變量

 [root@hadoop001 app] vim /etc/profile

export SPARK_HOME=/home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0

export PATH=${SPARK_HOME}/bin:$PATH

 [root@hadoop001 app]  source /etc/profile

 

  • 啟動spark

[root@hadoop001 app]# spark-shell
19/05/02 14:02:25 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://hadoop001:4040
Spark context available as 'sc' (master = local[*], app id = local-1556776953433).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.2
/_/

Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM