大数据技术一览
1 hadoop:hdfs、yarn、mapreduce、spark和hive
2 数据序列化:序列化大数据的二进制格式(Avro,Thrift,Protocol Buffers,SequenceFile)
3 列存储:RCFile、ORC、Parquet
4 消息系统:kafka
5 NoSQL:HBase、Cassandra
6 分布式SQL查询引擎:Impala、Presto、Apache Drill
Spark的技术特点
(1)使用方便,提供了各种语言的API接口,目前有Scala、Java、Python、R四种语言支持;
(2)快速:基于内存计算,减少I/O延迟,显著减少作业执行时间;有更为先进的作业执行引擎。
(3)通用:Spark为各种类型的数据处理作业提供一个统一的集成平台,可以用于批处理、交互性分析、流处理、机器学习和图计算。而Hadoop MapReduce只适合用于批处理。使用Spark,可以使用一个集成的框架来创建一个包含多个不同类型任务的数据处理流水线,不用为了多个不同类型的数据处理任务而学习不同框架或者部署单独的集群了。使用Spark,有助于降低运维的困难度,减少代码和数据的重复。
(4)可扩展:Spark集群的数据处理能力可以通过增加更多集群节点的方式得以提升。Spark的这个特性对于应用程序来说是透明的,Spark集群增加节点的时候无需改动任何代码。
(5)容错性:Spark可以自动处理集群中的节点故障(应用程序的开发者不必在应用中处理异常情况,可以简化应用程序的代码),一个节点故障可能导致性能下降但是不会导致应用程序无法运行。
(6)数据源:Spark本质上是一个使用集群节点进行大数据集处理的计算框架,它没有存储系统,但是它可以搭配外部存储系统使用,Spark一般都会配合能存储大量数据的分布式存储系统使用。如HDFS、HBase、Cassandra、Amazon S3,任何Hadoop支持的数据源都可以被Spark Core使用。Spark上的库Spark SQL支持更多的数据源。Spark也支持本地文件系统(单机)。
学习目标
利用Python和Spark构建大规模数据的分析与挖掘,
如何使用Python来调用Spark的新特性;
如何处理结构化和非结构化的数据;
如何使用PySpark中一些基本的可用数据类型;
如何生成机器学习模型;
将会全面介绍PySpark各个包的使用方法。
1.1 What is Apache Spark?
[图片上传中...(image-fcd23e-1533737973001-7)]
1.2 Spark Jobs and APIs
1.2.1 Execution process(执行过程)
任何Spark应用程序都会分离主节点上的单个驱动(driver)进程(可以包含多个作业job),然后将执行进程(包含多个任务task)分配给多个工作(worker)节点
驱动(driver)进程会确定任务(task)进程的数量和组成,这些任务进程是根据为指定作业生成的图形分配给执行节点的。
注意,任何工作(worker)节点都可以执行来自多个不同作业job的多个任务task。
[图片上传中...(image-da4f4-1533737973001-6)]
Spark作业与一系列对象依赖相关联,这些依赖关系以有向无环图(DAG)的方式组织的。
DAGScheduler:
参考https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-dagscheduler.html
[图片上传中...(image-f8c093-1533737973001-5)]
若干概念和术语
worker:worker为Spark应用提供CPU、内存和存储资源。worker把Spark应用当成分布式进程在集群节点上执行。
集群管理员:集群管理员管理集群中worker节点的计算资源,它能跨应用从底层调度集群管理,它可以让多个应用分享集群资源并且运行在同一个worker节点上。Spark目前有三种集群管理员,单独模式,Mesos模式,YARN模式。Mesos模式和YARN模式都允许在同一个worker节点上同时运行Spark应用和Hadoop应用。
驱动程序(driver):是一个把Spark当成库使用的应用。它提供数据处理的代码,Spark将在worker节点上执行这些代码,一个驱动程序可以在Spark集群上启动一个或多个作业。
执行者:执行者是一个JVM进程,对于一个应用由Spark在每一个worker上创建,它可以多线程的方式并发执行应用代码,它可以把数据缓存在内存或硬盘中。
任务(task):是一个Spark发送给执行者的最小工作单元,它运行在worker节点上执行者的一个线程中。每一个任务都执行一些计算,然后将结果返回给驱动程序,或者区分以用于shuffle操作。Spark为每一个数据分区创建一个任务。一个执行者可以并发执行一个或多个任务。任务数量由分区的数量决定。更多的分区意味着将有更多的任务并行处理数据。
shuffle操作:是指在集群节点上对数据进行重新分配,这是一个耗时操作,因为涉及到网络间传输数据。注意的是,shuffle操作不是对数据进行随机重新分配,它按照某些标准将数据分成不同的集合,每一个集合就是一个新的分区。
作业:作业是一系列计算的集合,Spark执行这些计算并将结果返回给驱动程序。作业本质上就是在Spark集群上运行数据处理算法。一个应用程序可以发起多个作业。
阶段:一个阶段由若干个任务构成,Spark将一个作业分解为一个由若干个阶段构成的DAG,每一个阶段依赖于其他阶段。举个栗子,把一个作业分解为阶段0和阶段1两个阶段,只有当阶段0完成之后,才可以开始阶段1。Spark利用shuffle边界将任务分成不同的阶段,不要求的shuffle操作的任务属于同一阶段,只有在开始一个新阶段时,任务才需要输入数据是经过shuffle操作的。
1.2.2 RDD(弹性分布式数据集)
RDD的计算依据缓存和存储在内存中的模式进行,相较于其他分布式计算框架,计算速度快了一个数量级。
RDD有两种并行操作:
转换(transform)—— 指向新的RDD的指针(惰性的) 动作(action) —— 在运行计算后向**驱动程序**返回值
RDD转换操作是惰性的,因为它不会立即计算结果,只有动作执行了并且需要将结果返回给驱动程序时,才会计算转换操作。
1.2.3 DataFrame
DataFrame像RDD一样,是分布在集群的节点中的不可变的数据集合。在DataFrame中,数据是以命名列的方式组织的。(类似于Python的pandas或者R的data.frames)
DataFrame的出现就是为了更加容易处理大型数据集,与关系型数据库的表类似,
DataFrame的一个主要优点是对于使用Python而言的用户,其性能与使用Scala和Java差别不大,而Python中的RDD确非常慢,推荐使用DataFrame.
1.2.4 Catalyst优化器
Spark SQL的核心是Catalyst优化器,优化器基于函数式编程结构,以便于简化向Spark SQL添加新的优化技术和特性的条件,并允许外部开发人员扩展优化器。
[图片上传中...(image-c27fee-1533737973000-4)]
[图片上传中...(image-90e36c-1533737973000-3)]
[图片上传中...(image-71276c-1533737973000-2)]
[图片上传中...(image-a0161d-1533737973000-1)]
作者:7125messi
链接:https://www.jianshu.com/p/576ba5e71267
共同学习,写下你的评论
评论加载中...
作者其他优质文章