選擇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包