- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BingoInsight基于Spark高效通用的大规模数据处理引擎剖析2
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端的输出数据输入至R
文档评论(0)