当前位置:文档之家› BingoInsight基于Spark高效通用的大规模数据处理引擎

BingoInsight基于Spark高效通用的大规模数据处理引擎

BingoInsight基于Spark高效通用的大规模数据处理引擎
BingoInsight基于Spark高效通用的大规模数据处理引擎

BingoInsight基于Spark高效通用的大规模数据处理引擎

小编的话

“品高云公开课”系列文章意在分享技术牛人的知识干货,和大家一起交流学习云知识,每期主题都不一样哟!期待各位读者在文后发表留言,来一场技术上的交流和思想上的碰撞!2016年4月22日本期品高云公开课由张启明带来“BingoInsight基于Spark高效通用的大规模数据处理引擎”的分享。

分享嘉宾

朱锦勇品高云旗下企业大数据平台BingoInsight开发团队成员。主要工作负责写Java代码。

分享正文

Hi,大家好,我是BingoInsight的研发工程师张启明,非常荣幸和大家一起学习和交流。今天分享主要的内容包括:

1、Spark是什么,Spark的简介。

2、如何利用Spark构建BingoInsight的数据处理能力。

Spark简介这块为了控制时间和范围,暂时只涉及RDD方面及其Shuffle简介,调度实现先略过,大家有什么疑问的话,随时可在交流过程一起讨论哦

Spark是什么呢?

从最开始我们在单台机子做数据分析,为了加快分析的速度,通常是将单个任务拆分为多任务,多线程利用cpu多核并行多跑任务,以达到并行计算加快分析的速度。但是单机处理能力毕竟太小,而且单机计算资源纵向扩展费用昂贵且有限制,在容错性方面也不太好。后来MapReduce思想开始流传,在大量普通机子集群上面做分布式的任务分解与结果汇总。MR思想衍生出很多的实现,如Apache下Hadoop的MapReduce。

MapReduce广泛应用,慢慢地其缺点也逐渐暴露,如:

1、map和reduce两个操作难以表达复杂作业,难以编程,衍生出hive/pig等之类解决框架

2、复杂job难以控制,高延时迭代,中间结果写HDFS,衍生出Tez之类的DAG 调度框架

3、从v1版的计算模型和执行调度资源框架混合,到v2的计算模型和资源管理分离衍生的yarn

Spark的出现实际弥补了MR的不足,最初的设计目标是为了扩展MapReduce模型灵活支持迭代算法和交互操作,同时增强易编程性。

实现方面主要借鉴了微软的DryadLINQ ,但是其抽象模型RDD(弹性分布式数据集-In-Memory)具有更丰富的表达能力而且具备MapReduce模型优秀特性如Fault tolerance, data locality, scalability 。

Spark整体看起来是怎么样呢?

spark主要由Master、Worker、Executor、Driver几个组件构成,常见中心化的master/slave结构,主要用于接收Driver端(spark的client,可运行在集群内外任意机器上),Executor主要用于执行计算任务。

那么Spark的抽象——RDD是什么?如果类比MapReduce的话,RDD就是Spark 的编程模型。我们快速地来看一下RDD的特性及其操作。

RDD是不可变、每个分区可并行处理的弹性分布式数据集,主要特性有:

1、partitions:分区集合;

2、partition computing:分区计算函数;

3、dependencies:依赖,依赖是与MR最大不同,其定义为RDD之间lineage(血缘链关系),是job/stage划分依据;

4、partitioner : 分区函数,key-values结构的RDD才有(hash-partitioned);

5、preferred locations:分区的最优计算位置,例如HDFS的block,可选对应函数。

RDD的产生主要有两种方式:

1、从已经存在collections中并行化;

2、从外部数据源加载,如HDFS etc.

RDD的操作主要有两种:

1、Transformations:转换,产生新的RDD,lazy方式,如map/filter/sample/ etc.

2、Actions:提交转换操作,将计算结果返回Driver端,如reduce/collect/ etc.

另外RDD 的Persisting/Caching是迭代算法和快速迭代的关键,可以选择性将数据缓存在内存

那么对于分布式计算中,常见异常失败(宕机等),RDD如何做容错呢?有两个办法:

1、Lineage,利用RDD的依赖关系链重新进行计算,某个过程或者某个计算分片数据丢失后,可以从最原始数据重新执行一系列的transform 操作,也就是计算链的重演。

2、Checkpoint,保存点,避免compute chain过长时引起耗时使用

分布式计算框架最核心的问题Shuffle,RDD是如何解决呢,Spark如何实现呢,简单介绍一下:

以前MapReduce模型Shuffle 过程是怎么样的?

一般地,Map端的输出数据输入至Reduce端的过程叫Shuffle ,如下图,Map端主要包括collect、Sort、Spill 、Merge几个过程

Reduce端主要包括Fetch、Merge。

Spark在1.2.0之前,现实的Shuffle算法是Hash Based Shuffle,主要是因为快捷逻辑简单,但是面临很多问题,如输出文件过多等等。

1.2.0+之后实现了Sort Based Shuffle 作为默认的Shuffle算法,这个算法和MapReduce的Shuffle基本类似的。

1.4.0后因为Tungsten工程的开展,Unsafe Shuffle or Tungsten Sort也可以作为了一种选择

好,上面介绍了RDD这块一些相关的东西,那么来看一下与Hadoop生态体系其它计算框架对比RDD高度抽象,丰富而简洁的表达能力,简洁易用的API,filter/map/reduce/group等,计算链可在单个job完成。高效迭代,中间结果放在内存,不同于MapReduce写入hdfs,及难以表达复杂的计算,同时需要很精巧的控制job的逻辑统一的数据处理平台,丰富的组件:交互式的Spark SQL,流式的Spark Streaming,机器学习方面的Spark MLib,图学习方面的Spark GraphX 适应不同的场景。

那么BingoInsight如何利用Spark进行数据分析?

BingoInsight基础框架上,无论使用传统关系型数据库,或者是hive这些hadoop 高延时批处理性质的数据仓库,又或者是Spark这个低延时的计算框架。BingoInsight为用户提供统一抽象的数据访问接口,一致的数据管理功能体验。着力于结构化可元描述的数据处理。

如何合理的利用Spark,让BingoInsight高效利用分式计算的处理能力呢?

答案是1.0后的SparkSQL,分布式SQL查询引擎。从先前手写RDD的翻译到利用SparkSQL的DataFrame进行自优化的查询计划,以及后续Roadmap v2.0版本中将要到来类似Flink的DataSet ,流式和批处理的进一步抽象。我们需要的只是SQL。

BingoInsight按照SparkSQL语法,实现了SparkSQL AST,自由的将元数据进行渲染翻译为spark sql语法,利用Thrift-server jdbc发送到集群进行执行。同时提供查询控制,job作业监控,数据集群管理。对应复杂的数据质量低下的数据集,可以小巧的ETL工具进行处理,提供完整的结构化数据。

BingoInsight自助化的大数据分析处理,解决了海量关系型数据的统计效率,支持面向海量数据的交互式查询,让用户便利地享受分布式计算的好处。完整的监控运维体系,让用户随时掌控集群的情况。

欢迎大家一起来交流!

相关主题
文本预览
相关文档 最新文档