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、安装 gitpandoc 工具

sudo apt-get install git pandoc

2、下载python的相关包,注意python版本应为2.73.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-fullscheme-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_OPTSSpark2.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  #可能会不存在