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数据源。

ha spark 模式 spark hoarding_MapReduce


Spark in-memory的计算框架

Spark在运算时,将中间产生的数据暂存在内存中,因此可以加速运行速度。需要反复操作的次数越多,所需读取的数据量越大,就越能看出Spark的性能。Spark在内存中运行程序,命令运行速度(或命令周期)比Hadoop MapReudce 的命令运行速度快100倍。即便是运行在磁盘上时,Spark的速度也能快10倍。

Spark的特色

  • 命令周期短
  • 易于开发程序:支持Scala、Python、Java。
  • 与Hadoop兼容:支持Hadoop的HDFS存储系统,并且支持Hadoop YARN,可共享存储资源与运算,并且几乎与Hive完全兼容。
  • 可以在各个平台运行

Spark 2.0 的主要的功能

ha spark 模式 spark hoarding_MapReduce_02


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

ha spark 模式 spark hoarding_spark_03


Spark MLlib

Spark一开始就提供了RDD为基础的机器学习模块,优点是可以发挥in-memory与分布式运算,大幅度提升需要迭代的机器学习模块的执行效率。功能强大。

Spark ML Pipeline:Dataframes-based 机器学习 API

ha spark 模式 spark hoarding_ha spark 模式_04


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。

ha spark 模式 spark hoarding_Hadoop_05


常用数据分析软件包

Spark ML Pipeline 机器学习流程介绍

机器学习工作流程的原理与石油管道类似,就是将机器学习的每一个阶段建立成Pipeline流程:原始数据像数据流一样,仅改过一连串的处理,如数据处理、进行训练、建立模型、进行预测、最后产生预测结果。

ha spark 模式 spark hoarding_ha spark 模式_06


Spark ML Pipelien 机器学习流程

Spark2.0的介绍

提升执行性能

  1. Spark SQL 在Spark2.0可以执行所有99 TPC-DS查询,能够执行SQL:2003标准的新功能,支持子查询
  2. SparkSession:新增SparkSession,同时具备了SQLContext与HiveContext的功能。

Spark ML Pipeline机器学习程序包

  1. 以DataFrame为基础的机器学习程序包Spark ML Pipeline称为主要的机器学习架构。过去Spark MLlib程序包仍然可以继续使用。
  2. Spark ML Pipeline程序包可以存储、加载训练完成的模型。

DataSet API

  1. DataSet API 就可以同时执行具有类型的方法和不具有类型的方法,不过编译类型为安全(compile-time type-safety)并不是Python和R的语言特性。

Structured Streaming APIs

可以使用DataFrame、Dataset API,以Catelyst优化提升性能,并且整合了streaming数据流处理、interactive互动查询与batch queries批次查询。

新增功能

  1. R语言的分布式算法,增加了Generalized Linear Models(GLM)、Native Bayes、Survival Regression与K-Means等算法。
  2. 更加简单、更高性能的Accumulator API,拥有更简洁的类型结构,并且支持基本类型。

Hadoop

hadoop是存储于处理大量数据的平台,是Apache软件基金会的开放源码,免费且广泛。

Hadoop的特性

  • 可扩展性(Scalabel):采用分布式计算与存储,当我们扩展容量或原运算时,不需要更换整个系统,只需要增加新的数据节点服务器即可。
  • 经济性(Economical):只需要一般等级的服务器就可以架构出高性能,高容量的集群。
  • 弹性(Flexible):Hadoop存储的数据是非结构化的(Schema-less)的,也就是说可以是存储各种形式,不同数据源的数据。
  • 可靠性(Raliable):分布式架构,不会因为某一台服务器坏掉而导致系统的崩溃。

Hadoop HDFS 分布式文件系统

HDFS采用分布式文件系统(Hadoop Distributed Filed System),可以由单台服务器扩充到数千台服务器。

ha spark 模式 spark hoarding_机器学习_07


分布式文件系统

  • 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文件存储架构

ha spark 模式 spark hoarding_MapReduce_08

  • 文件分割:用户以HDFS命令要求存储文件时,系统会将文件切割为多个区块(Block),每个区块是64MB。
  • 区块副本策略:
  • 一个文件区块就会默认复制成3份,我们可以在Hadoop配置中设备文件区块要创建几个副本。
  • 文件区块损坏时,NameNode会自动寻找位于其他DataNode上的副本来恢复数据,维持3分的副本策略。
  • 机架感知
  • 上图中有三个机架,每个机架有4台DataNode服务器。
  • HDFS具有机架感知功能。可将副本放置在不同机架中,防止机架出现问题。

Hadoop MapReduce的介绍

利用大数据进行数据分析处理是数据量庞大,所需的运算量也巨大。Hadoop MapReduce的做法是采用分布式计算的技术。

ha spark 模式 spark hoarding_Hadoop_09


分割任务

  • Map将任务分割成更小的任务,由每台服务器分别运行
  • Reduce将所有服务器的运算结果汇总整理,返回最后的结果。

MapReduce版本2.0 YARN

Hadoop的MapReduce架构称为YARN(Yet Another Resource Negotiator,另一种资源协调者),是效率更高的资源管理核心。

ha spark 模式 spark hoarding_spark_10


可以看到:

  • 在Client客户端,用户会向Resource Manager 请求执行运算或执行任务
  • 在NameNode会有Resource Manager统筹管理运算的请求,
  • 在其他DataNode会有Node Manager 负责运行,以及监督每一个任务task,并且向Resource Manager汇报状态。

Hadoop MapReduce 的计算框架

ha spark 模式 spark hoarding_Hadoop_11