选择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包