spark调研报告.docx

上传人:b****1 文档编号:23171719 上传时间:2023-05-15 格式:DOCX 页数:18 大小:265.62KB
下载 相关 举报
spark调研报告.docx_第1页
第1页 / 共18页
spark调研报告.docx_第2页
第2页 / 共18页
spark调研报告.docx_第3页
第3页 / 共18页
spark调研报告.docx_第4页
第4页 / 共18页
spark调研报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

spark调研报告.docx

《spark调研报告.docx》由会员分享,可在线阅读,更多相关《spark调研报告.docx(18页珍藏版)》请在冰豆网上搜索。

spark调研报告.docx

spark调研报告

自2013年6月进入Apache孵化器,Spark已经有来自25个组织的120多位开发者参与贡献。

而在不久前,更成为了Apache软件基金会的顶级项目,当下已是知名Hadoop开发商Cloudera和MapR的新宠。

Spark是发源于美国加州大学伯克利分校AMPLab的集群计算平台,它立足于内存计算,性能超过Hadoop百倍,即使使用磁盘,迭代类型的计算也会有10倍速度的提升。

Spark从多迭代批量处理出发,兼收并蓄数据仓库、流处理和图计算等多种计算范式,是罕见的全能选手。

Spark当下已成为Apache基金会的顶级开源项目,拥有着庞大的社区支持——活跃开发者人数已超过HadoopMapReduce)。

这里,我们为大家分享许鹏的“ApacheSpark源码走读”系列博文,从源码方面对这个流行大数据计算框架进行深度了解。

以下为博文

楔子

源码阅读是一件非常容易的事,也是一件非常难的事。

容易的是代码就在那里,一打开就可以看到。

难的是要通过代码明白作者当初为什么要这样设计,设计之初要解决的主要问题是什么。

在对Spark的源码进行具体的走读之前,如果想要快速对Spark的有一个整体性的认识,阅读MateiZaharia做的Spark论文是一个非常不错的选择。

在阅读该论文的基础之上,再结合Spark作者在2012DeveloperMeetup上做的演讲IntroductiontoSparkInternals,那么对于Spark的内部实现会有一个比较大概的了解。

有了上述的两篇文章奠定基础之后,再来进行源码阅读,那么就会知道分析的重点及难点。

基本概念(BasicConcepts)

1.RDD——ResillientDistributedDataset弹性分布式数据集。

2.Operation——作用于RDD的各种操作分为transformation和action。

3.Job——作业,一个JOB包含多个RDD及作用于相应RDD上的各种operation。

4.Stage——一个作业分为多个阶段。

5.Partition——数据分区,一个RDD中的数据可以分成多个不同的区。

6.DAG——DirectedAcyclegraph,有向无环图,反应RDD之间的依赖关系。

7.Narrowdependency——窄依赖,子RDD依赖于父RDD中固定的datapartition。

8.WideDependency——宽依赖,子RDD对父RDD中的所有datapartition都有依赖。

9.CachingManagenment——缓存管理,对RDD的中间计算结果进行缓存管理以加快整体的处理速度。

编程模型(ProgrammingModel)

RDD是只读的数据分区集合,注意是数据集。

作用于RDD上的Operation分为transformantion和action。

经Transformation处理之后,数据集中的内容会发生更改,由数据集A转换成为数据集B;而经Action处理之后,数据集中的内容会被归约为一个具体的数值。

只有当RDD上有action时,该RDD及其父RDD上的所有operation才会被提交到cluster中真正的被执行。

从代码到动态运行,涉及到的组件如下图所示。

 

演示代码

valsc=newSparkContext("Spark:

//...","MyJob",home,jars)

valfile=sc.textFile("hdfs:

//...")

valerrors=file.filter(_.contains("ERROR"))

errors.cache()

errors.count()

运行态(Runtimeview)

不管什么样的静态模型,其在动态运行的时候无外乎由进程,线程组成。

用Spark的术语来说,staticview称为datasetview,而dynamicview称为paritionview。

关系如图所示

 

在Spark中的task可以对应于线程,worker是一个个的进程,worker由driver来进行管理。

那么问题来了,这一个个的task是如何从RDD演变过来的呢?

下节将详细回答这个问题。

部署(Deploymentview)

当有Action作用于某RDD时,该action会作为一个job被提交。

在提交的过程中,DAGScheduler模块介入运算,计算RDD之间的依赖关系。

RDD之间的依赖关系就形成了DAG。

每一个JOB被分为多个stage,划分stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个stage,避免多个stage之间的消息传递开销。

当stage被提交之后,由taskscheduler来根据stage来计算所需要的task,并将task提交到对应的worker。

Spark支持以下几种部署模式,Standalone、Mesos和YARN。

这些部署模式将作为taskscheduler的初始化入参。

RDD接口(RDDInterface)

RDD由以下几个主要部分组成

1.partitions——partition集合,一个RDD中有多少datapartition

2.dependencies——RDD依赖关系

3.compute(parition)——对于给定的数据集,需要作哪些计算

4.preferredLocations——对于datapartition的位置偏好

5.partitioner——对于计算出来的数据结果如何分发

缓存机制(caching)

RDD的中间计算结果可以被缓存起来,缓存先选Memory,如果Memory不够的话,将会被写入到磁盘中。

根据LRU(last-recentupdate)来决定哪先内容继续保存在内存,哪些保存到磁盘。

容错性(Fault-tolerant)

从最初始的RDD到衍生出来的最后一个RDD,中间要经过一系列的处理。

那么如何处理中间环节出现错误的场景呢?

Spark提供的解决方案是只对失效的datapartition进行事件重演,而无须对整个数据全集进行事件重演,这样可以大大加快场景恢复的开销。

RDD又是如何知道自己的datapartition的number该是多少?

如果是HDFS文件,那么HDFS文件的block将会成为一个重要的计算依据。

集群管理(clustermanagement)

task运行在cluster之上,除了Spark自身提供的Standalone部署模式之外,Spark还内在支持Yarn和mesos。

Yarn来负责计算资源的调度和监控,根据监控结果来重启失效的task或者是重新distributedtask一旦有新的node加入cluster的话。

这一部分的内容需要参Yarn的文档。

小结

在源码阅读时,需要重点把握以下两大主线。

∙静态view 即RDD,transformationandaction

∙动态view 即 lifeofajob, 每一个job又分为多个stage,每一个stage中可以包含多个rdd及其transformation,这些stage又是如何映射成为task被distributed到cluster中

April:

Lightning-FastClusterComputingwithSparkandShark

∙April16,2013·6:

30PM

∙BrontoSoftware,Inc.

Speakers:

 MayureshKunjir and HaroldLim,DukeUniversity 

Sparkisanopen-sourcecluster-computingsystemdevelopedbytheAMPLabattheUniversityofCalifornia,Berkeley.Sparkprovidesveryfastperformanceandeaseofdevelopmentforavarietyofdataanalyticsneedssuchasmachinelearning,graphprocessing,andSQL-likequeries.Sparksupportsdistributedin-memorycomputations thatcanbeupto100xfasterthanHadoop. 

SharkisaHive-compatibledatawarehousingsystembuiltonSpark.SharksupportstheHiveQLquerylanguage,theHiveMetastore,andall theserializationformatssupportedbyHive.TheuseofSparkanda numberofbuilt-inoptimizationsmakeSharkperformupto100xfaster thanHive. 

ThistalkwilldiscusstheinternalsofSparkandShark,theapplicationsthatthesesystemssupport,andshowademothatincludes performancecomparisonswithHive.

ApacheSpark源码走读之2--Job的提交与运行

概要

本文以wordCount为例,详细说明Spark创建和运行job的过程,重点是在进程及线程的创建。

实验环境搭建

在进行后续操作前,确保下列条件已满足。

1.下载sparkbinary0.9.1

2.安装scala

3.安装sbt

4.安装java

启动spark-shell

单机模式运行,即local模式

local模式运行非常简单,只要运行以下命令即可,假设当前目录是$SPARK_HOME

MASTER=localbin/spark-shell

"MASTER=local"就是表明当前运行在单机模式

localcluster方式运行

localcluster模式是一种伪cluster模式,在单机环境下模拟Standalone的集群,启动顺序分别如下

1.启动master

2.启动worker

3.启动spark-shell

master

$SPARK_HOME/sbin/start-master.sh

 注意运行时的输出,日志默认保存在$SPARK_HOME/logs目录。

master主要是运行类 org.apache.spark.deploy.master.Master,在8080端口启动监听,日志如下图所示

修改配置

1.进入$SPARK_HOME/conf目录

2.将spark-env.sh.template重命名为spark-env.sh

3.修改spark-env.sh,添加如下内容

exportSPARK_MASTER_IP=localhost

exportSPARK_LOCAL_IP=localhost

运行worker

bin/spark-classorg.apache.spark.deploy.worker.Workerspark:

//localhost:

7077-i127.0.0.1-c1-m512M


worker启动完成,连接到master。

打开maser的webui可以看到连接上来的worker.MasterWEbUI的监听地址是http:

//localhost:

8080

启动spark-shell

MASTER=spark:

//localhost:

7077bin/spark-shell

如果一切顺利,将看到下面的提示信息。

Createdsparkcontext..

Sparkcontextavailableassc.

可以用浏览器打开localhost:

4040来查看如下内容

1.stages

2.storage

3.environment

4.executors

wordcount

上述环境准备妥当之后,我们在sparkshell中运行一下最简单的例子,在spark-shell中输入如下代码

scala>sc.textFile("README.md").filter(_.contains("Spark")).count

上述代码统计在README.md中含有Spark的行数有多少

部署过程详解

Spark布置环境中组件构成如下图所示。

∙DriverProgram 简要来说在spark-shell中输入的wordcount语句对应于上图的DriverProgram。

∙ClusterManager 就是对应于上面提到的master,主要起到deploymanagement的作用

∙WorkerNode 与Master相比,这是slavenode。

上面运行各个executor,executor可以对应于线程。

executor处理两种基本的业务逻辑,一种就是driverprogramme,另一种就是job在提交之后拆分成各个stage,每个stage可以运行一到多个task

Notes:

 在集群(cluster)方式下,ClusterManager运行在一个jvm进程之中,而worker运行在另一个jvm进程中。

在localcluster中,这些jvm进程都在同一台机器中,如果是真正的Standalone或Mesos及Yarn集群,worker与master或分布于不同的主机之上。

JOB的生成和运行

job生成的简单流程如下

1.首先应用程序创建SparkContext的实例,如实例为sc

2.利用SparkContext的实例来创建生成RDD

3.经过一连串的transformation操作,原始的RDD转换成为其它类型的RDD

4.当action作用于转换之后RDD时,会调用SparkContext的runJob方法

5.sc.runJob的调用是后面一连串反应的起点,关键性的跃变就发生在此处

 调用路径大致如下

1.sc.runJob->dagScheduler.runJob->submitJob

2.DAGScheduler:

:

submitJob会创建JobSummitted的event发送给内嵌类eventProcessActor

3.eventProcessActor在接收到JobSubmmitted之后调用processEvent处理函数

4.job到stage的转换,生成finalStage并提交运行,关键是调用submitStage

5.在submitStage中会计算stage之间的依赖关系,依赖关系分为宽依赖和窄依赖两种

6.如果计算中发现当前的stage没有任何依赖或者所有的依赖都已经准备完毕,则提交task

7.提交task是调用函数submitMissingTasks来完成

8.task真正运行在哪个worker上面是由TaskScheduler来管理,也就是上面的submitMissingTasks会调用TaskScheduler:

:

submitTasks

9.TaskSchedulerImpl中会根据Spark的当前运行模式来创建相应的backend,如果是在单机运行则创建LocalBackend

10.LocalBackend收到TaskSchedulerImpl传递进来的ReceiveOffers事件

11.receiveOffers->executor.launchTask->TaskRunner.run

代码片段executor.lauchTask

deflaunchTask(context:

ExecutorBackend,taskId:

Long,serializedTask:

ByteBuffer){

valtr=newTaskRunner(context,taskId,serializedTask)

runningTasks.put(taskId,tr)

threadPool.execute(tr)

}

说了这么一大通,也就是讲最终的逻辑处理切切实实是发生在TaskRunner这么一个executor之内。

运算结果是包装成为MapStatus然后通过一系列的内部消息传递,反馈到DAGScheduler,这一个消息传递路径不是过于复杂,有兴趣可以自行勾勒。

Twitter将采用Spark分析大数据

Twitter数据科学家EdwinChen最近在接受媒体采访的时候透露,Twitter内部希望尝试一种全新的大数据系统——Spark。

AD:

WOT2014:

用户标签系统与用户数据化运营培训专场

Spark是一个基于内存计算的开源的集群计算系统(点此下载),目的是让数据分析更加快速。

Spark非常小巧玲珑,由加州伯克利大学AMP实验室的Matei为主的小团队所开发。

使用的语言是Scala,项目的core部分的代码只有63个Scala文件,非常短小精悍。

与Hadoop不同的是,Spark和Scala紧密集成,Scala像管理本地collective对象那样管理分布式数据集。

Edwin认为:

”MapReduce或hadoop任务都是批处理,所以启动一项Hadoop任务,或等待结果返回都需要等待很长时间,这一点很难改变,因为Hadoop天生就是一个批处理系统,你无法在上面运行互动分析。

不过Hadoop对于分析海量数据还是很有用的。

Spark开发之初是为了两个能被内存计算提速的应用:

互动算法(常见于机器学习中,例如Google的PR)和互动数据挖掘(HiveonSpark)。

在这两个应用中,Spark的速度是HadoopMapReduce的30倍!

这是因为运行Spark系统时,服务器可以把中间数据存储在RAM内存中,而无需经常从头加载。

这意味着分析结果的返回速度大大加快,足以胜任互动分析工作。

(见下图)

在Spark的出生地——加州伯克利大学的AMP实验室,研究人员用Spark分析垃圾邮件过滤、自然语言处理以及交通路况预测等任务。

Spark还被用来给Conviva、Klout和Quantifind等公司的数据分析服务提速。

无疑,Spark处理分布式数据集的框架不仅是有效的,而且是高效的(通过简洁的Scala脚本)。

Spark和Scala目前都还尚处于开发中。

尽管如此,随着加入更多的关键互联网特性,它越来越从有趣的开源软件过渡为基础的web技术。

 

大数据计算新贵Spark在腾讯雅虎优酷成功应用解析

发表于2014-06-0514:

50| 7223次阅读|来源腾讯大数据| 9 条评论|作者佚名

大数据腾讯sparkhadoop集群机器学习开源项目Shark

摘要:

MapReduce在实时查询和迭代计算上仍有较大的不足,目前,Spark由于其可伸缩、基于内存计算等特点,且可以直接读写Hadoop上任何格式的数据,逐渐成为大数据处理的新宠,腾讯分享了Spark的原理和应用案例。

【编者按】MapReduce由于其设计上的约束只适合处理离线计算,在实时查询和迭代计算上仍有较大的不足,而随着业务的发展,业界对实时查询和迭代分析有更多的需求,单纯依靠MapReduce框架已经不能满足业务的需求了。

Spark由于其可伸缩、基于内存计算等特点,且可以直接读写Hadoop上任何格式的数据,成为满足业务需求的最佳候选者。

本文来自腾讯大数据。

免费订阅“CSDN云计算”微信公众号,实时掌握第一手云中消息!

CSDN作为国内最专业的云计算服务平台,提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、Hadoop、Spark、机器学习、智能算法等相关云计算观点,云计算技术,云计算平台,云计算实践,云计算产业资讯等服务。

以下为原文:

Spark作为Apache顶级的开源项目,项目主页见http:

//spark.apache.org。

在迭代计算,交互式查询计算以及批量流计算方面都有相关的子项目,如Shark、SparkStreaming、MLbase、GraphX、SparkR等。

从13年起Spark开始举行了自已的SparkSummit会议,会议网址见http:

//spark-summit.org。

Amplab实验室单独成立了独立公司Databricks来支持Spark的研发。

为了满足挖掘分析与交互式实时查询的计算需求,腾讯大数据使用了Spark平台来支持挖掘分析类计算、交互式实时查询计算以及允许误差范围的快速查询计算,目前腾讯大数据拥有超过200台的Spark集群,并独立维护Spark和Shark分支。

Spark集群已稳定运行2年,我们积累了大量的案例和运营经验能力,另外多个业务的大数据查询与分析应用,已在陆续上线并稳定运行。

在SQL查询性能方面普遍比MapReduce高出2倍以上,利用内存计算和内存表的特性,性能至少在10倍以上。

在迭代计算与挖掘分析方面,精准推荐将小时和天级别的模型训练转变为Spark的分钟级别的训练,同时简洁的编程接口使得算法实现比MR在时间成本和代码量上高出许多。

SparkVSMapReduce

尽管MapReduce适用大多数批处理工作,并且在大数据时代成为企业大数据处理的首选技术,但由于以下几个限制,它对一些场景并不是最优选择:

∙缺少对迭代计算以及DAG运算的支持

∙Shuffle过程多次排序和落地,MR之间的数据需要落Hdfs文件系统

Spark在很多方面都弥补了MapReduce的不足,比MapReduce的通用性更好,迭代运算效率更高,作业延迟更低,它的主要优势包括:

∙提供了一套支持DAG图的分布式并行计算的编程框架,减少多次计算之间中间结果写到Hdfs的开销

∙提供Cache机制来支持需要反复迭代计算或者多次数据共享,减少数据读取的IO开销

∙使用多线程池模型来减少task启动开稍,shuffle过程中避免不必要的sort操作以及减少磁盘IO操作

∙广泛的数据集操作类型

MapReduce由于其设计上的约束只适合处理离线计算,在实时查询和迭代计算上仍有较大的不足,而随着业务的发展,业界对实时查询和迭代分析有更多的需求,单纯依靠MapReduce框架已经不能满足业务的需求了。

Spark由于其可伸缩、基于内存计算等特点,且可以直接读写Hadoop上任何格式的数据,成为满足业务需求的最佳候选者。

应用Spark的成功案例

目前大数据在互联网公司主要应用在广告、报表、推荐系统等业务上。

在广告业务方面需要大数据做应用分析、效果分析、定向优化等,在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等。

这些应用场景的普遍特点是计算

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1