分布式集群手操 – Spark搭建

Spark的分布式集群搭建示例,是在之前的几篇分布式搭建环境基础上的进行的搭建示例,Spark运行在Hadoop之上,还可以以StandAlone方式运行,此篇介绍其集群部署安装。

下载

访问Apache Spark官方下载站点,进入下载页,选择合适的版本下载即可。由于此示例环境为hadoop2.6.4,所以选择package typePre-build for Hadoop2.6,然后选择Spark发行版本,以2.0.1为例。

由于Spark是由Scala语言编写的,因此还需要Scala环境,通过 wget http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz 以下载Scala2.11.8

安装

将下载好的tar包解压到适当的目录下即可。

  • 参考命令:tar -zxf <tar文件>

同时将Scala的安装目录添加到环境变量以使其生效,例如在用户环境变量文件中如下配置:

.bash_profile
1
2
export SCALA_HOME=/home/bigdata/services/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin

然后执行source使其生效:source ~/.bash_profile ,输入scala确认安装。

配置

进入conf目录,重命名template文件去掉template扩展名

spark-env.sh

使用命令 cp spark-env.sh.template spark-env.sh 拷贝并重命名,然后修改spark-env.sh文件如下内容:

spark-env.sh
1
2
3
4
5
export HADOOP_CONF_DIR=/home/bigdata/services/hadoop-2.6.4/etc/hadoop
export JAVA_HOME=/usr/local/jdk1.8.0_101
export SCALA_HOME=/home/bigdata/services/scala-2.11.8
export SPARK_MASTER_HOST=hdfs1
export SPARK_MASTER_WEBUI_PORT=8081

spark-default.conf

使用命令 cp spark-default.conf.template spark-default.conf 拷贝并重命名,然后修改spark-default.conf文件如下内容:

spark-default.conf
1
2
3
4
5
spark.master                       spark://hdfs1:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hdfs1:9000/spark-event
spark.dirver.memory 1g
slaves

使用命令 cp slaves.template slaves 拷贝并重命名,然后修改slaves文件如下内容:

slaves
1
2
hdfs2
hdfs3

分发配置

使用scp命令分发配置好的内容到其他节点的相同目录下,包括scala、spark,以hdfs3节点发送hdfs1节点为例:

1
2
3
scp -r ~/services/scala-2.11.8 bigdata@hdfs1:~/services/
scp -r ~/services/spark-2.0.1-bin-hadoop2.6 bigdata@hdfs1:~/services/
scp ~/.bash_profile bigdata@hdfs1:~/

启动与测试

启动

在确认HDFS运行的情况下至Spark安装目录运行sbin/start-all.sh即可启动masterslaves

通过jps命令确认各进程已成功启动。

按照配置的端口地址,打开WebUI查看信息,例如:http://hdfs1:8081。

测试

运行bin/spark-shell,可能会抛出以下异常:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
16/09/25 12:45:35 ERROR spark.SparkContext: Error initializing SparkContext.
java.io.FileNotFoundException: File does not exist: hdfs://hdfs1:9000/spark-event
at org.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:1122)
at org.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:1114)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1114)
at org.apache.spark.scheduler.EventLoggingListener.start(EventLoggingListener.scala:93)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:516)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2275)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:831)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:823)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:823)
at org.apache.spark.repl.Main$.createSparkSession(Main.scala:95)

只需在hdfs创建指定的目录就好:hadoop fs -mkdir /spark-event

重新运行spark-shell,等待一段时间的加载后进入shell命令行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
16/09/25 13:05:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/09/25 13:06:21 WARN spark.SparkContext: Use an existing SparkContext, some configuration may not take effect.
Spark context Web UI available at http://192.168.223.151:4040
Spark context available as 'sc' (master = spark://hdfs1:7077, app id = app-20160925130549-0002).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.0.1
/_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
Type in expressions to have them evaluated.
Type :help for more information.

在shell输入以下代码行:

1
var wordcount=sc.textFile("hdfs://hdfs1:9000/spark/input/helloworld.txt").flatMap(line=>line.split(" ")).map(word=>(word,1)).reduceByKey(_+_).collect().foreach(println)

运行一个WordCount作业,同时通过WebUI查看作业信息http://192.168.223.151:4040:

Spark WebUI

作业运行成功后,shell命令行输出:

1
2
3
4
5
6
7
8
9
10
11
12
(Hello,3)                                                                       
(Thursday,1)
(Is,1)
(Line,1)
(World,3)
(File,1)
(The,1)
(End,1)
(Print,1)
(Today,1)
(System,1)
wordcount: Unit = ()

分布式集群手操 – Spark搭建
https://vicasong.github.io/big-data/spark-distribute-install/
作者
Vica
发布于
2016年10月6日
许可协议