选Hadoop还是Spark?看完这篇文章你就清楚了

Posted ItStar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选Hadoop还是Spark?看完这篇文章你就清楚了相关的知识,希望对你有一定的参考价值。

市场上每天都会出现各种不同的数据管理规模、类型与速度表现的分布式系统。如今的大数据行业中,Spark 和 hadoop 是获得最大关注的两个分布式系统。然而该怎么判断哪一款适合你?


如果想批处理流量数据,并将其导入 HDFS 或使用 Spark Streaming 是否合理? 如果想要进行机器学习和预测建模,Mahout 或 MLLib 会更好地满足您的需求吗?

为了增加混淆,Spark 和 Hadoop 经常与位于 HDFS,Hadoop 文件系统中的 Spark 处理数据一起工作。但是,它们都是独立个体,每一个体都有自己的优点和缺点以及特定的商业案例。


本文将从以下几个角度对 Spark 和 Hadoop 进行对比:体系结构,性能,成本,安全性和机器学习。


01

什么是 Hadoop?

Hadoop 在 2006 年开始成为雅虎项目,随后成为顶级的 Apache 开源项目。它是一种通用的分布式处理形式,具有多个组件:


HDFS(分布式文件系统),它将文件以 Hadoop 本机格式存储,并在集群中并行化;

YARN,协调应用程序运行时的调度程序;

MapReduce,实际并行处理数据的算法。


Hadoop 使用 Java 搭建,可通过多种编程语言访问,用于通过 Thrift 客户端编写 MapReduce 代码 (包括 Python)。除了这些基本组件外,Hadoop 还包括:


Sqoop,它将关系数据移入 HDFS;

Hive,一种类似 SQL 的接口,允许用户在 HDFS 上运行查询;

Mahout,机器学习。


除了将 HDFS 用于文件存储之外,Hadoop 现在还可以配置为使用 S3 存储桶或 Azure blob 作为输入。它可以通过 Apache 发行版开源,也可以通过 Cloudera(规模和范围最大的 Hadoop 供应商),MapR 或 HortonWorks 等厂商提供。


02

什么是 Spark?

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


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


Spark 是围绕 Spark Core 搭建的,Spark Core 是驱动调度,优化和 RDD 抽象的引擎,并将 Spark 连接到正确的文件系统 (HDFS,S3,RDBM 或 Elasticsearch)。有几个库在 Spark Core 上运行,包括 Spark SQL,它允许在分布式数据集上运行类似 SQL 的命令,用于机器学习的 MLLib,用于图形问题的 GraphX 以及允许连续流式传输的流式传输记录数据。


Spark 有几个 API。原始界面是用 Scala 编写的,基于数据科学家的大量使用,还添加了 Python 和 R 端点。 Java 是编写 Spark 作业的另一种选择。


Databricks 由也 Spark 创始人 Matei Zaharia 创建的,致力于提供基于 Spark 的云服务,可用于数据集成,数据管道等任务


 

1. 架构

 

Hadoop

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


MapReduce 算法位于 HDFS 之上,由 JobTracker 组成。一旦应用程序以其中一种语言编写,Hadoop 接受 JobTracker,然后分配工作 (可包括计算单词和清理日志文件的任何内容),以便在存储在 Hive 仓库中的数据之上运行 HiveQL 查询) 到侦听其他节点的 TaskTracker。


YARN 分配 JobTracker 加速并监控它们的资源,以提高效率。然后将所有来自 MapReduce 阶段的结果汇总并写入 HDFS 中的磁盘。


Spark

除了计算在内存中执行并在那里存储直到用户积极保存它们之外,Spark 处理的工作方式与 Hadoop 类似。最初,Spark 从 HDFS,S3 或其他文件存储中的文件读取到名为 SparkContext 的已建立机制。除此之外,Spark 创建了一个名为 RDD 或弹性分布式数据集的结构,它表示一组可并行操作的元素的不可变集合。


随着 RDD 和相关操作的创建,Spark 还创建了一个 DAG 或有向无环图,以便可视化 DAG 中的操作顺序和操作之间的关系。每个 DAG 都有阶段和步骤; 通过这种方式,它与 SQL 中的解释计划类似。


您可以对 RDD 执行转换,中间步骤,操作或最终步骤。给定转换的结果进入 DAG,但不会保留到磁盘,但操作的结果会将内存中的所有数据保留到磁盘。


Spark 中的一个新抽象是 DataFrames,它是在 Spark 2.0 中作为 RDD 的配套接口开发的。这两者非常相似,但 DataFrames 将数据组织成命名列,类似于 Python 的熊猫或 R 包。这使得它们比 RDD 更方便用户,RDD 没有类似的一系列列级标题引用。 SparkSQL 还允许用户像关系数据存储中的 SQL 表一样查询 DataFrame。


 

2. 性能

 

发现 Spark 在内存中运行速度快 100 倍,在磁盘上运行速度快 10 倍。在十分之一的机器上,它也被用于对 100 TB 数据进行排序,比 Hadoop MapReduce 快 3 倍。特别发现 Spark 在机器学习应用中更快,例如朴素贝叶斯和 k-means。


由处理速度衡量的 Spark 性能已经发现比 Hadoop 更优,原因如下:


每次运行 MapReduce 任务的选定部分时,Spark 都不会受到输入输出问题的束缚。事实证明,应用程序的速度要快得多


Spark 的 DAG 可以在步骤之间进行优化。 Hadoop 在 MapReduce 步骤之间没有任何周期性连接,这意味着在该级别不会发生性能调整。


但是,如果 Spark 与其他共享服务在 YARN 上运行,则性能可能会降低并导致 RAM 开销内存泄漏。出于这个原因,如果用户有批处理的用例,Hadoop 被认为是更高效的系统。


 

3. 成本

 

Spark 和 Hadoop 都可以作为开源 Apache 项目免费获得,这意味着您可以以零安装成本运行它。但是,重要的是要考虑总体拥有成本,其中包括维护,硬件和软件购买以及雇用了解群集管理的团队。内部安装的一般经验法则是 Hadoop 需要更多的磁盘内存,而 Spark 需要更多的内存,这意味着设置 Spark 集群可能会更加昂贵。此外,由于 Spark 是较新的系统,因此它的专家更为稀少,而且成本更高。另一种选择是使用供应商进行安装,例如 Cloudera for Hadoop 或 Spark for DataBricks,或使用 AWS 在云中运行 EMR / Mapreduce 流程。


由于 Hadoop 和 Spark 是串联运行的,即使在配置为在安装 Spark 的情况下运行的 EMR 实例上,也可以将提取定价比较分离出来。对于非常高级别的比较,假设您为 Hadoop 选择计算优化的 EMR 群集,最小实例 c4.large 的成本为每小时 0.026 美元。 Spark 最小的内存优化集群每小时成本为 0.067 美元。因此,Spark 每小时更昂贵,但对计算时间进行优化,类似的任务应该在 Spark 集群上花费更少的时间。


 

4. 安全性

 

Hadoop 具有高度容错性,因为它旨在跨多个节点复制数据。每个文件都被分割成块,并在许多机器上复制无数次,以确保如果单台机器停机,可以从别处的其他块重建文件。


Spark 的容错主要是通过 RDD 操作来实现的。最初,静态数据存储在 HDFS 中,通过 Hadoop 的体系结构进行容错。随着 RDD 的建立,谱系也是如此,它记住了数据集是如何构建的,并且由于它是不可变的,如果需要可以从头开始重建。跨 Spark 分区的数据也可以基于 DAG 跨数据节点重建。数据在执行器节点之间复制,如果执行器和驱动程序之间的节点或通信失败,通常可能会损坏数据。


Spark 和 Hadoop 都可以支持 Kerberos 身份验证,但 Hadoop 对 HDFS 具有更加细化的安全控制。 Apache Sentry 是一个用于执行细粒度元数据访问的系统,是另一个专门用于 HDFS 级别安全性的项目。


Spark 的安全模型目前很少,但允许通过共享密钥进行身份验证。


 

5. 机器学习

 

Hadoop 使用 Mahout 来处理数据。 Mahout 包括集群,分类和基于批处理的协作过滤,所有这些都在 MapReduce 之上运行。目前正在逐步推出支持 Scala 支持的 DSL 语言 Samsara,允许用户进行内存和代数操作,并允许用户编写自己的算法。


Spark 有一个机器学习库 MLLib,用于内存迭代机器学习应用程序。它可用于 Java,Scala,Python 或 R,包括分类和回归,以及通过超参数调整构建机器学习管道的能力。


03

总结

那么它是 Hadoop 还是 Spark? 这些系统是目前市场上处理数据最重要的两个分布式系统。 Hadoop 主要用于使用 MapReduce 范例的大规模磁盘操作,而 Spark 则是一种更灵活,但成本更高的内存处理架构。两者都是 Apache 的顶级项目,经常一起使用,并且有相似之处,但在决定使用它们时,了解每个项目的特征是非常重要的。




以上是关于选Hadoop还是Spark?看完这篇文章你就清楚了的主要内容,如果未能解决你的问题,请参考以下文章

新飞Q1投影仪和哈趣H1投影仪怎么选?看完这篇你就知道了!

程序员这条路,技术往深度走还是广度走会比较好?看完这篇文章你就明白了

看完这篇还不清楚Netty的内存管理,那我就哭了!

MAC上的爬虫软件怎么选?看完这篇就够了

微服务架构复杂吗?全新角度详解,看完这篇你就明白了!

如何使用Python爬取数据?看完这篇文章你就懂了!