说在前面的话
Spark源码编译的3大方式
1、Maven编译
2、SBT编译 (暂时没)
3、打包编译make-distribution.sh
前言
Spark可以通过SBT和Maven两种方式进行编译,再通过make-distribution.sh脚本生成部署包。
SBT编译需要安装git工具,而Maven安装则需要maven工具,两种方式均需要在联网 下进行。
尽管maven是Spark官网推荐的编译方式,但是sbt的编译速度更胜一筹。因此,对于spark的开发者来说,sbt编译可能是更好的选择。由于sbt编译也是基于maven的POM文件,因此sbt的编译参数与maven的编译参数是一致的。
心得
有时间,自己一定要动手编译源码,想要成为高手和大数据领域大牛,前面的苦,是必定要吃的。
无论是编译spark源码,还是hadoop源码。新手初次编译,一路会碰到很多问题,也许会花上个一天甚至几天,这个是正常。把心态端正就是!有错误,更好,解决错误,是最好锻炼和提升能力的。
更不要小看它们,能碰到是幸运,能弄懂和深入研究,之所以然,是福气。
各大版本简介
1、Apache版------可自己编译,也可采用预编译的版本
2、CDH版---------无需自己编译
3、HDP版----------无需自己编译
主流是这3大版本,其实,是有9大版本。CDH的CM是要花钱的,当然它的预编译包,是免费的。
hadoop/spark源码的下载方式:
1、官网下载
2、Github下载(仅source code)
以下是从官网下载:
以下是Github下载(仅source code)
CDH的下载
http://archive-primary.cloudera.com/cdh5/cdh/5/
HDP的下载
http://zh.hortonworks.com/products/
好的,那我这里就以,Githud为例。
准备Linux系统环境(如CentOS6.5)
********************************************************************************
* 思路流程:
* 第一大步:在线安装git
* 第二大步:创建一个目录来克隆spark源代码(mkdir -p /root/projects/opensource)
* 第三大步:切换分支
* 第四大步:安装jdk1.7+
* 第五大步:安装maven
* 第六大步:看官网,跟着走
* 第七大步:通过MVN下载对应的包
********************************************************************************
当然,可以参考官网给出的文档,
http://spark.apache.org/docs/1.6.1/building-spark.html
第一大步:在线安装git(root 用户下)
yum install git (root用户)
或者
Sudo yum install git (普通用户)
[root@Compiler ~]# yum install git
.......
Total download size: 4.7 M
Installed size: 15 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): git-1.7.1-4.el6_7.1.x86_64.rpm | 4.6 MB 00:01
.........
Complete!
[root@Compiler ~]#
第二大步:创建一个目录克隆spark源代码
mkdir -p /root/projects/opensource
cd /root/projects/opensource
git clone https://github.com/apache/spark.git
[root@Compiler ~]# pwd
/root
[root@Compiler ~]# mkdir -p /root/projects/opensource
[root@Compiler ~]# cd projects/opensource/
[root@Compiler opensource]# pwd
/root/projects/opensource
[root@Compiler opensource]# ls
[root@Compiler opensource]#
/root
[root@Compiler ~]# mkdir -p /root/projects/opensource
[root@Compiler ~]# cd projects/opensource/
[root@Compiler opensource]# pwd
/root/projects/opensource
[root@Compiler opensource]# ls
[root@Compiler opensource]#
[root@Compiler opensource]# pwd
/root/projects/opensource
[root@Compiler opensource]# git clone https://github.com/apache/spark.git
Initialized empty Git repository in /root/projects/opensource/spark/.git/
remote: Counting objects: 403059, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 403059 (delta 4), reused 1 (delta 1), pack-reused 403045
Receiving objects: 100% (403059/403059), 182.79 MiB | 896 KiB/s, done.
Resolving deltas: 100% (157557/157557), done.
[root@Compiler opensource]# ls
spark
[root@Compiler opensource]# cd spark/
[root@Compiler spark]#
/root/projects/opensource
[root@Compiler opensource]# git clone https://github.com/apache/spark.git
Initialized empty Git repository in /root/projects/opensource/spark/.git/
remote: Counting objects: 403059, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 403059 (delta 4), reused 1 (delta 1), pack-reused 403045
Receiving objects: 100% (403059/403059), 182.79 MiB | 896 KiB/s, done.
Resolving deltas: 100% (157557/157557), done.
[root@Compiler opensource]# ls
spark
[root@Compiler opensource]# cd spark/
[root@Compiler spark]#
其实就是,对应着,如下网页界面。
[root@Compiler spark]# pwd
/root/projects/opensource/spark
[root@Compiler spark]# ll
total 280
-rw-r--r--. 1 root root 1804 Sep 2 03:53 appveyor.yml
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 assembly
drwxr-xr-x. 2 root root 4096 Sep 2 03:53 bin
drwxr-xr-x. 2 root root 4096 Sep 2 03:53 build
drwxr-xr-x. 8 root root 4096 Sep 2 03:53 common
drwxr-xr-x. 2 root root 4096 Sep 2 03:53 conf
-rw-r--r--. 1 root root 988 Sep 2 03:53 CONTRIBUTING.md
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 core
drwxr-xr-x. 5 root root 4096 Sep 2 03:53 data
drwxr-xr-x. 6 root root 4096 Sep 2 03:53 dev
drwxr-xr-x. 9 root root 4096 Sep 2 03:53 docs
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 examples
drwxr-xr-x. 15 root root 4096 Sep 2 03:53 external
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 graphx
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 launcher
-rw-r--r--. 1 root root 17811 Sep 2 03:53 LICENSE
drwxr-xr-x. 2 root root 4096 Sep 2 03:53 licenses
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 mesos
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 mllib
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 mllib-local
-rw-r--r--. 1 root root 24749 Sep 2 03:53 NOTICE
-rw-r--r--. 1 root root 97324 Sep 2 03:53 pom.xml
drwxr-xr-x. 2 root root 4096 Sep 2 03:53 project
drwxr-xr-x. 6 root root 4096 Sep 2 03:53 python
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 R
-rw-r--r--. 1 root root 3828 Sep 2 03:53 README.md
drwxr-xr-x. 5 root root 4096 Sep 2 03:53 repl
drwxr-xr-x. 2 root root 4096 Sep 2 03:53 sbin
-rw-r--r--. 1 root root 16952 Sep 2 03:53 scalastyle-config.xml
drwxr-xr-x. 6 root root 4096 Sep 2 03:53 sql
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 streaming
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 tools
drwxr-xr-x. 3 root root 4096 Sep 2 03:53 yarn
[root@Compiler spark]#
第三大步:切换分支
git checkout v1.6.1 //在spark目录下执行
[root@Compiler spark]# pwd
/root/projects/opensource/spark
[root@Compiler spark]# git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-0.5
...
remotes/origin/branch-1.6
remotes/origin/branch-2.0
remotes/origin/master
[root@Compiler spark]# git checkout v1.6.1
Note: checking out 'v1.6.1'.
You are in 'detached HEAD' state. You can look around, make experimental
...
HEAD is now at 15de51c... Preparing Spark release v1.6.1-rc1
[root@Compiler spark]#
那么,就有了。make-distribution.sh
[root@Compiler spark]# pwd
/root/projects/opensource/spark
[root@Compiler spark]# ll
total 1636
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 assembly
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 bagel
drwxr-xr-x. 2 root root 4096 Sep 2 03:57 bin
drwxr-xr-x. 2 root root 4096 Sep 2 03:57 build
-rw-r--r--. 1 root root 1343562 Sep 2 03:57 CHANGES.txt
drwxr-xr-x. 2 root root 4096 Sep 2 03:57 conf
-rw-r--r--. 1 root root 988 Sep 2 03:53 CONTRIBUTING.md
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 core
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 data
drwxr-xr-x. 7 root root 4096 Sep 2 03:57 dev
drwxr-xr-x. 4 root root 4096 Sep 2 03:57 docker
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 docker-integration-tests
drwxr-xr-x. 9 root root 4096 Sep 2 03:57 docs
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 ec2
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 examples
drwxr-xr-x. 11 root root 4096 Sep 2 03:57 external
drwxr-xr-x. 6 root root 4096 Sep 2 03:57 extras
drwxr-xr-x. 4 root root 4096 Sep 2 03:57 graphx
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 launcher
-rw-r--r--. 1 root root 17352 Sep 2 03:57 LICENSE
drwxr-xr-x. 2 root root 4096 Sep 2 03:57 licenses
-rwxr-xr-x. 1 root root 8557 Sep 2 03:57 make-distribution.sh
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 mllib
drwxr-xr-x. 5 root root 4096 Sep 2 03:57 network
-rw-r--r--. 1 root root 23529 Sep 2 03:57 NOTICE
-rw-r--r--. 1 root root 91106 Sep 2 03:57 pom.xml
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 project
-rw-r--r--. 1 root root 13991 Sep 2 03:57 pylintrc
drwxr-xr-x. 6 root root 4096 Sep 2 03:57 python
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 R
-rw-r--r--. 1 root root 3359 Sep 2 03:57 README.md
drwxr-xr-x. 5 root root 4096 Sep 2 03:57 repl
drwxr-xr-x. 2 root root 4096 Sep 2 03:57 sbin
drwxr-xr-x. 2 root root 4096 Sep 2 03:57 sbt
-rw-r--r--. 1 root root 13191 Sep 2 03:57 scalastyle-config.xml
drwxr-xr-x. 6 root root 4096 Sep 2 03:57 sql
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 streaming
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 tags
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 tools
-rw-r--r--. 1 root root 848 Sep 2 03:57 tox.ini
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 unsafe
drwxr-xr-x. 3 root root 4096 Sep 2 03:57 yarn
[root@Compiler spark]#
其实啊,对应下面的这个界面
修改make-distribution.sh文件
[root@Compiler spark]# pwd
/root/projects/opensource/spark
[root@Compiler spark]# vim make-distribution.sh
我自己安装的maven,是 MAVEN_HOME=/usr/local/apache-maven-3.3.3
改为。
MVN="/usr/local/apache-maven-3.3.3/bin/mvn" 或
MVN="$MAVEN_HOME/bin /mvn"
MAKE_TGZ=false
NAME=none
#MVN="$SPARK_HOME/build/mvn"
MVN="$MAVEN_HOME/bin/mvn"
第四大步 安装jdk7+
第一步:查看Centos6.5自带的JDK是否已安装
<1> 检测原OPENJDK版本
# java -version
一般将获得如下信息:
tzdata-java-2013g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
<2>进一步查看JDK信息
# rpm -qa|grep java
rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
<3>卸载OPENJDK
自带的jdk已经没了。
在root用户下安装jdk-7u79-linux-x64.tar.gz
在/usr/local上传
解压,tar -zxvf jdk-7u79-linux-x64.tar.gz
删除压缩包,rm -rf jdk-7u79-linux-x64.tar.gz
配置环境变量,vim /etc/profile
#java
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
文件生效,source /etc/profile
查看是否安装成功,java –version
第五大步、安装maven
下载apache-maven-3.3.3-bin.tar.gz
/usr/local/
上传apache-maven-3.3.3-bin.tar.gz
解压,tar -zxvf apache-maven-3.3.3-bin.tar.gz
删除压缩包,rm -rf apache-maven-3.3.3-bin.tar.gz
maven的配置环境变量,vim /etc/profile
#maven
export MAVEN_HOME=/usr/local/apache-maven-3.3.3
export PATH=$PATH:$MAVEN_HOME/bin
文件生效,source /etc/profile
查看是否安装成功,mvn -v
第六大步:看官网,跟着走,初步了解
http://spark.apache.org/docs/1.6.1/building-spark.html
[root@Compiler spark]# vim pom.xml
先来初步认识下这个pom.xml文件
P是profile的意思,
我们可以同时激活多个嘛
其他的不再赘述,这是对它的一些初步认识。
有了对pom.xml的初步了解,之后呢?经验之谈,一般都会对$MAVEN_HOME/conf/settings.xml修改,这是大牛在生产环境下的心血总结啊!!!
这里啊,给大家推荐一款很实用的软件!
解压,
这是不行的
是因为,左侧 本地站点 这个位置选的是 计算机 ,而非具体的某个盘。
以下是默认的
改为,
nexus-osc
*
Nexus osc
http://nexus.rc.dataengine.com/nexus/content/groups/public
nexus-osc
central
Nexus osc
http://maven.oschina.net/content/groups/public
nexus-osc-thirdparty
thirdparty
Nexus osc thirdparty
http://maven.oschina.net/content/repositories/thirdparty
central
central
central
http://central.maven.org/maven2
repol
central
repol
http://repol.maven.org/maven2
jdk-1.4
1.4
rc
rc nexus
http://nexus.rc.dataengine.com/nexus/content/groups/public
true
false
nexus
local private nexus
http://maven.oschina.net/content/groups/public
true
false
central
central
http://central.maven.org/maven2/
true
false
repol
repol
http://repol.maven.org/maven2/
true
false
rc
rc nexus
http://nexus.rc.dataengine.com/nexus/content/groups/public
true
false
nexus
local private nexus
http://maven.oschina.net/content/groups/public
true
false
central
central
http://central.maven.org/maven2/
true
false
repol
repol
http://repol.maven.org/maven2/
true
false
jdk-1.4
好啦,上述,是初步的解读!!!
我们继续,解读spark根目录,
这样,我们就对这个目录结构,有了一个里里外外的认识。
https://github.com/apache/spark/tree/v1.6.1
好吧,到此,我对https://github.com/apache/spark/tree/v1.6.1 的解读到此结束。其他的,以后多深入研究。
第七大步:先通过mvn下载相应的jar包
mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Psparkr -DskipTests clean package //在spark 源码父目录下执行
[root@Compiler spark]# pwd
/root/projects/opensource/spark
[root@Compiler spark]# mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Psparkr -DskipTests clean package
也许,要
[root@Compiler spark]# mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Psparkr -DskipTests clean package
第八大步: 编译spark
./make-distribution.sh --name custom-spark --tgz -Psparkr -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Pyarn //在spark 源码父目录下执行
[root@Compiler spark]# ./make-distribution.sh --name custom-spark --tgz -Psparkr -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Pyarn
安装过程中,可能会出现缺少包的情况、这可以通过重复七八步解决,实在不行,可以根据错误信息的提示,前往maven的官方网站,下载对应的包进行安装,我在安装的时候就通过maven安装了以下文件:
mvn install:install-file -DgroupId=org.scalatest -DartifactId=scalatest-maven-plugin -Dversion=1.0 -Dpackaging=jar -Dfile=/home/neoway/scalatest-maven-plugin-1.0.jar
Reference:http://www.cnblogs.com/zlslch/p/5865707.html
官方文档地址:http://spark.apache.org/docs/latest/building-spark.html