Hadoop进入寒冬期,崛起的会是Spark吗?

Hadoop在大数据领域享有多年垄断权,随着该领域开始出现新生力量,其统治地位正在逐渐下滑。年初的调查中,Hadoop被列为2018年大数据领域的“渐冻”趋势之一,Gartner的调查也揭示了Hadoop使用量的下滑,不少人将Hadoop称作“倒下的大象”,比如Lucidworks首席执行官Will Hayes.如果Hadoop开始进入寒冬期,率先崛起的会是呼声最高的Spark吗?

1

笔者曾经看过一个非常有趣的比喻,Hadoop是第一家大型包工队,可以组织一大堆人合作(HDFS)搬砖盖房(用MapReduce),但是速度比较慢。

Spark是另一家包工队,虽然成立得晚一些,但是他们搬砖很快很灵活,可以实时交互地盖房子,比Hadoop快得多。

Hadoop开始升级,指定调度专家YARN调度工人。Spark从多个仓库搬砖(HDFS,Cassandra,S3,HBase),还允许不同专家如YARN/ MESOS对人员和任务进行调度。

当然,他们两家并不是水火不容。Spark经常和Hadoop团队合作,这让问题变得更加复杂。不管怎么说,Spark和Hadoop都是两个独立的包工队,都有着各自的优缺点和特定的业务用例。

所以,最后,哪一家会胜出呢?

本文将从这两大系统的体系结构,性能,成本,安全性和机器学习能力等方面进行比较。

Hadoop是什么?

现在恐怕没有人会问“Hadoop是什么?”这个问题了,因为它实在是太火了!Hadoop在2006年开始成为雅虎项目,随后晋升为顶级Apache开源项目。它是一种通用的分布式系统基础架构,具有多个组件:Hadoop分布式文件系统(HDFS),它将文件以Hadoop本机格式存储并在集群中并行化; YARN,协调应用程序运行时的调度程序; MapReduce,这是实际并行处理数据的算法。Hadoop使用Java编程语言构建,其上的应用程序也可以使用其他语言编写。通过一个Thrift客户端,用户可以编写MapReduce或者Python代码。

2

除了这些基本组件外,Hadoop还包括Sqoop,它将关系数据移入HDFS; Hive,一种类似SQL的接口,允许用户在HDFS上运行查询; Mahout,机器学习。除了将HDFS用于文件存储之外,Hadoop现在还可以配置使用S3 buckets或Azure blob作为输入。

它可以通过Apache发行版开源,也可以通过Cloudera(规模和范围最大的Hadoop供应商),MapR或HortonWorks等厂商提供。

Spark是什么?

Spark是一个较新的项目,最初于2012年诞生在加州大学伯克利分校的AMPLab.它也是一个顶级Apache项目,专注于在集群中并行处理数据,最大的区别在于它在内存中运行。

类似于Hadoop读取和写入文件到HDFS的概念,Spark使用RDD(弹性分布式数据集)处理RAM中的数据。Spark以独立模式运行,Hadoop集群可用作数据源,也可与Mesos一起运行。在后一种情况下,Mesos主站将取代Spark主站或YARN以进行调度。

3

Spark是围绕Spark Core构建的,Spark Core是驱动调度,优化和RDD抽象的引擎,并将Spark连接到正确的文件系统(HDFS,S3,RDBM或Elasticsearch)。Spark Core上还运行了几个库,包括Spark SQL,允许用户在分布式数据集上运行类似SQL的命令,用于机器学习的MLLib,用于解决图形问题的GraphX以及允许输入连续流式日志数据的Streaming. Spark有几个API.原始界面是用Scala编写的,并且由于大量数据科学家的使用,还添加了Python和R接口。Java是编写Spark作业的另一种选择。

Databricks是由Spark创始人Matei Zaharia创立的公司,现在负责Spark开发并为客户提供Spark分销。

架构对比

Hadoop

首先,所有传入HDFS的文件都被分割成块。根据配置的块大小和复制因子,每个块在集群中被复制指定的次数。该信息被传递给NameNode,它跟踪集群中的所有内容。NameNode将这些文件分配给多个数据节点,然后将这些文件写入其中。在2012年被实施的高可用性允许NameNode故障转移到备份节点上,以跟踪集群中的所有文件。

MapReduce算法位于HDFS之上,由JobTracker组成。一旦应用程序以其中一种语言编写,Hadoop接受JobTracker,然后分配工作(可包括计算单词和清理日志文件等内容,以及在Hive仓库数据集之上运行HiveQL查询)到侦听其他节点的TaskTracker. YARN分配JobTracker加速并监控它们的资源,以提高效率。然后将所有来自MapReduce阶段的结果汇总并写入HDFS中的磁盘之上。