Spark笔记二之Standalone模式

本文介绍了Spark的Standalone集群模式,包括架构组成(Driver、Master、Worker和Executor的角色),详细步骤教你如何搭建Spark Standalone集群,涵盖配置、 slaves文件设置、SSH免密登录以及启动与停止操作。此外,还讨论了任务提交、Standalone模式的高可靠性,通过Zookeeper实现故障恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

架构

Standalone是spark中的集群模式,下图是一个简单的standalone模式架构图


Dirver:1.提交任务;2.监控任务

Master:1.资源调度;2.分发任务

Worker:1.接收master的任务并启动任务;2.向master汇报资源,健康信息

Executor:1.接收worker的任务并执行;2.向worker汇报任务的执行情况;3.向Diver展示结果。


搭建

1.还是使用从官网下载的安装包将其拷贝到linux下然后解压缩

tar -zxvf spark-1.4.1-bin-hadoop2.6.tgz

 

2.spark基本配置,spark解压缩后会有logs,sbin,bin,conf等目录

在解压后的conf目录下的spark-env.sh中更改spark的配置

(/usr/local/spark-1.4.1-bin-hadoop2.6/conf)中执行改名命令

[root@shb01 conf]# mv  spark-env.sh.template  spark-env.sh

本地模式启动不改也行

在此文件中配置jdk,这个最好加上

export JAVA_HOME= /usr/local/jdk1.7.0_79

 

其它spark配置,这些配置可以手动更改不同的节点内存端口都可以不一样,我在搭建时并没有改。

如果不置顶master_ip则先启动的那个节点就是Master,另外在sbin目录下的start-master.sh脚本中也可以更改master的8080端口但不建议在这里改

Master的端口(spark协议),IP,WEBUI端口

Worker的WEBUI端口,cpu核数,内存

 

export SPARK_MASTER_IP= 127.0.0.1   (指定主节点)

export SPARK_WORKER_CORES=6      (配置worker节点的cpu核数)

export SPARK_MASTER_PORT= 7076   (spark URL端口,如                                                              spark://shb01:7076),注意这个使用的是spark协议

export SPARK_MASTER_WEBUI_PORT=8080 (master webUI地址)

export SPARK_WORKER_WEBUI_PORT=8081         (worker webUI地址)

export SPARK_WORKER_MEMORY=10g          (每个worker占多少内存,这个值如果比实际内存大启动时不会报错用的时候不够会报错)

 

3.slaves节点配置

首先改名字

[root@shb01 conf]# mv slaves.templateslaves

然后增加节点

[root@shb01 conf]# more slaves

# A Spark Worker will be started on each ofthe machines listed below.

192.168.79.131

192.168.79.139

 

4.拷贝到139

[root@shb01 local]# scp -rspark-1.4.1-bin-hadoop2.6 root@192.168.79.139:/usr/local/

 

5.ssh-keygen-t rsa  产生密钥,提示时全部回

ssh-copy-id –I  shb01  <ip地址>   (ip地址是你具体要和谁免key,自己也要和自己设置免key)

ssh  shb01 如果正常看能不能登录

[root@shb01 hadoop-2.6.0]# ssh shb01

Lastlogin: Wed Aug 10 01:42:12 2016 from 192.168.79.1

[root@shb01~]# exit

logout

Connectionto shb01 closed.

[root@shb01hadoop-2.6.0]#

 

注意:配置是节点自己也要配置免密码登录,我就是忘了这部结果搞了很久后才发现

 

6.启动spark集群

在sbin目录下执行启动命令,同样如果修改了spark-env.sh则可以执行stop-all.sh后再次启动

[root@shb01 sbin]# start-all.sh

[root@shb01 sbin]# jps

5055 Worker

4902 Master

5158 Jps

Master在131上,通过jsp命令可以看到有两个进程master和worker,139上只有worker

 

7.日志和webUI

在启动后会创建logs目录在其中可以看到master和worker的日志信息,139上只有worker日志。

Master日志


Worker日志


MASTER WebUI,可以看到显示spark集群中的两个worker


Worker webUI,下图是131上的worker信息,139同理


8.其它参数

以下是spark其它几个参数,还是spark-env.sh文件中

设置GC参数

export  SPARK_JAVA_OPTS="-verbose:gc -XX:-PrintGCDetails-XX:+PrintGCTimeStamps”

 

当一台机器内存大于200G时可以设置多个worker来平分内存,有资料说内存大于200G时java虚拟机性能不好。

export  SPARK_WORKER_INSTANCES=2

下图中可以看到集群中的131节点有两个worker,131我设置了5G内存实际上只有1G但启动不报错用的时候不够才报错。


PID的存储位置,这里存储的是master与worker的对应关系以保持二者通信,不然会宕机。默认是在/tmp目录下,最好改位置RHEL6系统默认会自动清理/tmp文件夹,默认是30天。

export SPARK_PID_DIR=/usr/local/spark/tmp


Spark中shuffle的输出地址,一般一个目录下挂一个硬盘多个目录以逗号分开

export  spark.local.dir=/opt1/spark, /opt2/spark,/opt3/spark

 

 

另外spark-defaults.conf也可以配置参数

export   spark.master    spark://shb01:7077  // spark://主机名:7077


任务提交

spark集群启动后再执行bin目录下的spark_shell命令,将任务提交给集群管理。

[root@shb01 bin]# MASTER=spark://shb01:7077 ./spark-shell

启动成功后在masterUI页面中可以看到Application IDjob调动是FIFO先进先出。


本地读取

Dirver会读取所有worker下的数据文件如果那一个worker中没有这个文件就会报错。

本地读取时有两个可能,1.在那个worker上执行命令就以那个worker上的文件为准;2.按照文件的时间顺序读取最新的文件。

执行如下命令,例子是单词计数

scala>sc.textFile("/usr/local/word").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).collect

报错是因为spark集群中有131和139两个worker但是139上的linux没有word文件


拷贝word文件到139并更改文件中的内容然后再次提交此任务

[root@shb01 local]# scp word root@192.168.79.139:/usr/local/



远程读取

Dirver可以从hdfs集群中读取数据,有namenode负责管理集群资源。

先启动hadoop集群(或hdfs)再执行如下命令

sc.textFile("hdfs://shb01:9000/word").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).collect

 

sc.textFile("hdfs://shb01:9000/word").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).saveAsText("hdfs://shb01:9000/word_spark_standalone")

 

standalone高可靠


拷贝文件到节点上

[root@shb01 local]# tar -zxvfzookeeper-3.4.8.tar.gz

 

2.更改conf目录下的zoo.cfg

tickTime=2000

  initLimit=10

  syncLimit=5

  dataDir=/usr/local/zk/data

  dataLogDir=/usr/local/zk/logs

  clientPort=2181

server1=shb01:2888:3888

 

3.启动zookeeper,在bin目录下执行启动命令

[root@shb01 bin]# ./zkServer.sh start

ZooKeeper JMX enabled by default

Using config:/usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

 

[root@shb01 bin]# ./zkServer.sh status

ZooKeeper JMX enabled by default

Using config:/usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg

Mode: standalone

 

4.修改spark的配置spark_env.sh文件,配置SPARK_DAEMON_JAVA_OPTS参数

exportSPARK_DAEDOM_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER-Dspark.deploy.zookeeper.url=shb01:2181 -Dspark.deploy.zookeeper.dir=/sparkpark"

 

spark集群中所有的节点都要配置且在spark_env.sh中不要指定MASTER的IP


5.启动spark集群





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值