`
wangmengbk
  • 浏览: 292170 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spark与Shark的原理

阅读更多

1.Spark生态圈

如下图所示为Spark的整个生态圈,最底层为资源管理器,采用Mesos、Yarn等资源管理集群或者Spark 自带的Standalone模式,底层存储为文件系统或者其他格式的存储系统如HBase。Spark作为计算框架,为上层多种应用提供服务。 Graphx和MLBase提供数据挖掘服务,如图计算和挖掘迭代计算等。Shark提供SQL查询服务,兼容Hive语法,性能比Hive快3-50 倍,BlinkDB是一个通过权衡数据精确度来提升查询晌应时间的交互SQL查询引擎,二者都可作为交互式查询使用。Spark Streaming将流式计算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。



 2.Spark基本原理

Spark运行框架如下图所示,首先有集群资源管理服务(Cluster Manager)和运行作业任务的结点(Worker Node),然后就是每个应用的任务控制结点Driver和每个机器节点上有具体任务的执行进程(Executor)。



 
与MR计算框架相比,Executor有二个优点:一个是多线程来执行具体的任务,而不是像MR那样采用进程模型, 减少了任务的启动开稍。二个是Executor上会有一个BlockManager存储模块,类似于KV系统(内存和磁盘共同作为存储设备),当需要迭代 多轮时,可以将中间过程的数据先放到这个存储系统上,下次需要时直接读该存储上数据,而不需要读写到hdfs等相关的文件系统里,或者在交互式查询场景 下,事先将表Cache到该存储系统上,提高读写IO性能。另外Spark在做Shuffle时,在Groupby,Join等场景下去掉了不必要的 Sort操作,相比于MapReduce只有Map和Reduce二种模式,Spark还提供了更加丰富全面的运算操作如 filter,groupby,join等。

 

 Notes: 在集群(cluster)方式下, Cluster Manager运行在一个jvm进程之中,而worker运行在另一个jvm进程中。在local cluster中,这些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

 

 

Spark采用了Scala来编写,在函数表达上Scala有天然的优势,因此在表达复杂的机器学习算法能力比其他 语言更强且简单易懂。提供各种操作函数来建立起RDD的DAG计算模型。把每一个操作都看成构建一个RDD来对待,而RDD则表示的是分布在多台机器上的 数据集合,并且可以带上各种操作函数。如下图所示:



 首先从hdfs文件里读取文本内容构建成一个RDD,然后使用filter()操作来对上次的RDD进行过滤,再使 用map()操作取得记录的第一个字段,最后将其cache在内存上,后面就可以对之前cache过的数据做其他的操作。整个过程都将形成一个DAG计算 图,每个操作步骤都有容错机制,同时还可以将需要多次使用的数据cache起来,供后续迭代使用.

 

3.Shark的工作原理

Shark是基于Spark计算框架之上且兼容Hive语法的SQL执行引擎,由于底层的计算采用了Spark,性 能比MapReduce的Hive普遍快2倍以上,如果是纯内存计算的SQL,要快5倍以上,当数据全部load在内存的话,将快10倍以上,因此 Shark可以作为交互式查询应用服务来使用。

 上图就是整个Shark的框架图,与其他的SQL引擎相比,除了基于Spark的特性外,Shark是完全兼容Hive的语法,表结构以及UDF函数等,已有的HiveSql可以直接进行迁移至Shark上。


与Hive相比,Shark的特性如下:

1.以在线服务的方式执行任务,避免任务进程的启动和销毁开稍,通常MapReduce里的每个任务都是启动和关闭进程的方式来运行的,而在Shark中,Server运行后,所有的工作节点也随之启动,随后以常驻服务的形式不断的接受Server发来的任务。

2.Groupby和Join操作不需要Sort工作,当数据量内存能装下时,一边接收数据一边执行计算操作。在Hive中,不管任何操作在Map到Reduce的过程都需要对Key进行Sort操作。

3.对于性能要求更高的表,提供分布式Cache系统将表数据事先Cache至内存中,后续的查询将直接访问内存数据,不再需要磁盘开稍。

4.还有很多Spark的特性,如可以采用Torrent来广播变量和小数据,将执行计划直接传送给Task,DAG过程中的中间数据不需要落地到Hdfs文件系统。

  • 大小: 124.8 KB
  • 大小: 40.2 KB
  • 大小: 131.5 KB
  • 大小: 113.2 KB
分享到:
评论

相关推荐

    spark内部原理介绍

    处理SQL的Shark;和处理分布式流的Spark Streaming。我们使用了真实的用户应用案例和传统的基准测试来评估这些系统。我们的实现为传统和新的数据分析工作提供了很好的性能,并成为第一个使得用户可以组合这些计算任务...

    Spark大数据技术原理与实践.pptx

    Spark大数据技术原理与实践主要涵盖了以下几个关键知识点: 1. **Spark简介**: Spark是由AMPLAB开发并贡献给Apache社区的开源项目,是AMP大数据栈的重要组成部分。它设计为一个分布式批处理系统和分析挖掘引擎,...

    shark1.1-2-src

    4. 教学与研究:Shark 1.1-2的源代码也是教学和研究的理想素材,它为理解分布式数据库系统和SQL查询引擎的内部工作原理提供了实例。 总之,Shark 1.1-2的源代码是一份珍贵的学习资源,对于想要深入理解大数据处理、...

    Chapter6-_-大数据处理技术Spark-第6章-Spark-SQL_1

    本章重点介绍了Spark SQL的功能、设计原理以及它与RDD的区别,同时探讨了Spark SQL推出的背景和原因。 6.1 Spark SQL简介 Spark SQL是Apache Spark的一个重要组件,它提供了对结构化数据的处理能力,允许用户使用...

    hfut操作系统22级分布式课程作业

    Spark Streaming的基本设计原理是:接收实时输入数据流,然后将数据拆分成多个batch,每个batch交给Spark的计算引擎进行处理,最后生产出一个结果数据流。Spark Streaming广泛应用于实时数据处理、机器学习和数据...

    五分钟学大数据-SparkSQL底层执行原理

    与传统的MapReduce相比,Spark的一大特点是支持内存计算,这大大提升了数据处理的速度。此外,Spark还具有高容错性和高可伸缩性的特点,可以轻松部署在各种硬件设备上形成集群。 #### 二、Spark SQL的发展历程 ###...

    SparkSql技术

    随着Spark社区的发展壮大和技术的进步,Spark团队决定推出一个全新的SQL处理框架——SparkSQL,以取代Shark。SparkSQL不仅继承了Shark的优点,如内存列存储(In-Memory Columnar Storage)和Hive兼容性,还克服了Shark...

    Spark入门简介

    Spark 提供了一种快速、通用且可扩展的计算模型,与传统的Hadoop MapReduce相比,它在处理迭代算法和交互式数据挖掘时表现出更高的效率。Spark 最初由加州大学伯克利分校的AMP实验室开发,现在已成为大数据分析领域...

    Learning.Apache.Kafka.2nd.Edition.2015.2.pdf

    Nishant Garg拥有超过14年的软件架构与开发经验,在多种技术领域有着丰富的实践经验,包括Java企业版、SOA、Spring框架、Hadoop生态系统(如Hive、Flume、Sqoop、Oozie、Spark、Shark、YARN、Impala)、Apache Storm...

    大数据机器学习的应用架构实战-何锐邦

    这些基础设施支持了多种计算框架和存储系统,如MapReduce、MPI、Storm、Spark Streaming、Hive、Impala、Spark Shark、Kafka、Kestrel、HDFS、HBase、Memcached、Cassandra和Redis等。 在此之上,是一个由离线计算...

Global site tag (gtag.js) - Google Analytics