Spark入门
Spark是用scala语句实现,是一种快速运行在廉价集群中的计算引擎,他提供了高级的Java API,同时支持Scala , Python 和R等多种语言,同时他也拥有高级组件如用于处理结构化数据的Spark Sql,机器学习算法库MLlib,实时流数据处理Spark Streaming,以及图计算框架Graphx
Spark特点
1.高速性
park在内存中对数据进行迭代计算如果数据由内存读取是hadoop MapReduce的100倍。Spark是基于内存的迭代计算框架,而Hadoop在进行I/O操作时,会将数据放入到磁盘中,使得计算速度减慢。
2.易用性
Spark 提供了80多个高级运算符。
3.通用性
Spark 提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。
4.支持多种资源管理器
Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器
Spark框架
在Spark框架,采用分布式计算中的Master-Slave模型,Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。
Master是整个集群的控制器,负责整个集群的正常运行,Worker是计算节点,负责接收主节点命令与金星状态汇报。
Spark的架构中的基本组件:
- Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器(ResourceManager)
- Worker:从节点,负责控制计算节点,启动Executor或者Driver。在YARN模式中为NodeManager,负责计算节点的控制。
- Driver:运行Application的main()函数并创建SparkContext。
- Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor。
- SparkContext:整个应用的上下文,控制应用的生命周期。
- RDD:Spark的基础计算单元,一组RDD可形成执行的有向无环图RDD Graph。
- DAG Scheduler:根据作业(task)构建基于Stage的DAG,并提交Stage给TaskScheduler。
- TaskScheduler:将任务(task)分发给Executor执行。
- SparkEnv:线程级别的上下文, 存储运行时的重要组件的引用。
常用术语:
-
Application:Application都是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码
-
Driver:Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
-
Executor:某个Application运行在worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor,在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend。一个CoarseGrainedExecutor Backend有且仅有一个Executor对象,负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task,这个每一个CoarseGrainedExecutor Backend能并行运行Task的数量取决于分配给它的cup个数
-
Cluster Manager:指的是在集群上获取资源的外部服务。如standalone Apache Mesos Hadoop Yarn