mapreduce V.S spark

上传人:飞*** 文档编号:4888517 上传时间:2017-08-27 格式:DOCX 页数:20 大小:79.59KB
返回 下载 相关 举报
mapreduce V.S spark_第1页
第1页 / 共20页
mapreduce V.S spark_第2页
第2页 / 共20页
mapreduce V.S spark_第3页
第3页 / 共20页
mapreduce V.S spark_第4页
第4页 / 共20页
mapreduce V.S spark_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《mapreduce V.S spark》由会员分享,可在线阅读,更多相关《mapreduce V.S spark(20页珍藏版)》请在金锄头文库上搜索。

1、作者:周明耀 出处:developerWorks 中国MapReduce VS Spark目前的大数据处理可以分为以下三个类型: 复杂的批量数据处理(batch data processing),通常的时间跨度在数十分钟到数小时之间; 基于历史数据的交互式查询(interactive query),通常的时间跨度在数十秒到数分钟之间; 基于实时数据流的数据处理(streaming data processing),通常的时间跨度在数百毫秒到数秒之间。大数据处理势必需要依赖集群环境,而集群环境有三大挑战,分别是并行化、单点失败处理、资源共享,分别可以采用以并行化的方式重写应用程序、对单点失败的处

2、理方式、动态地进行计算资源的分配等解决方案来面对挑战。针对集群环境出现了大量的大数据编程框架,首先是 Google 的 MapReduce,它给我们展示了一个简单通用和自动容错的批处理计算模型。但是对于其他类型的计算,比如交互式和流式计算,MapReduce 并不适合。这也导致了大量的不同于 MapReduce 的专有的数据处理模型的出现,比如 Storm、Impala 等等。但是这些专有系统也存在一些不足:1. 重复工作:许多专有系统在解决同样的问题,比如分布式作业以及容错,举例来说,一个分布式的 SQL 引擎或者一个机器学习系统都需要实现并行聚合,这些问题在每个专有系统中会重复地被解决。2

3、. 组合问题:在不同的系统之间进行组合计算是一件麻烦的事情。对于特定的大数据应用程序而言,中间数据集是非常大的,而且移动的成本很高。在目前的环境下,我们需要将数据复制到稳定的存储系统,比如 HDFS,以便在不同的计算引擎中进行分享。然而,这样的复制可能比真正的计算所花费的代价要大,所以以流水线的形式将多个系统组合起来效率并不高。3. 适用范围的局限性:如果一个应用不适合一个专有的计算系统,那么使用者只能换一个系统,或者重写一个新的计算系统。4. 资源分配:在不同的计算引擎之间进行资源的动态共享比较困难,因为大多数的计算引擎都会假设它们在程序运行结束之前拥有相同的机器节点的资源。5. 管理问题:

4、对于多个专有系统,需要花费更多的精力和时间来管理和部署,尤其是对于终端使用者而言,需要学习多种 API 和系统模型。Spark 是伯克利大学推出的大数据处理框架,它提出了 RDD 概念 (Resilient Distributed Datasets),即抽象的弹性数据集概念。Spark 是对 MapReduce 模型的一种扩展。要在 MapReduce 上实现其不擅长的计算工作 (比如迭代式、交互式和流式),是比较困难的,因为 MapReduce 缺少在并行计算的各个阶段进行有效的数据共享的能力,而这种能力是 RDD 的本质所在。利用这种有效地数据共享和类似 MapReduce 的操作接口,上

5、述的各种专有类型计算都能够有效地表达,而且能够获得与专有系统同等的性能。MapReduce 和 Spark 介绍MapReduceMapReduce 是为 Apache Hadoop 量身订做的,它非常适用于 Hadoop 的使用场景,即大规模日志处理系统、批量数据提取加载工具 (ETL 工具) 等类似操作。但是伴随着 Hadoop 地盘的不断扩张,Hadoop 的开发者们发现 MapReduce 在很多场景下并不是最佳选择,于是 Hadoop 开始把资源管理放入到自己独立的组件 YARN 里面。此外,类似于 Impala 这样的项目也开始逐渐进入到我们的架构中,Impala 提供 SQL 语

6、义,能查询存储在 Hadoop 的 HDFS 和 HBase 中的 PB 级大数据。之前也有类似的项目,例如 Hive。Hive 系统虽然也提供了 SQL 语义,但由于 Hive 底层执行使用的是 MapReduce 引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala 的最大特点也是最大卖点就是它的效率。第一代 Hadoop MapReduce 是一个在计算机集群上分布式处理海量数据集的软件框架,包括一个 JobTracker 和一定数量的 TaskTracker。运行流程图如图 1 所示。图 1. MapReduce 运行流程图在最上层有 4 个独立的实体,即客户端、j

7、obtracker、tasktracker 和分布式文件系统。客户端提交 MapReduce 作业;jobtracker 协调作业的运行;jobtracker 是一个 Java 应用程序,它的主类是 JobTracker;tasktracker 运行作业划分后的任务,tasktracker 也是一个 Java 应用程序,它的主类是 TaskTracker。Hadoop 运行 MapReduce 作业的步骤主要包括提交作业、初始化作业、分配任务、执行任务、更新进度和状态、完成作业等 6 个步骤。Spark 简介Spark 生态系统的目标就是将批处理、交互式处理、流式处理融合到一个软件框架内。Sp

8、ark 是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark 非常小巧玲珑,由加州伯克利大学 AMP 实验室的 Matei 为主的小团队所开发。使用的语言是 Scala,项目的 core 部分的代码只有 63 个 Scala 文件,非常短小精悍。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark 提供了基于内存的计算集群,在分析数据时将数据导入内存以实现快速查询,速度比基于磁盘的系统,如 Hadoop 快很多。Spark 最初是为了处理迭代算法,如机器学习、图挖掘算法等,以及交互式数据挖掘算法而开发的。在这两种场景下,Spa

9、rk 的运行速度可以达到 Hadoop 的几百倍。Spark 允许应用在内存中保存工作集以便高效地重复利用,它支持多种数据处理应用,同时也保持了 MapReduce 的重要特性,如高容错性、数据本地化、大规模数据处理等。此外,提出了弹性分布式数据集 (Resilient Distributed Datasets) 的概念:1. RDD 表现为一个 Scala 对象,可由一个文件创建而来;2. 分布在一个集群内的,不可变的对象切分集;3. 通过并行处理(map、filter、groupby 、join)固定数据(BaseRDD)创建模型,生成 Transformed RDD;4. 故障时可使用

10、RDD 血统信息重建;5. 可高速缓存,以便再利用。图 2 所示是一个日志挖掘的示例代码,首先将日志数据中的 error 信息导入内存,然后进行交互搜索。图 2. RDD 代码示例在导入数据时,模型以 block 形式存在于 worker 上,由 driver 向 worker 分发任务,处理完后 work 向 driver 反馈结果。也可在 work 上对数据模型建立高速缓存 cache,对 cache 的处理过程与 block 类似,也是一个分发、反馈的过程。Spark 的 RDD 概念能够取得和专有系统同样的性能,还能提供包括容错处理、滞后节点处理等这些专有系统缺乏的特性。1. 迭代算法

11、:这是目前专有系统实现的非常普遍的一种应用场景,比如迭代计算可以用于图处理和机器学习。RDD 能够很好地实现这些模型,包括 Pregel、HaLoop 和 GraphLab 等模型。2. 关系型查询:对于 MapReduce 来说非常重要的需求就是运行 SQL 查询,包括长期运行、数小时的批处理作业和交互式的查询。然而对于 MapReduce 而言,对比并行数据库进行交互式查询,有其内在的缺点,比如由于其容错的模型而导致速度很慢。利用 RDD 模型,可以通过实现许多通用的数据库引擎特性,从而获得很好的性能。3. MapReduce 批处理:RDD 提供的接口是 MapReduce 的超集,所以

12、 RDD 能够有效地运行利用 MapReduce 实现的应用程序,另外 RDD 还适合更加抽象的基于 DAG 的应用程序。4. 流式处理:目前的流式系统也只提供了有限的容错处理,需要消耗系统非常大的拷贝代码或者非常长的容错时间。特别是在目前的系统中,基本都是基于连续计算的模型,常住的有状态的操作会处理到达的每一条记录。为了恢复失败的节点,它们需要为每一个操作复制两份操作,或者将上游的数据进行代价较大的操作重放,利用 RDD 实现离散数据流,可以克服上述问题。离散数据流将流式计算当作一系列的短小而确定的批处理操作,而不是常驻的有状态的操作,将两个离散流之间的状态保存在 RDD 中。离散流模型能够

13、允许通过 RDD 的继承关系图进行并行性的恢复而不需要进行数据拷贝。Spark 内部术语解释Application:基于 Spark 的用户程序,包含了 driver 程序和集群上的 executor;Driver Program:运行 main 函数并且新建 SparkContext 的程序;Cluster Manager:在集群上获取资源的外部服务 (例如:standalone,Mesos,Yarn);Worker Node:集群中任何可以运行应用代码的节点;Executor:是在一个 worker node 上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上。

14、每个应用都有各自独立的 executors;Task:被送到某个 executor 上的工作单元;Job:包含很多任务的并行计算,可以与 Spark 的 action 对应;Stage:一个 Job 会被拆分很多组任务,每组任务被称为 Stage(就像 Mapreduce 分 map 任务和 reduce 任务一样)。SparkDemo 程序运行Spark 源代码可以在 http:/spark-project.org/download 处下载,也可以到 github 直接复制 Spark 项目。Spark 提供基本源码压缩包,同时也提供已经编译好的压缩包。Spark 是通过 Scala She

15、ll 来与外界进行交互的。开始安装,推荐的方法是首先在第一个节点上部署和启动 master,获取 master spark url,然后在部署到其他节点之前修改 conf/spark-env.sh 中的内容。开始单机 master 服务:./bin/start-master.sh下载了 spark-0.9.1-bin-cdh4 后上传到/home/zhoumingyao 目录 (可以自定义目录,本例使用的是 CentosV6.5 操作系统) 下,具体子目录如清单 1 所示。清单 1. 目录列表-rw-r-r- 1 root root 3899 3 月 27 13:36 README.md-rw

16、-r-r- 1 root root 25379 3 月 27 13:36 pom.xml-rw-r-r- 1 root root 162 3 月 27 13:36 NOTICE-rw-r-r- 1 root root 4719 3 月 27 13:36 make-distribution.sh-rw-r-r- 1 root root 21118 3 月 27 13:36 LICENSE-rw-r-r- 1 root root 127117 3 月 27 13:36 CHANGES.txtdrwxr-xr-x 4 root root 4096 5 月 6 13:35 assemblydrwxr-xr-x 4 root root 4096 5 月 6 13:36 bageldrwxr-xr-x 2 root root 4096 5 月 6 13:36 bindrwxr-xr-x 2 root root 4096 5 月 6 13:36 confdrwxr-x

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号