Spark

  • Spark运行模式
  • Spark环境搭建
    • 上传 & 解压
    • 解压目录说明
  • 启动spark-shell
  • 初体验-读取HDFS文件
  • Standalone集群模式
    • 集群角色介绍
    • 集群规划
    • 修改配置并分发
    • 通过scp 命令将配置文件分发到其他机器上
    • 集群启动和停止
    • 测试
  • Standalone-HA高可用模式
    • 原理
    • 配置HA
    • Scp到其他节点
    • 启动zk集群
    • 启动Spark集群
    • 测试HA
  • On Yarn集群模式
    • 准备工作
      • cluster模式
      • Client模式[了解]
    • 两种模式的区别
  • Spark参数详解
    • spark-shell
    • spark-submit
    • 参数总结

Spark运行模式

  • Local本地模式(单机)–开发测试使用:分为local单线程和local-cluster多线程
  • standalone独立集群模式–开发测试使用:典型的Mater/slave模式
  • standalone-HA高可用模式–生产环境使用:基于standalone模式,使用zk搭建高可用,避免Master是有单点故障的
  • on yarn集群模式–生产环境使用:运行在 yarn 集群之上,由 yarn 负责资源管理,Spark 负责任务调度和计算,好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。
  • on mesos集群模式–国内使用较少:行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算
  • on cloud集群模式–中小公司未来会更多的使用云服务:比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3

Spark环境搭建

官方地址:http://spark.apache.org/

上传 & 解压

cd /export/servers
tar spark-2.2.0-bin-2.6.0-cdh5.14.0.tgz
mv spark-2.2.0-bin-2.6.0-cdh5.14.0 spark

注意:
如果有权限问题,可以修改为root,方便学习时操作,实际中使用运维分配的用户和权限即可

chown -R root /export/servers/spark
chgrp -R root /export/servers/spark

解压目录说明

  • bin 可执行脚本
  • conf 配置文件
  • data 示例程序使用数据
  • examples 示例程序
  • jars 依赖 jar 包
  • python pythonAPI
  • R R 语言 API
  • sbin 集群管理命令
  • yarn 整合yarn

启动spark-shell

  • 开箱即用
    直接启动bin目录下的spark-shell:
./spark-shell
  • Spark-shell说明
  1. 直接使用./spark-shell
    表示使用local 模式启动,在本机启动一个SparkSubmit进程
  2. 还可指定参数 --master,如:
    spark-shell --master local[N] 表示在本地模拟N个线程来运行当前任务
    spark-shell --master local[*] 表示使用当前机器上所有可用的资源
  3. 不携带参数默认就是
    spark-shell --master local[*]
  4. 后续还可以使用–master指定集群地址,表示把任务提交到集群上运行,如
./spark-shell --master spark://node01:7077
  1. 退出spark-shell
    使用 :quit

初体验-读取HDFS文件

words.txt

hello nihao shanghai
henan hello nihao zaima
chifan nihao shanghai hello
#准备数据:
#上传文件到hdfs
`hadoop fs -put /root/words.txt /wordcount/input/words.txt`#目录如果不存在可以创建
`hadoop fs -mkdir -p /wordcount/input`#结束后可以删除测试文件夹
`hadoop fs -rm -r /wordcount`
val textFile = sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://node01:8020/wordcount/output")

Standalone集群模式

集群角色介绍

Spark是基于内存计算的大数据并行计算框架,实际中运行计算任务肯定是使用集群模式,那么我们先来学习Spark自带的standalone集群模式了解一下它的架构及运行机制。

Standalone集群使用了分布式计算中的master-slave模型,
master是集群中含有master进程的节点
slave是集群中的worker节点含有Executor进程
Spark架构图如下(先了解):
http://spark.apache.org/docs/latest/cluster-overview.html

集群规划

node01:master
node02:slave/worker
node03:slave/worker

修改配置并分发

#修改Spark配置文件
cd /export/servers/spark/conf
mv spark-env.sh.template spark-env.sh
---------------------------------------
vim spark-env.sh
#配置java环境变量
export JAVA_HOME=/export/servers/jdk1.8
#指定spark Master的IP
export SPARK_MASTER_HOST=node01
#指定spark Master的端口
export SPARK_MASTER_PORT=7077
----------------------------------------
mv slaves.template slaves
vim slaves
node02
node03
------------------------------------

配置spark环境变量 (建议不添加,避免和Hadoop的命令冲突)
将spark添加到环境变量,添加以下内容到 /etc/profile.d

cd /etc/profile.d
vim spark.sh
export SPARK_HOME=/export/servers/spark
export PATH=$PATH:$SPARK_HOME/bin
-----------------------------------
注意:
hadoop/sbin 的目录和 spark/sbin 可能会有命令冲突
==start-all.sh stop-all.sh==
解决方案:
1.把其中一个框架的 sbin 从环境变量中去掉;
2.改名 hadoop/sbin/start-all.sh 改为: start-all-hadoop.sh

通过scp 命令将配置文件分发到其他机器上

scp -r /export/servers/spark node02:/export/servers
scp -r /export/servers/spark node03:/export/servers
scp /etc/profile root@node02:/etc
scp /etc/profile root@node03:/etc
source /etc/profile 刷新配置

集群启动和停止

#在主节点上启动spark集群
/export/servers/spark/sbin/start-all.sh
#在主节点上停止spark集群
/export/servers/spark/sbin/stop-all.sh
#单独启动和停止
#在 master 安装节点上启动和停止 master:
start-master.sh
stop-master.sh
#在 Master 所在节点上启动和停止worker(work指的是slaves 配置文件中的主机名)
start-slaves.sh
stop-slaves.sh
#查看web界面
#正常启动spark集群后,查看spark的web界面,查看相关信息。
http://node01:8080/

测试

需求:
使用集群模式运行Spark程序读取HDFS上的文件并执行WordCount

# 集群模式启动spark-shell:
/export/servers/spark/bin/spark-shell --master spark://node01:7077
------------------------------------------------------------------
#运行程序:
sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
.saveAsTextFile("hdfs://node01:8020/wordcount/output2")
------------------------------------------------------------------
#SparkContext web UI
http://node01:4040/jobs/

注意:
集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的
因为程序运行在集群上,具体在哪个节点上我们运行并不知道,其他节点可能并没有那个数据文件

Standalone-HA高可用模式

原理

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题。
如何解决这个单点故障的问题,Spark提供了两种方案:

  1. 基于文件系统的单点恢复(Single-Node Recovery with Local File System)–只能用于开发或测试环境。
  2. 基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)–可以用于生产环境。

配置HA

该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置。

#先停止Sprak集群
/export/servers/spark/sbin/stop-all.sh
#在node01上配置:
vim /export/servers/spark/conf/spark-env.sh
#注释掉Master配置
#export SPARK_MASTER_HOST=node01
#在spark-env.sh添加SPARK_DAEMON_JAVA_OPTS,内容如下:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER  -Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181  -Dspark.deploy.zookeeper.dir=/spark"

参数说明 :

  • spark.deploy.recoveryMode:恢复模式
  • spark.deploy.zookeeper.url:ZooKeeper的Server地址
  • spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。包括Worker、Driver、Application信息。

Scp到其他节点

scp /export/servers/spark/conf/spark-env.sh node02:/export/servers/spark/conf/
scp /export/servers/spark/conf/spark-env.sh node03:/export/servers/spark/conf/

启动zk集群

zkServer.sh status
zkServer.sh stop
zkServer.sh start

启动Spark集群

#node01上启动Spark集群执行
/export/servers/spark/sbin/start-all.sh#在node02上再单独只起个master:
/export/servers/spark/sbin/start-master.sh#注意:
#在普通模式下启动spark集群
#只需要在主节点上执行start-all.sh 就可以了
#在高可用模式下启动spark集群
#先需要在任意一台主节点上执行start-all.sh
#然后在另外一台主节点上单独执行start-master.sh#查看node01和node02
http://node01:8080/
http://node02:8080/
#可以观察到有一台状态为StandBy

测试HA

测试主备切换:

  1. 在node01上使用jps查看master进程id
  2. 使用kill -9 id号强制结束该进程
  3. 稍等片刻后刷新node02的web界面发现node02为Alive
#测试集群模式提交任务:
1.集群模式启动spark-shell
/export/servers/spark/bin/spark-shell --master spark://node01:7077,node02:7077
2.运行程序
sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
.saveAsTextFile("hdfs://node01:8020/wordcount/output3")

On Yarn集群模式

  • 官方文档
    http://spark.apache.org/docs/latest/running-on-yarn.html

准备工作

  1. 安装启动Hadoop(需要使用HDFS和YARN,已经ok)

  2. 安装单机版Spark(已经ok)
    注意:不需要集群,因为把Spark程序提交给YARN运行本质上是把字节码给YARN集群上的JVM运行,但是得有一个东西帮我去把任务提交上个YARN,所以需要一个单机版的Spark,里面的有spark-shell命令,spark-submit命令

#修改配置:
#在spark-env.sh ,添加HADOOP_CONF_DIR配置,指明了hadoop的配置文件的位置
vim /export/servers/spark/conf/spark-env.sh
export HADOOP_CONF_DIR=/export/servers/hadoop/etc/hadoop

cluster模式

  • 说明
    在企业生产环境中大部分都是cluster部署模式运行Spark应用
    Spark On YARN的Cluster模式 指的是Driver程序运行在YARN集群上
  • 补充Driver是什么:
    运行应用程序的main()函数并创建SparkContext的进程

    ●运行示例程序
#spark-shell是一个简单的用来测试的交互式窗口
#spark-submit用来提交打成jar包的任务
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
  • 查看界面
    http://node01:8088/cluster

Client模式[了解]

  • 说明
    学习测试时使用,开发不用,了解即可
    Spark On YARN的Client模式 指的是Driver程序运行在提交任务的客户端
  • 运行示例程序
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10

两种模式的区别

Cluster和Client模式最本质的区别是:Driver程序运行在哪里!
运行在YARN集群中就是Cluster模式,
运行在客户端就是Client模式
当然还有由本质区别延伸出来的区别,面试的时候能简单说出几点就行

  • cluster模式:生产环境中使用该模式
    1.Driver程序在YARN集群中
    2.应用的运行结果不能在客户端显示
    3.该模式下Driver运行ApplicattionMaster这个进程中,如果出现问题,yarn会重启ApplicattionMaster(Driver)

  • client模式:
    1.Driver运行在Client上的SparkSubmit进程中
    2.应用程序运行结果会在客户端显示

Spark参数详解

spark-shell

spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下可以用scala编写spark程序,适合学习测试时使用!

  • 示例
    spark-shell可以携带参数
    spark-shell --master local[N] 数字N表示在本地模拟N个线程来运行当前任务
    spark-shell --master local[*] 表示使用当前机器上所有可用的资源
    默认不携带参数就是–master local[]
    spark-shell --master spark://node01:7077,node02:7077 表示运行在集群上

spark-submit

spark-submit命令用来提交jar包给spark集群/YARN
spark-shell交互式编程确实很方便我们进行学习测试,但是在实际中我们一般是使用IDEA开发Spark应用程序打成jar包交给Spark集群/YARN去执行。
spark-submit命令是我们开发时常用的!!!

#计算π:
/export/servers/spark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077  \
--executor-memory 1g \
--total-executor-cores 2 \
/export/servers/spark/examples/jars/spark-examples_2.11-2.2.0.jar \
10

参数总结


其他参数示例:

  • master spark://node01:7077 指定 Master 的地址
  • name “appName” 指定程序运行的名称
  • class 程序的main方法所在的类
  • jars xx.jar 程序额外使用的 jar 包
  • driver-memory 512m Driver运行所需要的内存, 默认1g
  • executor-memory 2g 指定每个 executor 可用内存为 2g, 默认1g
  • executor-cores 1 指定每一个 executor 可用的核数
  • total-executor-cores 2 指定整个集群运行任务使用的 cup 核数为 2 个
  • queue default 指定任务的对列
  • deploy-mode 指定运行模式(client/cluster)
  • 注意:
    如果 worker 节点的内存不足,那么在启动 spark-submit的时候,就不能为 executor分配超出 worker 可用的内存容量。
    如果–executor-cores超过了每个 worker 可用的 cores,任务处于等待状态。
    如果–total-executor-cores即使超过可用的 cores,默认使用所有的。以后当集群其他的资源释放之后,就会被该程序所使用。
    如果内存或单个 executor 的 cores 不足,启动 spark-submit 就会报错,任务处于等待状态,不能正常执行。

详细介绍Spark安装[内含测试小案例]相关推荐

  1. spark集群测试小案例

    一.local模式: 测试自带计算的圆周率案例 之所以会报错,是因为从网上copy过来的文件名不对:所以才会报错,以及因此而导致的错误: 正确的如下: 二.独立的Spark集群模式:使用7077端口( ...

  2. 北洋雷达UST-10LX基于ROS都安装使用测试小问题

    北洋雷达UST-10LX基于ROS都安装使用测试小问题 我使用的是UST-10LX型号 的激光雷达进行建图导航.下面的内容是在csdn上的一些回答的综合. 首先下载相关节点包,UST-10LX采用的接 ...

  3. PySerial:Python串口通信库的详细介绍、安装及使用方法攻略

    PySerial:Python串口通信库的详细介绍.安装及使用方法攻略 一.PySerial 简介 PySerial 是 Python 的一个串口通信库,支持不同平台下的串口操作.在 Python 应 ...

  4. 【Linux入门到精通系列讲解】Nginx详细介绍和安装使用(这一篇就够了)

    文章目录 1 Nginx 介绍 2 简单请求和非简单请求 3 正向代理和反向代理 4 apache与nginx的区别 5 Nginx 在Ubuntu 上的安装,测试 5.1 Install 5.2 防 ...

  5. protobuf篇:介绍、安装、测试

    愿打开此篇对你有所帮助. 文章目录 PB.JSON.XML 安装 如何写一个PB文件 Protobuf消息定义 ①限定修饰符 ②数据类型速查 ④字段编码值 ⑤默认值. 几个注意事项 import 关于 ...

  6. 大数据篇:Spark安装及测试PI的值

    本文运行的具体环境如下: centos7.3 Hadoop 2.8.4 Java JDK 1.8 Spark 1.6.3 一.安装Hadoop 关于Hadoop的安装,这里就不概述了! 二.安装 Sp ...

  7. 机器学习算法——决策树算法详细介绍,并使用sklearn实现案例预测,可视化决策树

    目录 一.决策树算法简介 二.决策树分类原理 1.熵 1.1 概念 1.2 案例 2.决策树的划分依据一:信息增益 2.1 概念 2.2 案例: 3.决策树的划分依据二:信息增益率 3.1 概念 3. ...

  8. Dubbo详细介绍与安装使用过程

    1 Dubbo介绍 1.1 dubbox简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. ...

  9. dubbo 即是服务提供者又是消费者_Dubbo详细介绍与安装使用过程

    1 Dubbo介绍 1.1 dubbox简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. ...

最新文章

  1. WMI技术介绍和应用——查询驱动信息
  2. Action访问Servlet API的三种方法
  3. 写的py_ping 可以跑了
  4. 【业务知识】档案数字化加工处理过程
  5. ssm mysql动态分页_SSM项目手动分页详解
  6. GVRP:GARP VLAN 注册协议 - 802.1P、802.1Q (GARP VLAN Registration Protocol - 802.1P、802.1Q)...
  7. HttpClient系列~StringContent与FormUrlEncodedContent
  8. html之CSS设计(float定位和position定位详细分析)
  9. pytorch的torch.cuda.is_available()输出false
  10. golang 内存分析/动态追踪
  11. 【心电信号】基于matlab GUI自适应滤波+平滑滤波+小波滤波心电信号处理【含Matlab源码 1809期】
  12. 傻瓜式Git提交代码流程【写给初学者】
  13. 《Java 核心技术 卷 Ⅱ:高级特性》(原书第8版) 已经上市了
  14. cms添加打卡签到功能php,给wordpress添加签到打卡页面的方法
  15. 什么计算机有hdmi接口,hdmi接口是什么?hdmi是什么?
  16. 光衰高怎么办_灯太亮了怎么办 led灯该如何选择
  17. 解决Git push提交时Permission denied(publickey).Could not read from remote...的问题
  18. “辶”“廴”偏旁的字五笔拆字
  19. ChatGPT原理解析以及使用方法介绍
  20. NC65 添加客户档案 实战案例

热门文章

  1. java微服务打包命令
  2. 苏宁关键词搜索商品列表API接口(关键词搜索商品销量接口)
  3. laravel修改toArray方法
  4. 将form表单提交文件修改为ajax提交
  5. 深度相机进行目标检测
  6. ks抖音超火摸头源码
  7. 金稻壳安全狗:保障电脑安全,实现企业防泄密和员工管理
  8. 微信小程序使用 canvas 实现手写签名
  9. java gil_为什么 Java 没有 GIL?
  10. 破解WiFi导入模块教程