Spark的介绍
Apache spark是开放源码的集群运算框架,有加州大学伯克利分校的AMPLab开发。Spark是以弹性的运算框架,适合进行Spark Streaming数据流处理,Spark SQL互动分析、MLlib机器学习等应用。Spark允许用户将数据加载到cluster集群的内存中存储,并多次重复运算,非常适合用于机器学习的算法。
Spark RDD in-memory的计算框架
Spark的核心是RDD(Resilient Distributed Dataset)弹性分布式数据集,属于一种分布式的内容。Spark的主要优势来自RDD本身的特性。RDD能与其他系统兼容,可以导入外部存储系统的数据集,例如HDFS、HBase或其他Hadoop数据源。
Spark in-memory的计算框架
Spark在运算时,将中间产生的数据暂存在内存中,因此可以加速运行速度。需要反复操作的次数越多,所需读取的数据量越大,就越能看出Spark的性能。Spark在内存中运行程序,命令运行速度(或命令周期)比Hadoop MapReudce 的命令运行速度快100倍。即便是运行在磁盘上时,Spark的速度也能快10倍。
Spark的特色
- 命令周期短
- 易于开发程序:支持Scala、Python、Java。
- 与Hadoop兼容:支持Hadoop的HDFS存储系统,并且支持Hadoop YARN,可共享存储资源与运算,并且几乎与Hive完全兼容。
- 可以在各个平台运行
Spark 2.0 的主要的功能
Spark的主要功能模块
主要的功能:
- Spark SQL DataFrame:使用熟知的SQL查询语言来运行数据分析,DataFrame具有Schema(定义字段名与数据类型,可使用类SQL方法)。
- Spark Streaming:可实现实时的数据串流的处理,具有大数据量、容错性、可扩展性等特点。
- GraphX:GraphX是Spark上的分布式图形处理架构,可用于图表计算。
- Spark MLlib:可扩充的Spark机器学习库,可使用很多常见的机器学习算法。算法包括:分类与回归、支持向量机、回归、线性回归、决策树、朴素贝叶斯、聚类分析、协同过滤等。
- Spark ML Pipeline:将机器学习的每一个阶段建立成Pipeline流程。
Spark 数据处理
Spark数据处理的方式主要有3种:RDD、DataFrame、Spark SQL。
RDD、DataFrame、Spark SQL比较
最主要的差异在于是否定义Schema
- RDD的数据未定义Schema(也就是未定义字段名及数据类型)。使用上必须有Map/Reduce的概念。需要高级的程序设计能力。但是功能也最强,能完成所有的Spark功能。
- Spark DataFrame建立时必须定义Scheme(也就是定义每个字段名与数据类型)。
- Spark SQL 由DataFrame衍生出来的,必须建立DataFrame,然后通过登录Spark SQL temp table,就可以使用Spark SQL语法了。
简单程度:Spark SQL > DataFrame > RDD
DataFrame 与Spark SQL 比RDD更快速
DataFrame与Spark SQL 通过Catalyst 进行优化,可以大幅度提高执行效率。
Python Spark机器学习
有了Spark之后,使用Python开发Spark应用程序,可以使用HDFS分布式存储大量数据。还可以使用多台计算机建立集群上来执行分布式计算。
Spark MLlib:RDD-baseed 机器学习API
Spark MLlib
Spark一开始就提供了RDD为基础的机器学习模块,优点是可以发挥in-memory与分布式运算,大幅度提升需要迭代的机器学习模块的执行效率。功能强大。
Spark ML Pipeline:Dataframes-based 机器学习 API
Spark ML Pipeline
DataFrame与Spark ML Pipeline
- DataFrame Spark受Pandas程序包启发所设计的数据处理架构。
- Spark ML Pipeline:Spark 受Scikit-learn程序包启发所涉及的机器学习架构。
优点是:
- 降低学习的门槛
- Spark DataFrame与Pandas DataFrame可以相互转换的。我们可以把数据读取到Spark DataFrame,然后使用Spark ML Pipeline机器学习、训练、预测,再将结果存回Spark DataFrame,最后转换为Pandas DataFrame,转换后就可以使用Python丰富的可视化程序包进行可视化设计。
- Spark DataFrame提供的API可轻松读取大数据中的各种数据源,如Hadoop、Parquet、Json等。还可以通过JDBC读取关系数据库,例如:MySQL、MS-SQL。
常用数据分析软件包
Spark ML Pipeline 机器学习流程介绍
机器学习工作流程的原理与石油管道类似,就是将机器学习的每一个阶段建立成Pipeline流程:原始数据像数据流一样,仅改过一连串的处理,如数据处理、进行训练、建立模型、进行预测、最后产生预测结果。
Spark ML Pipelien 机器学习流程
Spark2.0的介绍
提升执行性能
- Spark SQL 在Spark2.0可以执行所有99 TPC-DS查询,能够执行SQL:2003标准的新功能,支持子查询
- SparkSession:新增SparkSession,同时具备了SQLContext与HiveContext的功能。
Spark ML Pipeline机器学习程序包
- 以DataFrame为基础的机器学习程序包Spark ML Pipeline称为主要的机器学习架构。过去Spark MLlib程序包仍然可以继续使用。
- Spark ML Pipeline程序包可以存储、加载训练完成的模型。
DataSet API
- DataSet API 就可以同时执行具有类型的方法和不具有类型的方法,不过编译类型为安全(compile-time type-safety)并不是Python和R的语言特性。
Structured Streaming APIs
可以使用DataFrame、Dataset API,以Catelyst优化提升性能,并且整合了streaming数据流处理、interactive互动查询与batch queries批次查询。
新增功能
- R语言的分布式算法,增加了Generalized Linear Models(GLM)、Native Bayes、Survival Regression与K-Means等算法。
- 更加简单、更高性能的Accumulator API,拥有更简洁的类型结构,并且支持基本类型。
Hadoop
hadoop是存储于处理大量数据的平台,是Apache软件基金会的开放源码,免费且广泛。
Hadoop的特性
- 可扩展性(Scalabel):采用分布式计算与存储,当我们扩展容量或原运算时,不需要更换整个系统,只需要增加新的数据节点服务器即可。
- 经济性(Economical):只需要一般等级的服务器就可以架构出高性能,高容量的集群。
- 弹性(Flexible):Hadoop存储的数据是非结构化的(Schema-less)的,也就是说可以是存储各种形式,不同数据源的数据。
- 可靠性(Raliable):分布式架构,不会因为某一台服务器坏掉而导致系统的崩溃。
Hadoop HDFS 分布式文件系统
HDFS采用分布式文件系统(Hadoop Distributed Filed System),可以由单台服务器扩充到数千台服务器。
分布式文件系统
- NameNode服务器负责管理与维护HDFS目录系统并控制文件的读写操作。
- 多个DataNode服务器负责存储数据。
HDFS设计的前提与目标
- 硬件故障是常态而不是异常(Hardware Failure)
HDFS是设计运行在低成本的普通服务器上的。硬件故障是常态,而不是异常,所以HDFS被设计成具有高容错能力,能够实时监测错误并且错误自动恢复,这是HDFS核心的设计目标。 - Streaming流式数据存取(Streaming Data Access)
运行在HDFS上的应用程序会通过Streaming存取数据集。HDFS的主要设计是批处理,而不是实时互动处理。优点是会提高存储大量数据的能力,但是牺牲了响应时间。 - 大数据集(Large Data Sets)
HDFS提供了cluster集群机构,用于存储大数据文件,集群可扩充至数百个节点。 - 简单一致性模型(Simplle Coherency Model)
HDFS的存储模式是一次写入多次读取(write-once-many),一个文件被创建后不会再修改。这样设计的优点是:可以提高存储大量数据的能力,并简化数据一致性的问题。 - 移动计算比移动数据成本更低(Moving Computation is Cheaper than Moving Data)
当我们的Cluster集群存储了大量的数据时,要搬移数据必须耗费大量的时间成本,因此将计算功能在接近数据的服务器中运行,而不是搬移数据。 - 跨硬件和软件平台
HDFS文件存储架构
- 文件分割:用户以HDFS命令要求存储文件时,系统会将文件切割为多个区块(Block),每个区块是64MB。
- 区块副本策略:
- 一个文件区块就会默认复制成3份,我们可以在Hadoop配置中设备文件区块要创建几个副本。
- 文件区块损坏时,NameNode会自动寻找位于其他DataNode上的副本来恢复数据,维持3分的副本策略。
- 机架感知
- 上图中有三个机架,每个机架有4台DataNode服务器。
- HDFS具有机架感知功能。可将副本放置在不同机架中,防止机架出现问题。
Hadoop MapReduce的介绍
利用大数据进行数据分析处理是数据量庞大,所需的运算量也巨大。Hadoop MapReduce的做法是采用分布式计算的技术。
分割任务
- Map将任务分割成更小的任务,由每台服务器分别运行
- Reduce将所有服务器的运算结果汇总整理,返回最后的结果。
MapReduce版本2.0 YARN
Hadoop的MapReduce架构称为YARN(Yet Another Resource Negotiator,另一种资源协调者),是效率更高的资源管理核心。
可以看到:
- 在Client客户端,用户会向Resource Manager 请求执行运算或执行任务
- 在NameNode会有Resource Manager统筹管理运算的请求,
- 在其他DataNode会有Node Manager 负责运行,以及监督每一个任务task,并且向Resource Manager汇报状态。
Hadoop MapReduce 的计算框架