为什么我们需要Apache Spark

拥有大量数据,我们需要一种工具来快速消化它

Greg RakozyUnsplash拍摄的照片

数据无处不在。 IDC估计,2013年“数字宇宙”的大小为4.4 ZB(1万亿千兆字节)。目前,数字宇宙每年以40%的速度增长,而IDC预计到2020年,它的大小将达到44 ZB,相当于物理宇宙中每个恒星的单个数据。

我们有很多数据,但我们并没有摆脱任何数据。 我们需要一种方法来大规模存储越来越多的数据,并采取措施防止由于硬件故障而造成的数据丢失。 最后,我们需要一种通过快速反馈循环消化所有这些数据的方法。 感谢宇宙,我们拥有Hadoop和Spark。

为了演示Spark的有用性,让我们从一个示例数据集开始。 500 GB的样本天气数据包括: 国家|城市|日期|温度

假设我们要根据城市计算这些数据的最高温度,并且我们从本机Java程序开始,因为Java是您第二喜欢的编程语言:

Java解决方案

但是,在500 GB的大小下,即使如此简单的任务也需要花费近5个小时才能完成使用本机Java方法的过程。

“ Java很烂,我只是用Ruby编写,如果很快就可以开始使用,Ruby是我的最爱”

Ruby解决方案

但是,Ruby是您的最爱,并使其不再具备完成此任务的能力。 I / O根本不是Ruby的强项,因此Ruby查找最高温度的时间比Java还要长。

使用Apache MapReduce最好地解决按城市查找最高温度的问题(我敢打赌您以为我会说Spark)。 这就是MapReduce的亮点,将城市映射为键,将温度映射为值,与Java之前的5个小时相比,我们将在15分钟左右的时间内找到结果。

最大温度映射器
最高温度降低器

MapReduce是解决此问题的完美解决方案。 与本地Java解决方案相比,这种方法的运行速度要快得多,因为MapReduce框架在委派我们的工作人员群集中的地图任务方面表现出色。 行从我们的文件并行地馈送到每个集群节点,而它们却一次被馈送到我们本机Java的main方法中。

问题

计算每个国家/地区的最高温度本身就是一项新任务,但这并不是开创性的分析。 现实世界的数据带有繁琐的模式和复杂的分析,使我们朝着能够填补我们特定壁specific的工具的方向发展。

如果要求我们按国家和城市查找最高温度,而不是最高温度,然后又要按天细分此温度怎么办? 如果我们将其混合在一起并被要求找到平均温度最高的国家怎么办? 或者,如果您想找到温度从不低于58或不高于68的栖息地( 安塔那那利佛马达加斯加 ,看上去还不错)。

MapReduce在批处理数据方面表现出色,但是在重复分析和较小的反馈循环方面却落后。 在计算之间重用数据的唯一方法是将其写入外部存储系统(例如HDFS)。 MapReduce在缩减步骤之前,将每个作业写出其Maps的内容。 这意味着每个MapReduce作业都将完成一个在开始时定义的任务。

如果我们要进行上述分析,则需要三个单独的MapReduce作业:

  1. MaxTemperatureMapper,MaxTemperatureReducer,MaxTemperatureRunner
  2. MaxTemperatureByCityMapper,MaxTemperatureByCityReducer,MaxTemperatureByCityRunner
  3. MaxTemperatureByCityByDayMapper,MaxTemperatureByCityByDayReducer,MaxTemperatureByCityByDayRunner

很明显,这可以很容易地运行。

由于分布式文件系统的优点:复制,序列化以及最重要的是磁盘IO,因此MapReduce中的数据共享速度很慢。 许多MapReduce应用程序最多可以花费90%的时间从磁盘读取和写入数据。

认识到上述问题后,研究人员着手开发一种专门的框架,该框架可以完成MapReduce无法完成的任务:在跨连接机器集群的内存计算中。

Spark:解决方案

Spark为我们解决了这个问题。 Spark为我们提供了紧密的反馈循环,并允许我们以很少的开销快速处理多个查询。

可以将上述所有三个Mappers嵌入到同一个Spark作业中,如果需要,可以输出多个结果。 根据我们的特定工作要求,上面注释掉的行可以轻松地用于设置正确的密钥。

使用RDD的MaxTemperatureMapper的Spark实现

由于Spark 完全在内存中运行因此可比较的任务上,Spark的迭代速度也比MapReduce快10倍,因此它不必从磁盘写入/读取数据,这通常是缓慢而昂贵的操作。

Apache Spark是用于数据分析和转换的强大工具。 如果这篇文章引起了人们的关注,请继续关注:在接下来的几篇文章中,我们将逐步深入研究Apache Spark框架的来龙去脉。

From: https://hackernoon.com/why-we-need-apache-spark-51c8a57aa57a