- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
spark调研报告
自2013年6月进入Apache孵化器,Spark已经有来自25个组织的120多位开发者参与贡献。而在不久前,更成为了Apache软件基金会的顶级项目,当下已是知名Hadoop开发商Cloudera和MapR的新宠。Spark是发源于美国加州大学伯克利分校AMPLab的集群计算平台,它立足于内存计算,性能超过Hadoop百倍,即使使用磁盘,迭代类型的计算也会有10倍速度的提升。Spark从多迭代批量处理出发,兼收并蓄数据仓库、流处理和图计算等多种计算范式,是罕见的全能选手。Spark当下已成为Apache基金会的顶级开源项目,拥有着庞大的社区支持——活跃开发者人数已超过Hadoop MapReduce)。这里,我们为大家分享许鹏的“Apache Spark源码走读”系列博文,从源码方面对这个流行大数据计算框架进行深度了解。以下为博文楔子源码阅读是一件非常容易的事,也是一件非常难的事。容易的是代码就在那里,一打开就可以看到。难的是要通过代码明白作者当初为什么要这样设计,设计之初要解决的主要问题是什么。在对Spark的源码进行具体的走读之前,如果想要快速对Spark的有一个整体性的认识,阅读MateiZaharia做的Spark论文是一个非常不错的选择。在阅读该论文的基础之上,再结合Spark作者在2012 Developer Meetup上做的演讲Introduction to Spark Internals,那么对于Spark的内部实现会有一个比较大概的了解。有了上述的两篇文章奠定基础之后,再来进行源码阅读,那么就会知道分析的重点及难点。基本概念(Basic Concepts)1. RDD——Resillient Distributed Dataset 弹性分布式数据集。2. Operation——作用于RDD的各种操作分为transformation和action。3. Job——作业,一个JOB包含多个RDD及作用于相应RDD上的各种operation。4. Stage——一个作业分为多个阶段。5. Partition——数据分区,一个RDD中的数据可以分成多个不同的区。6. DAG——Directed Acycle graph,有向无环图,反应RDD之间的依赖关系。7. Narrow dependency——窄依赖,子RDD依赖于父RDD中固定的data partition。8. Wide Dependency——宽依赖,子RDD对父RDD中的所有data partition都有依赖。9. Caching Managenment——缓存管理,对RDD的中间计算结果进行缓存管理以加快整体的处理速度。编程模型(Programming Model)RDD是只读的数据分区集合,注意是数据集。作用于RDD上的Operation分为transformantion和action。经Transformation处理之后,数据集中的内容会发生更改,由数据集A转换成为数据集B;而经Action处理之后,数据集中的内容会被归约为一个具体的数值。只有当RDD上有action时,该RDD及其父RDD上的所有operation才会被提交到cluster中真正的被执行。从代码到动态运行,涉及到的组件如下图所示。?演示代码valsc = new SparkContext(Spark://..., MyJob, home, jars)val file = sc.textFile(hdfs://...)val errors = file.filter(_.contains(ERROR))errors.cache()errors.count()运行态(Runtime view)不管什么样的静态模型,其在动态运行的时候无外乎由进程,线程组成。用Spark的术语来说,static view称为dataset view,而dynamic view称为parition view。关系如图所示?在Spark中的task可以对应于线程,worker是一个个的进程,worker由driver来进行管理。那么问题来了,这一个个的task是如何从RDD演变过来的呢?下节将详细回答这个问题。部署(Deployment view)当有Action作用于某RDD时,该action会作为一个job被提交。在提交的过程中,DAGScheduler模块介入运算,计算RDD之间的依赖关系。RDD之间的依赖关系就形成了DAG。每一个JOB被分为多个stage,划分stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个stage,避免多个stage之间的消息传递开销。当stage被提交之后,由taskscheduler来根据stage来计算所需要的task,并将tas
文档评论(0)