Spark运行模式-4种

目录

    • Local 模式
        • 使用 Spark-shell
        • 提交流程
        • wordcount 数据流程分析:
    • Standalone 模式
        • 配置 Standalone 模式
        • 使用 Standalone 模式运行计算 PI 的程序
        • 在 Standalone 模式下启动 Spark-shell
        • 配置 Spark 任务历史服务器(为 Standalone 模式配置)
        • HA 配置(为 Mater 配置)
        • Standalone 工作模式图解
    • Yarn 模式
        • Yarn 模式概述
        • Yarn 模式配置
    • Mesos 模式
    • 几种运行模式的对比

Local 模式

Local 模式就是指的只在一台计算机上来运行 Spark.
通常用于测试的目的来使用 Local 模式, 实际的生产环境中不会使用 Local 模式.
解压 Spark 安装包

tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /export/servers

然后复制刚刚解压得到的目录, 并命名为spark-local

cp -r spark-2.1.1-bin-hadoop2.7 spark-local

运行官方求PI的案例

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.11-2.1.1.jar 100

备注: 也可以使用run-examples来运行

bin/run-example SparkPi 100

使用 Spark-shell

Spark-shell 是 Spark 给我们提供的交互式命令窗口(类似于 Scala 的 REPL)
本案例在 Spark-shell 中使用 Spark 来统计文件中各个单词的数量.
创建 2 个文本文件

mkdir input
cd input
touch 1.txt
touch 2.txt

分别在 1.txt 和 2.txt 内输入一些单词.
打开 Spark-shell

bin/spark-shell
sc.textFile("input/").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).collect

登录hadoop102:4040查看程序运行

提交流程

Spark运行模式-4种_第1张图片

wordcount 数据流程分析:

Spark运行模式-4种_第2张图片

  1. textFile(“input”):读取本地文件input文件夹数据;
  2. flatMap(_.split(" ")):压平操作,按照空格分割符将一行数据映射成一个个单词;
  3. map((_,1)):对每一个元素操作,将单词映射为元组;
  4. reduceByKey(+):按照key将值进行聚合,相加;
  5. collect:将数据收集到Driver端展示。

Standalone 模式

构建一个由 Master + Slave 构成的 Spark 集群,Spark 运行在集群中。
这个要和 Hadoop 中的 Standalone 区别开来. 这里的 Standalone 是指只用 Spark 来搭建一个集群, 不需要借助其他的框架.是相对于 Yarn 和 Mesos 来说的.

配置 Standalone 模式

复制 spark, 并命名为spark-standalone

cp -r spark-2.1.1-bin-hadoop2.7 spark-standalone

进入配置文件目录conf, 配置spark-evn.sh

cd conf/
cp spark-env.sh.template spark-env.sh

在spark-env.sh文件中配置如下内容:

SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077 # 默认端口就是7077, 可以省略不配

修改 slaves 文件, 添加 worker 节点

cp slaves.template slaves

在slaves文件中配置如下内容:

hadoop102
hadoop103
hadoop104

分发spark-standalone
启动 Spark 集群

sbin/start-all.sh

可能碰到的问题
• 如果启动的时候报:JAVA_HOME is not set, 则在sbin/spark-config.sh中添加入JAVA_HOME变量即可. 不要忘记分发修改的文件
增加

export JAVA_HOME=/export/servers/jdk

在网页中查看 Spark 集群情况
地址:http://hadoop102:8080

使用 Standalone 模式运行计算 PI 的程序

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 6 \
--executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar 100

在 Standalone 模式下启动 Spark-shell

bin/spark-shell \
--master spark://hadoop102:7077

说明:
• --master spark://hadoop102:7077指定要连接的集群的master
执行wordcount程序

sc.textFile("input/").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

注意:
• 每个worker节点上要有相同的文件夹:input/, 否则会报文件不存在的异常

配置 Spark 任务历史服务器(为 Standalone 模式配置)

在 Spark-shell 没有退出之前, 我们是可以看到正在执行的任务的日志情况:http://hadoop102:4040. 但是退出 Spark-shell 之后, 执行的所有任务记录全部丢失.
所以需要配置任务的历史服务器, 方便在任何需要的时候去查看日志.
配置spark-default.conf文件, 开启 Log

cp spark-defaults.conf.template spark-defaults.conf

在spark-defaults.conf文件中, 添加如下内容

spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://hadoop102:9000/spark-job-log

注意:
hdfs://hadoop102:9000/spark-job-log 目录必须提前存在, 名字随意
修改spark-env.sh文件,添加如下配置.

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://hadoop102:9000/spark-job-log"

分发配置文件
启动历史服务
需要先启动 HDFS
然后再启动:

sbin/start-history-server.sh

ui 地址: http://hadoop102:18080
启动任务, 查看历史服务器

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 6 \
./examples/jars/spark-examples_2.11-2.1.1.jar 100

HA 配置(为 Mater 配置)

由于 master 只有一个, 所以也有单点故障问题.
Spark运行模式-4种_第3张图片
可以启动多个 master, 先启动的处于 Active 状态, 其他的都处于 Standby 状态
给 spark-env.sh 添加如下配置

# 注释掉如下内容:
#SPARK_MASTER_HOST=hadoop102
#SPARK_MASTER_PORT=7077
# 添加上如下内容:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop102:2181,hadoop103:2181,hadoop104:2181 -Dspark.deploy.zookeeper.dir=/spark"

分发集群
启动 Zookeeper
在 hadoop102 启动全部节点

sbin/start-all.sh

会在当前节点启动一个 master
在 hadoop103 启动一个 master

sbin/start-master.sh

查看 master 的状态
杀死 hadoop102 的 master 进程
Hadoop103 的 master 会自动切换成 Active

Standalone 工作模式图解

Spark运行模式-4种_第4张图片

Yarn 模式

Yarn 模式概述

Spark 客户端可以直接连接 Yarn,不需要额外构建Spark集群。
有 client 和 cluster 两种模式,主要区别在于:Driver 程序的运行节点不同。
• client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
• cluster:Driver程序运行在由 RM(ResourceManager)启动的 AM(AplicationMaster)上, 适用于生产环境。
工作模式介绍:
Spark运行模式-4种_第5张图片

Yarn 模式配置

修改 hadoop 配置文件 yarn-site.xml, 添加如下内容:

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

修改后分发配置文件.
复制 spark, 并命名为spark-yarn

cp -r spark-standalone spark-yarn

修改spark-evn.sh文件
去掉 master 的 HA 配置, 日志服务的配置保留着.
并添加如下配置: 告诉 spark 客户端 yarn 相关配置

YARN_CONF_DIR=/export/servers/hadoop-2.7.7/etc/hadoop

执行一段程序

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.11-2.1.1.jar 100

http://hadoop202:8088
日志服务
在前面的页面中点击 history 无法直接连接到 spark 的日志.
可以在spark-default.conf中添加如下配置达到上述目的

spark.yarn.historyServer.address=hadoop102:18080
spark.history.ui.port=18080

可能碰到的问题:
如果在 yarn 日志端无法查看到具体的日志, 则在yarn-site.xml中添加如下配置

<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

Mesos 模式

Spark客户端直接连接 Mesos;不需要额外构建 Spark 集群。
国内应用比较少,更多的是运用yarn调度。

几种运行模式的对比

Spark运行模式-4种_第6张图片

你可能感兴趣的:(spark)