Spark
前言
本文简单介绍有关Spark的框架、应用Spark实现WordCount案例以及Spark的部署的相关知识。
Spark 知识系列文章
此处罗列了有关Spark相关知识的其他文章,有需要的可以进行点击查阅。
一、Spark框架
Spark是一种基于内存的快速、通用、可拓展的大数据分析引擎;
1.1 Driver
Spark的驱动器是执行开发程序中的main方法的进程。它负责开发人员编写的,用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作代码的执行。
主要负责:
(1)把用户程序转为作业(JOB)
(2)跟踪Executor的运行状况
(3)为执行器节点调度任务
(4)UI展示应用运行状况
1.2 Executor
Spark Executor是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。
主要负责:
(1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
(2)通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
所有的RDD算子的计算功能都由Executor执行;
二、WordCount案例
2.1 案例结构图
实现WordCount案例的步骤:
(1)按行读入数据文件;
(2)通过flatMap将数据扁平化,转化为一个一个的单词;
(3)通过Map将一个个单词转化为KV形式;
(4)根据单词的不同,进行分组聚合
2.2 WordCount代码实现
代码如下:
sc. textFile("input"). flatMap(_.split(" ")). map((_,1)). reduceByKey(_+_).collect
//代码注解
textFile("input"):读取本地文件input文件夹数据;
flatMap(_.split(" ")):压平操作,按照空格分割符将一行数据映射成单词;
map((_,1)):对每一个元素操作,将单词映射为元组;
reduceByKey(_+_):按照key将值进行聚合,两两相加;
collect:将数据收集到Driver端展示。
三、Spark的三种部署模式
3.1 Local模式
运行在一台计算机上的模式;
Local 所有的操作在一个线程上执行,没有任何的并行计算;
Local [k] 指定使用几个线程来进行计算;
Local [*] 按照CPU最多的核来设置线程数;
3.2 StandAlone模式
构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。
3.3 Yarn模式(*)
具体步骤:
(1)客户端向Yarn集群提交任务;
(2)集群中的RM(ResourceManager)会分配Container资源并让NM(NodeManager)启动AM(ApplicationMaster);
(3)AM向RM进行反向注册(图中未画出),并申请资源用来启动Exexutor;
(4)RM返回资源列表,以Container的形式;
(5)AM要求对应的NM启动Executor;
(6)对应的NM进行反向注册,表示启动成功;
(7)RM分解任务,并向NM发送任务;
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。