如何将MapReduce转化为Spark

目前的大数据处理可以分为以下三个类型:

1、复杂的批量数据处理(batch data processing),通常的时间跨度在数十分钟到数小时之间;

2、基于历史数据的交互式查询(interactive query),通常的时间跨度在数十秒到数分钟之间;

3、基于实时数据流的数据处理(streaming data processing),通常的时间跨度在数百毫秒到数秒之间。

大数据处理势必需要依赖集群环境,而集群环境有三大挑战,分别是并行化、单点失败处理、资源共享,分别可以采用以并行化的方式重写应用程序、对单点失败的处理方式、动态地进行计算资源的分配等解决方案来面对挑战。

针对集群环境出现了大量的大数据编程框架,首先是 Google 的 MapReduce,它给我们展示了一个简单通用和自动容错的批处理计算模型。但是对于其他类型的计算,比如交互式和流式计算,MapReduce 并不适合。这也导致了大量的不同于 MapReduce 的专有的数据处理模型的出现,比如 Storm、Impala 等等。但是这些专有系统也存在一些不足:

1、重复工作:许多专有系统在解决同样的问题,比如分布式作业以及容错,举例来说,一个分布式的 SQL 引擎或者一个机器学习系统都需要实现并行聚合,这些问题在每个专有系统中会重复地被解决。

2、组合问题:在不同的系统之间进行组合计算是一件麻烦的事情。对于特定的大数据应用程序而言,中间数据集是非常大的,而且移动的成本很高。在目前的环境下,我们需要将数据复制到稳定的存储系统,比如 HDFS,以便在不同的计算引擎中进行分享。然而,这样的复制可能比真正的计算所花费的代价要大,所以以流水线的形式将多个系统组合起来效率并不高。

3、适用范围的局限性:如果一个应用不适合一个专有的计算系统,那么使用者只能换一个系统,或者重写一个新的计算系统。

4、资源分配:在不同的计算引擎之间进行资源的动态共享比较困难,因为大多数的计算引擎都会假设它们在程序运行结束之前拥有相同的机器节点的资源。

5、管理问题:对于多个专有系统,需要花费更多的精力和时间来管理和部署,尤其是对于终端使用者而言,需要学习多种 API 和系统模型。

Spark 是伯克利大学推出的大数据处理框架,它提出了 RDD 概念 (Resilient Distributed Datasets),即抽象的弹性数据集概念。Spark 是对 MapReduce 模型的一种扩展。要在 MapReduce 上实现其不擅长的计算工作 (比如迭代式、交互式和流式),是比较困难的,因为 MapReduce 缺少在并行计算的各个阶段进行有效的数据共享的能力,而这种能力是 RDD 的本质所在。利用这种有效地数据共享和类似 MapReduce 的操作接口,上述的各种专有类型计算都能够有效地表达,而且能够获得与专有系统同等的性能。

MapReduce 和 Spark 介绍

MapReduce

MapReduce 是为 Apache Hadoop 量身订做的,它非常适用于 Hadoop 的使用场景,即大规模日志处理系统、批量数据提取加载工具 (ETL 工具) 等类似操作。但是伴随着 Hadoop 地盘的不断扩张,Hadoop 的开发者们发现 MapReduce 在很多场景下并不是最佳选择,于是 Hadoop 开始把资源管理放入到自己独立的组件 YARN 里面。此外,类似于 Impala 这样的项目也开始逐渐进入到我们的架构中,Impala 提供 SQL 语义,能查询存储在 Hadoop 的 HDFS 和 HBase 中的 PB 级大数据。之前也有类似的项目,例如 Hive。Hive 系统虽然也提供了 SQL 语义,但由于 Hive 底层执行使用的是 MapReduce 引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala 的最大特点也是最大卖点就是它的效率。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180123B0XN2V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券