大数据Spark Standalone集群 2

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生网关 MSE Higress,422元/月
简介: 大数据Spark Standalone集群

3 Spark 应用架构

登录到Spark HistoryServer历史服务器WEB UI界面,点击刚刚运行圆周率PI程序:

查看应用运行状况:

切换到【Executors】Tab页面:

从图中可以看到Spark Application运行到集群上时,由两部分组成:Driver Program和Executors。

  • 第一、Driver Program

相当于AppMaster,整个应用管理者,负责应用中所有Job的调度执行;

运行JVM Process,运行程序的MAIN函数,必须创建SparkContext上下文对象;

一个SparkApplication仅有一个;

第二、Executors

相当于一个线程池,运行JVM Process,其中有很多线程,每个线程运行一个Task任务,

一个Task运行需要1 Core CPU,所有可以认为Executor中线程数就等于CPU Core核数;一个Spark Application可以有多个,可以设置个数和资源信息;


Driver Program是用户编写的数据处理逻辑,这个逻辑中包含用户创建的SparkContext。

SparkContext 是用户逻辑与Spark集群主要的交互接口,它会和Cluster Manager交互,包括向它

申请计算资源等。 Cluster Manager负责集群的资源管理和调度,现在支持Standalone、Apache

Mesos和Hadoop的 YARN。Worker Node是集群中可以执行计算任务的节点。 Executor是在一

个Worker Node上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者

磁盘上。Task 是被送到某个Executor上的计算单元,每个应用都有各自独立的 Executor,计算最终在计算节点的 Executor中执行。

用户程序从最开始的提交到最终的计算执行,需要经历以下几个阶段:

1)、用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager。

Cluster Manager 会根据用户提交时设置的 CPU 和内存等信息为本次提交分配计算资源,启

动 Executor。

2)、Driver会将用户程序划分为不同的执行阶段Stage,每个执行阶段Stage由一组完全相同Task

组成,这些Task分别作用于待处理数据的不同分区。在阶段划分完成和Task创建后, Driver

会向Executor发送 Task;

3)、Executor在接收到Task后,会下载Task的运行时依赖,在准备好Task的执行环境后,会开

始执行Task,并且将Task的运行状态汇报给Driver;

4)、Driver会根据收到的Task的运行状态来处理不同的状态更新。 Task分为两种:一种是Shuffle

Map Task,它实现数据的重新洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另

外一种是Result Task,它负责生成结果数据;

5)、Driver 会不断地调用Task,将Task发送到Executor执行,在所有的Task 都正确执行或者

超过执行次数的限制仍然没有执行成功时停止;

4 WEB UI 监控

Spark 提供了多个监控界面,当运行Spark任务后可以直接在网页对各种信息进行监控查看。

运行spark-shell交互式命令在Standalone集群上,命令如下:

/export/server/spark/bin/spark-shell --master spark://node1.oldlu.cn:7077

运行截图如下所示:

在node3.oldlu.cn运行spark-shell,WEB UI监控页面地址:http://node3.oldlu.cn:4040

在spark-shell中执行词频统计WordCount程序代码,运行如下:

val inputRDD = sc.textFile("/datas/wordcount.data")
val wordcountsRDD = inputRDD.flatMap(line => line.split("\\s+")).map(word => (word, 1)).reduceByKey((tmp, item) => tmp +item)
wordcountsRDD.take(5)

截图如下:

可以发现在一个Spark Application中,包含多个Job,每个Job有多个Stage组成,每个Job执行

按照DAG图进行的。


其中每个Stage中包含多个Task任务,每个Task以线程Thread方式执行,需要1Core CPU。

可以看到Spark为应用程序提供了非常详尽的统计页面,每个应用的Job和Stage等信息都可以

在这里查看到。通过观察应用详情页的各个信息,对进一步优化程序,调整瓶颈有着重要作用,后

期综合项目案例详细讲解。

Spark Application程序运行时三个核心概念:Job、Stage、Task,说明如下:


Task:被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一

般来说有多少个 Paritition(物理层面的概念,即分支可以理解为将数据划分成不同

部分并行处理),就会有多少个 Task,每个 Task 只会处理单一分支上的数据。

Job:由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save、collect,后面

进一步说明),会生成一个 Job。

Stage:Job 的组成单位,一个 Job 会切分成多个 Stage,Stage 彼此之间相互依赖顺序执行,

而每个 Stage 是多个 Task 的集合,类似 map 和 reduce stage。

46f9215f21b74a18bf42fb81714c1105.png

5 Standalone HA

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群

一样,存在着Master单点故障(SPOF)的问题。

5.1 高可用HA

如何解决这个单点故障的问题,Spark提供了两种方案:

-基于文件系统的单点恢复(Single-Node Recovery with Local File System);

-基于Zookeeper的Standby Masters(Standby Masters with ZooKeeper);

ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个

Master,但是只有一个是Active的,其他的都是Standby。当Active的Master出现故障时,另外的

一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息

都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任

何的影响。加入ZooKeeper的集群整体架构如下图所示。

4ecf8cb2ad7142a99f4bcc45f77cf125.png

5.2 基于Zookeeper实现HA

官方文档: http://spark.apache.org/docs/2.4.5/spark-standalone.html#standby-masters-with-zookeeper

  • 1)、停止Standalone集群
## 在node1.oldlu.cn上执行命令
/export/server/spark/sbin/stop-master.sh
/export/server/spark/sbin/stop-slaves.sh
  • 2)、增加Zookeeper配置
    对Spark配置文件【$SPARK_HOME/conf/spark-env.sh】文件如下修改:
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=node1.oldlu.cn:2181,node2.oldlu.cn:2181,node3.oldlu.cn:2181
-Dspark.deploy.zookeeper.dir=/spark-ha"

参数含义说明:

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

注释或删除MASTER_HOST内容:

# SPARK_MASTER_HOST=node1.oldlu.cn
  • 3)、将spark-env.sh分发集群
cd /export/server/spark/conf
scp -r spark-env.sh root@node2.oldlu.cn:$PWD
scp -r spark-env.sh root@node3.oldlu.cn:$PWD
  • 4)、启动集群服务
    先启动Zookeeper集群,再分别启动2个Master服务,最后启动Worker服务
## 启动ZOOKEEPER服务
zookeeper-daemons.sh start
## 在node1和node2分别启动Master服务
/export/server/spark/sbin/start-master.sh
## 查看哪个Master为Active,就在哪个Master机器上启动Workers服务
/export/server/spark/sbin/start-slaves.sh

默认情况下,先启动Master就为Active Master,如下截图所示:

5.3 测试运行

Standalone HA集群运行应用时,指定ClusterManager参数属性为

--master spark://host1:port1,host2:port2

提交圆周率PI运行集群,命令如下

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://node1.oldlu.cn:7077,node2.oldlu.cn:7077 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.11-2.4.5.jar \
100

在执行过程中,使用jps查看Active Master进程ID,将其kill,观察Master是否自动切换与应用运

行完成结束。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
20天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
55 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
19天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
68 2
|
20天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
58 1
|
20天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
zdl
|
7天前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
31 0
|
1月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
7天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
61 7
|
7天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
20 2
|
20天前
|
数据采集 监控 数据管理
数据治理之道:大数据平台的搭建与数据质量管理
【10月更文挑战第26天】随着信息技术的发展,数据成为企业核心资源。本文探讨大数据平台的搭建与数据质量管理,包括选择合适架构、数据处理与分析能力、数据质量标准与监控机制、数据清洗与校验及元数据管理,为企业数据治理提供参考。
64 1
|
14天前
|
存储 大数据 定位技术
大数据 数据索引技术
【10月更文挑战第26天】
36 3