Spark 集群部署
2015-09-14 23:42
281 查看
本文将接受 Spark 集群的部署方式,包括无 HA、Spark Standalone HA 和 基于 ZooKeeper 的 HA 三种。
环境:CentOS6.6 、 JDK1.7.0_80 、 关闭防火墙 、 配置好 hosts 和 SSH 免密码、Spark1.5.0
一. 无 HA 方式
1. 主机名与角色的对应关系:
node1.zhch Master
node2.zhch Slave
node3.zhch Slave
2. 解压 Spark 部署包(可以从官网直接下载部署包,也可从官网下载源码再
编译出部署包)
[yyl@node1 program]$ tar -zxf spark-1.5.0-bin-2.5.2.tgz
3. 修改配置文件
说明:
SPARK_MASTER_IP :Master节点地址
SPARK_MASTER_PORT :Master端口号
SPARK_WORKER_CORES :每个worker的核心数,一般设置成主机的CPU核心数
SPARK_WORKER_INSTANCES :每台主机上运行的worker数量
SPARK_WORKER_MEMORY :Spark作业允许使用的内存总量(每个作业自己的内存空间由属性 spark.executor.memory 决定)
4. 分发 Spark
[yyl@node1 program]$ scp -rp spark-1.5.0-bin-2.5.2 node2.zhch:~/program/
[yyl@node1 program]$ scp -rp spark-1.5.0-bin-2.5.2 node3.zhch:~/program/
5. 启动与停止命令
./sbin/start-master.sh - 启动 Master
./sbin/start-slaves.sh - 启动所有的 Slave
./sbin/start-slave.sh spark://IP:PORT - 启动本机的 Slave
./sbin/start-all.sh - 启动所有的 Master 和 Slave
./sbin/stop-master.sh - 停止 Master
./sbin/stop-slaves.sh - 停止所有的 Slave
./sbin/stop-slave.sh - 停止本机的 Slave
./sbin/stop-all.sh - 停止所有的 Master 和 Slave
./bin/spark-shell --master spark://IP:PORT - 运行 Spark Shell
./bin/spark-submit --class packageName.MainClass --master spark://IP:PORT path/jarName.jar - 提交作业
二. Spark Standalone HA
只需要在无 HA 的基础上修改 conf/spark-env.sh 文件,添加如下一行即可:
说明:
spark.deploy.recoveryMode -- FILESYSTEM,表示开启基于文件系统的单节点恢复模式 ,默认为 NONE
spark.deploy.recoveryDirectory -- Spark 保存恢复状态的目录
三. 基于 ZooKeeper 的 HA
1. 主机名与角色的对应关系:
node1.zhch Master、ZooKeeper
node2.zhch Master、ZooKeeper
node3.zhch Slave、ZooKeeper
node4.zhch Slave
node5.zhch Slave
2.
安装 ZooKeeper 集群
3. 配置
与无 HA 模式相比,conf/slaves 文件中仍然是配置所有的 Slave 节点地址;不同的是 conf/spark-env.sh 中 SPARK_MASTER_IP 不用配置,但要增加 SPARK_DAEMON_JAVA_OPTS 配置,内容如下:
说明:
spark.deploy.recoveryMode -- ZOOKEEPER,表示开启基于 ZooKeeper 的 HA
park.deploy.zookeeper.url -- ZooKeeper URL
spark.deploy.zookeeper.dir -- ZooKeeper 保存恢复状态的目录,缺省为 /spark
配置好 HA 后,由于 master 有多个,在用到 spark url 的地方列出所有的 master,例如:
./bin/spark-shell --master spark://host1:port1,host2:port2,host3:port3
5. 验证 HA
首先启动 Zookeeper 集群;然后在 node1 节点上运行 sbin/start-all.sh 命令启动 Spark 集群。最后使用 jps 命令查看,只在 node1 节点上发现了 Master 进程,而 node2 节点上没有,这时需要在 node2 节点上使用 sbin/start-master.sh 命令来启动备 Master 进程,这样便实现了 Master HA
![](http://static.oschina.net/uploads/space/2015/0914/234114_VQlF_103074.png)
![](http://static.oschina.net/uploads/space/2015/0914/234127_jOhw_103074.png)
kill 掉 node1 节点上的 master 进程后:
环境:CentOS6.6 、 JDK1.7.0_80 、 关闭防火墙 、 配置好 hosts 和 SSH 免密码、Spark1.5.0
一. 无 HA 方式
1. 主机名与角色的对应关系:
node1.zhch Master
node2.zhch Slave
node3.zhch Slave
2. 解压 Spark 部署包(可以从官网直接下载部署包,也可从官网下载源码再
编译出部署包)
[yyl@node1 program]$ tar -zxf spark-1.5.0-bin-2.5.2.tgz
3. 修改配置文件
[yyl@node1 program]$ cd spark-1.5.0-bin-2.5.2/conf/ [yyl@node1 conf]$ cp slaves.template slaves [yyl@node1 conf]$ vim slaves node2.zhch node3.zhch [yyl@node1 conf]$ cp spark-env.sh.template spark-env.sh [yyl@node1 conf]$ vim spark-env.sh export JAVA_HOME=/usr/lib/java/jdk1.7.0_80 export SPARK_MASTER_IP=node1.zhch export SPARK_MASTER_PORT=7077 export SPARK_WORKER_CORES=1 export SPARK_WORKER_INSTANCES=1 export SPARK_WORKER_MEMORY=1g
说明:
SPARK_MASTER_IP :Master节点地址
SPARK_MASTER_PORT :Master端口号
SPARK_WORKER_CORES :每个worker的核心数,一般设置成主机的CPU核心数
SPARK_WORKER_INSTANCES :每台主机上运行的worker数量
SPARK_WORKER_MEMORY :Spark作业允许使用的内存总量(每个作业自己的内存空间由属性 spark.executor.memory 决定)
4. 分发 Spark
[yyl@node1 program]$ scp -rp spark-1.5.0-bin-2.5.2 node2.zhch:~/program/
[yyl@node1 program]$ scp -rp spark-1.5.0-bin-2.5.2 node3.zhch:~/program/
5. 启动与停止命令
./sbin/start-master.sh - 启动 Master
./sbin/start-slaves.sh - 启动所有的 Slave
./sbin/start-slave.sh spark://IP:PORT - 启动本机的 Slave
./sbin/start-all.sh - 启动所有的 Master 和 Slave
./sbin/stop-master.sh - 停止 Master
./sbin/stop-slaves.sh - 停止所有的 Slave
./sbin/stop-slave.sh - 停止本机的 Slave
./sbin/stop-all.sh - 停止所有的 Master 和 Slave
./bin/spark-shell --master spark://IP:PORT - 运行 Spark Shell
./bin/spark-submit --class packageName.MainClass --master spark://IP:PORT path/jarName.jar - 提交作业
二. Spark Standalone HA
只需要在无 HA 的基础上修改 conf/spark-env.sh 文件,添加如下一行即可:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/home/yyl/program/spark-1.5.0-bin-2.5.2/recovery"
说明:
spark.deploy.recoveryMode -- FILESYSTEM,表示开启基于文件系统的单节点恢复模式 ,默认为 NONE
spark.deploy.recoveryDirectory -- Spark 保存恢复状态的目录
三. 基于 ZooKeeper 的 HA
1. 主机名与角色的对应关系:
node1.zhch Master、ZooKeeper
node2.zhch Master、ZooKeeper
node3.zhch Slave、ZooKeeper
node4.zhch Slave
node5.zhch Slave
2.
安装 ZooKeeper 集群
3. 配置
与无 HA 模式相比,conf/slaves 文件中仍然是配置所有的 Slave 节点地址;不同的是 conf/spark-env.sh 中 SPARK_MASTER_IP 不用配置,但要增加 SPARK_DAEMON_JAVA_OPTS 配置,内容如下:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1.zhch:2181,node2.zhch:2181,node3.zhch:2181 -Dspark.deploy.zookeeper.dir=/spark"
说明:
spark.deploy.recoveryMode -- ZOOKEEPER,表示开启基于 ZooKeeper 的 HA
park.deploy.zookeeper.url -- ZooKeeper URL
spark.deploy.zookeeper.dir -- ZooKeeper 保存恢复状态的目录,缺省为 /spark
配置好 HA 后,由于 master 有多个,在用到 spark url 的地方列出所有的 master,例如:
./bin/spark-shell --master spark://host1:port1,host2:port2,host3:port3
5. 验证 HA
首先启动 Zookeeper 集群;然后在 node1 节点上运行 sbin/start-all.sh 命令启动 Spark 集群。最后使用 jps 命令查看,只在 node1 节点上发现了 Master 进程,而 node2 节点上没有,这时需要在 node2 节点上使用 sbin/start-master.sh 命令来启动备 Master 进程,这样便实现了 Master HA
![](http://static.oschina.net/uploads/space/2015/0914/234114_VQlF_103074.png)
![](http://static.oschina.net/uploads/space/2015/0914/234127_jOhw_103074.png)
kill 掉 node1 节点上的 master 进程后:
![](http://static.oschina.net/uploads/space/2015/0914/234210_SwfL_103074.png)
相关文章推荐
- iOS开发-- 使用TFHpple解析html
- iOS开发-- Xcode 6单元测试
- 学习 单链表 总结二
- iOS开发-- TFHpple抓取GB-2312编码的html页面,页面返回编码错误
- How far away ? (hdu 2586 LCA)
- android:assets下的文件复制到SD卡
- UIView 子界面的处理
- 调整数组元素的顺序使得奇数在前偶数在后并且各自有序
- poj 1815 Friendship 【最小割点集】【枚举删点 + 求解最小字典序】
- Python学习笔记1--动态类型
- 启动2015世界人工智能系统智商排名,检测人工智能是否超越人类
- laravel 多对多 belonsToMany
- 算法系列--Climbing Stairs
- f2fs解析(三)NAT中如何区分inode和其他dnode
- 【redis】 windows 32x 64x
- 开博MARK
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- LeetCode-Lowest Common Ancestor of a Binary Search Tree
- 15_09_14 English 学习
- 关于ViewPager和Fragment的二三事