各位朋友大家好,欢迎来到Tonii老师精益讲堂,接下来Tonii老师将带领大家进入,“每天5分钟,精益伴你行”系列课程。
今天我们来学习Spark的相关内容。
近几年随着网络通信技术和互联网软件服务的快速发展,人们获得和处理的数据量都越来越大,市场上大数据人才稀缺。与大数据相关的职位主要有数据开发、数据挖掘、数据分析等,这些职位都要求掌握分布式计算例如Hadoop、Spark等等。
如下图所示,数据挖掘、数据开发等岗位都要求候选人掌握一定分布式计算平台的知识,接下来就简要介绍一下当今最火热、应用场景广泛的大数据架构Spark
1.Spark的前世今生
Spark计算机集群是2009年由UC Berkeley AMP lab开发的一个集群计算的框架,目的是让数据分析更加快速。在大数据的场景下,数据处理的流程变慢,针对这种情况通常有两种解决办法,一个是设计出更先进的计算机,快速处理数据,另一个是利用多台计算机,协同处理数据,Spark就是采用后一种方法来提高计算速度。
Spark作为一个计算引擎,本身并不储存和计算。对于一组计算机,每个计算机节点作为独立的计算资源,而Spark计算引擎确定了各个机器之间应该如何合作处理数据。
2.Spark核心组件
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集。Spark接受的语法有SQL, Python, Scala, Java, R,读入的数据格式可以是JSON、CSV、HDFS(Hadoop分布式文件)、MySQL数据表等等。Spark引擎主要由下述的五个部分组成。
Spark Streaming:支持高吞吐量、支持容错的实时流数据处理
Spark SQL: 结构化数据查询
MLLib:Spark 生态系统里用来解决大数据机器学习问题的模块
GraphX:构建于Spark上的图计算模型
SparkR:一个R语言包,它提供了轻量级的方式使得可以在R语言中使用 Spark
3.Spark作业方式
我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core。
而Driver进程要做的第一件事情,就是向集群管理器Cluster Manager(可以是Spark Standalone集群,也可以是其他的资源管理集群,常用的集群管理器还有Yarn Mesos等等)申请运行Spark作业需要使用的资源,这里的资源指的就是Executor进程。
YARN集群管理器会根据我们为Spark作业设置的资源参数,在各个工作节点上,启动一定数量的Executor进程,每个Executor进程都占有一定数量的内存和CPU core。
4.Spark数据结构
在Spark中,数据以RDD或者DataFrame的格式储存。
Resilient Distributed Datasets(RDD):意为容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。
DataFrame:DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。在Spark1.3版本开始使用。DataFrame带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。
这使得Spark得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。
5.Spark作业过程
下面我们简单总结一下Spark的作业过程
用户提交spark作业,Driver构建DAG图并分解成Stage
Driver向Cluster Manager申请资源(Executor)
Cluster Manager向某些Work Node发送征召信号
被征召的Work Node启动Executor进程响应征召,并向Driver申请任务
Driver分配Task给Work Node
Executor以Stage为单位执行Task,其间Driver进行监控
Driver收到Executor任务完成的信号后向Cluster Manager发送注销信号
Cluster Manager向Work Node发送释放资源信号
Work Node对应Executor停止运行
返回运行结果
6.总结
Spark是一种针对大数据集处理的计算机集群,由Scala语言构建。用户可以通过Python, R, Scala, SQL语言对数据集进行操作。用户提交指令到Spark集群后,Spark分析指令,并构建有向无环图处理方法,接下来通过Cluster Manager和Worker的配合完成并行化的数据处理,最终输出结果,相比于普通的数据库,Spark对于大批量数据和实时数据处理具有明显优势。
今天的课程就到这里,谢谢大家!
领取专属 10元无门槛券
私享最新 技术干货