环境搭建-Standalone
Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
前言
StandAlone就是将Spark的角色,以独立的进程的形式运行在服务器上
2个角色:master和worker
根据机器的分布,StandAlone也分为3个变种:
1.伪分布式(测试开发用):将Master进程和Worker进程在一台机器内运行。
2.完全分布式(测试开发用):将Master进程和Worker进程分开在不同的机器上运行,比如机器1运行Master进程,机器2机器3机器4运行Worker进程
3.高可用的完全分布式模式(企业生产环境有可能用): 将Master进程和Worker进程分开在不同的机器上运行,同时,拥有多个Master做备份
Standalone 架构
Standalone集群使用了分布式计算中的master-slave模型,master是集群中含有Master进程的节点,slave是集群中的Worker节点含有Executor进程。
http://spark.apache.org/docs/latest/cluster-overview.html
Spark Standalone集群,类似Hadoop YARN,管理集群资源和调度资源:
- 主节点Master:
- 管理整个集群资源,接收提交应用,分配资源给每个应用,运行Task任务
- 从节点Workers:
- 管理每个机器的资源,分配对应的资源来运行Task;
- 每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数
- 历史服务器HistoryServer(可选):
- Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。
集群规划
Standalone集群安装服务规划与资源配置:
node01:master
node02:slave/worker
node03:slave/worker
官方文档:http://spark.apache.org/docs/2.4.5/spark-standalone.html
修改配置并分发
修改slaves
进入配置目录
cd /export/server/spark/conf
修改配置文件名称
mv slaves.template slaves
vim slaves
内容如下:
代码语言:javascript复制node2
node3
分发到其他机器
将配置好的将 Spark 安装包分发给集群中其它机器,命令如下:
修改spark-env.sh
进入配置目录
cd /export/server/spark/conf
修改配置文件名称
mv spark-env.sh.template spark-env.sh
修改配置文件
vim spark-env.sh
增加如下内容:
代码语言:javascript复制## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
## 指定spark老大Master的IP和提交任务的通信端口
export SPARK_MASTER_HOST=node1
export SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
代码语言:javascript复制## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
## 指定spark老大Master的IP和提交任务的通信端口
export SPARK_MASTER_HOST=node1
export SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
cd /export/server/
scp -r spark-2.4.5-bin-hadoop2.7 root@node2:$PWD
scp -r spark-2.4.5-bin-hadoop2.7 root@node3:$PWD
##创建软连接
ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
启动服务进程
集群启动和停止
在主节点上启动spark集群
/export/server/spark/sbin/start-all.sh
在主节点上停止spark集群
/export/server/spark/sbin/stop-all.sh
单独启动和停止
在 master 安装节点上启动和停止 master:
start-master.sh
stop-master.sh
在 Master 所在节点上启动和停止worker(work指的是slaves 配置文件中的主机名)
start-slaves.sh
stop-slaves.sh
WEB UI页面
http://node1:8080/
可以看出,配置了2个Worker进程实例,每个Worker实例为1核1GB内存,总共是2核 2GB 内存。目前显示的Worker资源都是空闲的,当向Spark集群提交应用之后,Spark就会分配相应的资源给程序使用,可以在该页面看到资源的使用情况。
测试
/export/server/spark/bin/spark-shell --master spark://node1:7077
运行程序
代码语言:javascript复制sc.textFile("hdfs://node1:8020/wordcount/input/words.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ _)
.saveAsTextFile("hdfs://node1:8020/wordcount/output2")
hadoop fs -text /wordcount/output2/part*
1.注意
集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的
因为程序运行在集群上,具体在哪个节点上我们运行并不知道,其他节点可能并没有那个数据文件
2.SparkContext web UI
http://node1:4040/jobs/
3.查看Master主节点WEB UI界面:
http://node1:8080/