Spark2.1.0 源码编译
第一步 确保没有设置Spark环境变量
gedit ~/.bashrc
如有设置SPARK_HOME
,则需移除或注释
source ~/.bashrc
第二步 设置Maven的国内镜像源
cd /usr/local/maven
gedit ./conf/settings.xml
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>https://repo1.maven.org/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
第三步 下载Spark源码
下载会很慢,可挂着,先做第四步
cd ~
wget https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0.tgz
第四步 下载所需依赖工具–可同时进行
1、安装 git
和 pandoc
工具
sudo apt-get install git pandoc
2、下载python的相关包,注意python版本应为2.7
或3.5
,使用Ubuntu自带的即可,这里两个版本都进行了安装,是否使用sudo
看个人系统,如出现权限不够
,则使用sudo
python2.7 -m pip install pypandoc -i https://pypi.douban.com/simple/
sudo python3.5 -m pip install pypandoc -i https://pypi.douban.com/simple/
3、(可选)
如需构建SparkR
,则进行以下操作,否则可跳过,编译SparkR
需要的时间可能会翻倍
,看个人需要。
下载texlive
cd ~
wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
创建texlive
安装目录,以及解压安装包
sudo mkdir /usr/local/texlive
sudo chmod -R 777 /usr/local/texlive
tar -zxf ~/install-tl-unx.tar.gz -C ~/
这里介绍一下texlive
安装的scheme
选项的一些参数,参数是自底向上追加安装内容,经过测试,想要顺利通过Spark的编译,只能选取前两个参数,即scheme-full
和scheme-medium
,选取scheme-small
时会报错缺少字体
。
命令参数 | 安装内容 |
scheme-full | everything-完整安装,没测试,可能有2-6G |
scheme-medium | small + more packages and languages,2G左右 |
scheme-small | basic + xetex, metapost, a few languages,600M左右 |
scheme-basic | plain and latex,200M左右 |
scheme-minimal | plain only,几十M |
scheme-infrastructure-only | no TeX at all |
scheme-book | core LaTeX and add-ons |
scheme-teTeX | more than medium, but nowhere near full |
安装texlive
,这里选取scheme-medium
,整个过程可能需要30分钟左右,可先做后面R包安装
--no-interaction
表示跳过菜单选项配置,--texdir
表示设置安装目录
cd ~/install-tl-20220723 #20220723是下载该文件的日期,并不是固定的
perl ./install-tl --no-interaction --scheme=scheme-medium --texdir=/usr/local/texlive
添加texLive
环境变量
gedit ~/.bashrc
#[TexLive]
TEXLIVE_HOME=/usr/local/texlive
PATH=$PATH:$TEXLIVE_HOME/bin/x86_64-linux
source ~/.bashrc
R包安装
R
install.packages(c("knitr","string","markdown","e1071","testthat","survival","devtools"))
install.packages("rmarkdown")
.packages(all.available=TRUE)
第五步 查看hadoop版本
hadoop version
这里是hadoop 2.7.1
第六步 对Spark源码进行编译打包
cd ~
tar -zxf ~/spark-2.1.0.tgz -C ~/
cd ~/spark-2.1.0
gedit ./dev/make-distribution.sh
1、修改make文件,更改Spark构建的方式,make文件包含maven打包,这里将maven打包和make构建分离,所以需要更改make文件内容,以下内容前面是设置版本,加快速度,末尾处是取消make阶段的maven打包过程,直接进入make阶段,还有文件最后倒数第3行的czf
加个-
#VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
#SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | tail -n 1)
#SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | tail -n 1)
#SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
# | grep -v "INFO"\
# | 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.1.0
SCALA_VERSION=2.11
SPARK_HADOOP_VERSION=2.7.1
SPARK_HIVE=1
if [ "$NAME" == "none" ]; then
NAME=$SPARK_HADOOP_VERSION
fi
echo "Spark version is $VERSION"
if [ "$MAKE_TGZ" == "true" ]; then
echo "Making spark-$VERSION-bin-$NAME.tgz"
else
echo "Making distribution for Spark $VERSION in $DISTDIR..."
fi
# Build uber fat JAR
cd "$SPARK_HOME"
#export MAVEN_OPTS="${MAVEN_OPTS:--Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m}"
export MAVEN_OPTS="-Xss64m -Xmx2g -XX:ReservedCodeCacheSize=1g"
# Store the command as an array because $MVN variable might have spaces in it.
# Normal quoting tricks don't work.
# See: http://mywiki.wooledge.org/BashFAQ/050
#BUILD_COMMAND=("$MVN" -T 1C clean package -DskipTests $@)
# Actually build the jar
#echo -e "\nBuilding with..."
#echo -e "\$ ${BUILD_COMMAND[@]}\n"
#"${BUILD_COMMAND[@]}"
#最后倒数第3行加个-
tar -czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
2、(可选)
如果需要构建SparkR
,可以修改./R/check-cran.sh
文件内容,跳过CRAN检查,可以大大降低构建时间,至于是否有影响,这里并未考究,一般是当make出错时,为了快速验证是否已经修复错误问题,可以跳过检查。
cd ~/spark-2.1.0
gedit ./R/check-cran.sh
CRAN_CHECK_OPTIONS="--as-cran"
改为
#--as-cran
CRAN_CHECK_OPTIONS=""
3、maven打包,
配置scala版本,和MAVEN_OPTS
(Spark2.1.0
默认是Java7
,这里使用Java8
,该参数有不同)
cd ~/spark-2.1.0
./dev/change-scala-version.sh 2.11
export MAVEN_OPTS="-Xss64m -Xmx2g -XX:ReservedCodeCacheSize=1g"
打包,maven支持并行构建,-T 2C
表示使用2个线程进行构建
./build/mvn -T 2C package -DskipTests -Psparkr -Phive -Phive-thriftserver -Pmesos -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.1 -Dscala-2.11 -Pspark-ganglia-lgpl -Pkinesis-asl
4、make构建
无SparkR构建,时间相对更短
./dev/make-distribution.sh --name h27hive --tgz --pip -Pmesos -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.1 -Dscala-2.11 -Phive -Phive-thriftserver -Pspark-ganglia-lgpl -Pkinesis-asl
含SparkR构建,时间更长
./dev/make-distribution.sh --name rh27hive --tgz --pip --r -Psparkr -Pmesos -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.1 -Dscala-2.11 -Phive -Phive-thriftserver -Pspark-ganglia-lgpl -Pkinesis-asl
5、收尾,删除安装文件
rm -rf ~/spark-2.1.0.tgz
rm -rf ~/install-tl-unx.tar.gz
rm -rf ~/install-tl-20220723
rm -rf ~/spark-2.1.0 #因为打包以后,可以多次make,需不需要删除看个人
如果觉得不需要texlive了,可以卸载
sudo rm -rf /usr/local/texlive
rm -rf ~/.texlive2022 #可能会不存在