Spark的Standalone模式部署

1:Spark Standalone Mode安装html

A:部署包生成shell

首先,下载并解压缩Spark的源码,切换到解压缩所生成的目录,运行部署包生成程序make-distribution.sh:apache

./make-distribution.sh --hadoop 2.2.0 --with-yarn --tgz

spark源码根目录下的make-distribution.sh能够带如下参数:浏览器

--tgz:在根目录下生成 spark-$VERSION-bin.tar.gz,不加参数是不生成tgz文件,只生成/dist目录。网络

--hadoop VERSION:打包时所用的Hadoop版本号,不加参数时为1.0.4。并发

--with-yarn:是否支持Hadoop YARN,不加参数时为不支持yarn。app

--with-tachyon:是否支持内存文件系统Tachyon,不加参数时为不支持,此参数spark1.0以后提供。oop

运行成功后,在根目录下生成相似spark-0.9.0-incubating-hadoop_2.2.0-bin.tar.gz的部署包,不过该部署包只带有最基本的Spark运行文件,不包含例程和源代码。若是须要例程和源代码,请使用官方提供的二进制部署包。测试

笔者在百度云盘上提供了spark0.90、spark0.91和spark1.0-SNAPHOT的部署包,其中spark1.0-SNAPHOT还提供了支持Tachyon的部署包。spa

B:规划

虚拟机hadoop1(IP地址为192.168.100.171)做为Master

虚拟机hadoop2(IP地址为192.168.100.172)、hadoop3(IP地址为192.168.100.173)、 hadoop4(IP地址为192.168.100.174)、hadoop5(IP地址为192.168.100.175)做为slave

因为hadoop一、hadoop二、hadoop三、hadoop四、hadoop5以前已经安装了hadoop2.2.0集群,因此省却了安装 JAVA、创建SSH无密码登陆过程。固然,spark集群能够独立于hadoop集群外安装,不过须要安装JAVA、创建SSH无密码登陆,具体过程可 以参照hadoop2.2.0测试环境搭建

C:在Master上生成安装目录

将生成的spark-0.9.0-incubating-hadoop_2.2.0-bin.tar.gz文件复制到Master(即hadoop1)上并解压

[root@hadoop1 hadoop]# tar zxf spark-0.9.0-incubating-hadoop_2.2.0-bin.tar.gz

[root@hadoop1 hadoop]# mv spark-0.9.0-incubating spark090

[root@hadoop1 hadoop]# cd spark090

[root@hadoop1 spark090]# ls -lsa

Spark的Standalone 模式部署 - mmicky - mmicky 的博客

D:配置集群文件

[root@hadoop1 spark090]# vi conf/slaves

[root@hadoop1 spark090]# cat conf/slaves 

hadoop2
hadoop3
hadoop4
hadoop5

[root@hadoop1 spark090]# vi conf/spark-env.sh

[root@hadoop1 spark090]# cat conf/spark-env.sh

export SPARK_MASTER_IP=hadoop1
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=1g
export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}

E:派发安装文件到slaves

[root@hadoop1 spark090]# cd ..

[root@hadoop1 hadoop]# chown -R hadoop:hadoop spark090

[root@hadoop1 hadoop]# su - hadoop

[hadoop@hadoop1 ~]$ cd /app/hadoop/

[hadoop@hadoop1 hadoop]$ scp -r spark090 hadoop2:/app/hadoop/

[hadoop@hadoop1 hadoop]$ scp -r spark090 hadoop3:/app/hadoop/

[hadoop@hadoop1 hadoop]$ scp -r spark090 hadoop4:/app/hadoop/

[hadoop@hadoop1 hadoop]$ scp -r spark090 hadoop5:/app/hadoop/

F:启动集群

[hadoop@hadoop1 hadoop]$ cd spark090

[hadoop@hadoop1 spark090]$ sbin/start-all.sh

经过浏览器访问http://hadoop1:8080能够监控spark Standalone集群

Spark的Standalone 模式部署 - mmicky - mmicky 的博客

2:关于spark-shell链接到spark Standalone集群

若是要启动spark-shell链接到spark Standalone集群,有两种方法:

a:使用MASTER=spark://hadoop1:7077 bin/spark-shell启动

b:配置在conf/spark-env.sh增长如下几行:

export SPARK_MASTER_IP=192.168.1.171

export SPARK_MASTER_PORT=7077

export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}

而后使用使用./spark-shell启动

若是是远程客户端来链接到spark Standalone集群的话,部署目录要和集群的部署目录一致。

3:关于Spark Standalone Mode的运行

A:资源调度

Spark Standalone Cluster目前只支持FIFO方式调度,不过,容许多个并发用户,经过控制每一个应用程序可得到的最大资源数。默认状况下,一次只运行一个应用程序,应 用程序使用集群中的全部内核,不过能够经过System.setProperty(“spark.cores.max”,“10”)设置使用的内核数,这 个值必须在初始化SparkContext以前设置。 

B:监控和日志

Spark Standalone Cluster能够经过Web UI来监控集群,Master和每一个Worker都有各自的Web UI显示统计数据。

Spark运行的job明细在$SPARK_HOME/work(由参数SPARK_WORKER_DIR设定)。当一个job提交后,spark 会分发给worker,在每一个节点的$SPARK_HOME/work/jodID/executorID创建stdout和stderr目录做为job 日志输出。

C:和Hadoop并用

Spark能够做为独立的服务,在已有的Hadoop集群设备上并行,并经过hdfs://URL存取Hadoop数据。固然,Spark也能够建 成一个独立的集群,经过网络存取Hadoop数据,只不过会比本地硬盘存取速度要慢,对于处于本地网络的两个集群,这不是问题。

D:高可用

Spark存在单点故障的问题,要解决这个问题,有两个方案:经过 Zookeeper待机Master和本地文件系统的单点恢复,具体参考http://spark.incubator.apache.org/docs/latest/spark-standalone.html

4:测试

因为缺乏例子,因此使用官方提供的二进制安装包从新部署了一下,并启动。

./run-example org.apache.spark.examples.SparkKMeans spark://hadoop1:7077 ./kmeans_data.txt 2 1

也能够直接在spark shell里调试程序。

转自:http://database.51cto.com/art/201404/435674.htm