Spark
- 1、Spark简介
- Apache Spark的功能
- Spark使用
- 2、Spark重要概念
- Spark运行模式
- Spark组件(Components)
1、Spark简介
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
spark是一个实现快速通用的集群计算平台。它是由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的MapReduce计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。spark的一个主要特点是能够在内存中进行计算,及时依赖磁盘进行复杂的运算,Spark依然比MapReduce更加高效。
Apache Spark的功能
快速 - 使用最先进的DAG调度程序,查询优化器和物理执行引擎,为批处理和流数据提供高性能。
易于使用 - 它有助于使用Java,Scala,Python,R和SQL编写应用程序。它还提供80多个高级运算符。
通用性 - 它提供了一系列库,包括SQL和DataFrames,用于机器学习的MLlib,GraphX和Spark Streaming。
轻量级 - 它是一种轻型统一分析引擎,用于大规模数据处理。
无处不在 - 它可以轻松运行在Hadoop,Apache Mesos,Kubernetes,独立或云端。
Spark使用
数据集成:系统生成的数据不够整合,无法结合进行分析。要从系统中获取一致的数据,可以使用提取,转换和加载(ETL)等过程。Spark用于减少此ETL过程所需的成本和时间。
流处理:处理实时生成的数据(如日志文件)总是很困难。Spark能够运行数据流并拒绝潜在的欺诈性操作。
机器学习:由于数据量的增加,机器学习方法变得更加可行并且越来越准确。由于spark能够将数据存储在内存中并且可以快速运行重复查询,因此可以轻松处理机器学习算法。
交互式分析:Spark能够快速生成响应。因此,可以交互式地处理数据,而不是运行预定义的查询。
2、Spark重要概念
Spark运行模式
主要的运行模式有:
- local:主要用于开发调试Spark应用程序
- Standlone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构,为解决单点故障,可以采用Xookeeper实现高可靠(High Availability, HA)
- Apache Mesos:运行在著名的Mesos资源管理框架基础之上,该集群运行模式将资源管理管理交给Mesos,Spark只负责运行任务调度和计算
- Hadoop YARN:集群运行在Yarn资源管理器上,资源管理交给YARN,Spark只负责进行任务调度和计算,主要是运用YARN的集群方式
Spark组件(Components)
一个完整的Spark应用程序,如前面一章当中的SparkWorkdCount程序,在提交集群运行时,它涉及到如下图所示的组件:
每个Spark应用都由一个驱动器程序(drive program)来发起集群上的各种并行操作。驱动器程序包含应用的main函数,驱动器负责 创建SparkContext,SparkContext可以与不同种类的集群资源管理器(Cluster Manager),例如Hadoop YARN,Mesos进行通信,获取到集群进行所需的资源后,SparkContext将得到集群中工作节点(Worker Node)上对应的Executor(不同的Spark程序有不同的Executor,他们之间是相互独立的进程,Executor为应用程序提供分布式计算以及数据存储功能),之后SparkContext将应用程序代码发送到各Executor,最后将任务(Task)分配给executors执行
- ClusterManager:在Standalone模式中即为Master节点(主节点),控制整个集群,监控Worker.在YARN中为ResourceManager
- Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。
- Driver:运行Application的main()函数并创建SparkContect。
- Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor。
- SparkContext:整个应用的上下文,控制应用的生命周期。
- RDD:Spark的计算单元,一组RDD可形成执行的有向无环图RDD Graph。
- DAG Scheduler:根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler。
- TaskScheduler:将任务(Task)分发给Executor。
- SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。
SparkEnv内构建并包含如下一些重要组件的引用。
1、MapOutPutTracker:负责Shuffle元信息的存储。
2、BroadcastManager:负责广播变量的控制与元信息的存储。
3、BlockManager:负责存储管理、创建和查找快。
4、MetricsSystem:监控运行时性能指标信息。
5、SparkConf:负责存储配置信息。
总结:
1、Client提交应用。
2、Master找到一个Worker启动Driver
3、Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph
4、再由DAGSchedule将RDD Graph转化为Stage的有向无环图提交给TaskSchedule。
5、再由TaskSchedule提交任务给Executor执行。
6、其它组件协同工作,确保整个应用顺利执行。
在Yarn上的流程
1、基于YARN的Spark作业首先由客户端生成作业信息,提交给ResourceManager。
2、ResourceManager在某一NodeManager汇报时把AppMaster分配给NodeManager。
3、NodeManager启动SparkAppMaster。
4、SparkAppMastere启动后初始化然后向ResourceManager申请资源。
5、申请到资源后,SparkAppMaster通过RPC让NodeManager启动相应的SparkExecutor。
6、SparkExecutor向SparkAppMaster汇报并完成相应的任务。
7、SparkClient会通过AppMaster获取作业运行状态。