按照前面两篇博文《学习spark之基础环境搭建》《学习spark之hadoop编译部署》终于把spark的前置所需环境配置好了,接下来终于可以开始编译部署spark了。
util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
上述warning,具体解决方法见《WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...》
1、下载源文件
从spark官网下载页http://spark.apache.org/downloads.html下载spark源文件,本文使用的是最新的1.6.2版本,选择source code,下载链接:http://d3kbcqa49mib13.cloudfront.net/spark-1.6.2.tgz
下载完成后,将源文件解压缩到目标目录
tar -xvf spark-1.6.2.tgz -C /usr/local/sinasrv2/spark/source
2、编译代码
为了防止在编译过程中出现java outofmemory的错误,需要在编译之前设置MaxPermSize,如下:
export MAVEN_OPTS='-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m'
需要注意的是该参数在jdk8之后已经不再支持,如果尝试在jdk8环境下设置上述参数,编译的时候会得到如下warning:
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=1024m; support was removed in 8.0
进入源码根目录,执行如下编译命令:
mvn -Pyarn -Phadoop-2.6 -PHive -Dhadoop.version=2.6.4 -DskipTests clean package
整个编译过程耗时比较久,本文大约执行了2.5个小时。如无异常,会提示编译成功。
3、生成部署包
执行如下命令:
./make-distribution.sh --name hadoop2.6.4 --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn
同样耗时略久,如无异常,会在源码包根目录生成安装包
spark-1.6.2-bin-hadoop2.6.4.tgz
4、解压spark安装包至目标目录
tar -xvf spark-1.6.2-bin-hadoop2.6.4.tgz -C /usr/local/sinasrv2/spark/
5、将spark加入到环境变量
在/etc/profile加入
export SINASRV=/usr/local/sinasrv2
export JAVA_HOME=$SINASRV/java/jdk1.7.0_80
#export PATH=$JAVA_HOME/bin:$HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export SCALA_HOME=$SINASRV/scala/scala-2.11.8
export SPARK_HOME=$SINASRV/spark/spark-1.6.2-bin-hadoop2.6.4
export HADOOP_HOME=$SINASRV/hadoop/hadoop-2.6.4
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$SPARK_HOME/bin:$SCALA_HOME/bin:$JAVA_HOME/bin:$HOME/bin:$PATH
export PATH=$HADOOP_HOME/bin:$PATH
6、配置conf
进入conf目录 cd $SPARK_HOME/conf
# cp slaves.template slaves
vim slaves 添加hadoop1
# cp spark-env.sh.template spark-env.sh
vim spark-env.sh 添加
export SPARK_MASTER_IP=hadoop1
export SPARK_LOCAL_IP=hadoop1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=512M
export LD_LIBRARY_PATH=$JAVA_LIBRARY_PATH
# cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
spark.master spark://master:7077
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 512m
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
更改日志级别:
# cp log4j.properties.template log4j.properties
vim log4j.properties.template
19 log4j.rootCategory=WARNING, console
7、启动hdfs
cd $HADOOP_HOME/sbin
./start-dfs.sh
8、启动spark
cd $SPARK_HOME/sbin
./start-all.sh
浏览器访问http://hadoop1:8080/就可以访问到spark集群的主页,注意:需要将防火墙关闭service iptables stop
验证启动:
$ jps
1837 NameNode
2113 SecondaryNameNode
2311 Master
1936 DataNode
2383 Worker
3241 CoarseGrainedExecutorBackend
4204 Jps
3153 SparkSubmit
验证客户端连接:
spark-shell --master spark://hadoop1:7077 --executor-memory 500m