【转载】Hadoop,HDFS,Map Reduce,Spark,Hive,Yarn 和他们之间的关系

本贴最后更新于 1755 天前,其中的信息可能已经斗转星移

Hadoop

Hadoop 生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。

你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。

你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,

虽然奇怪的组合也能工作,但是未必是最佳选择。

Hadoop 不是一个单一的工具,也不是一种单一的技术,而是一系列技术和工具的合集。

HDFS

传统的文件系统是单机的,不能横跨不同的机器。

HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。

比如你说我要获取/hdfs/tmp/file1 的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。

你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS 为你管理这些数据。

Map Reduce

虽然 HDFS 可以为你整体管理不同机器上的数据,但是这些数据太大了。

一台机器读取成 T 上 P 的数据,也许需要好几天甚至好几周。

对于很多公司来说,单机处理是不可忍受的。

如果要用很多台机器处理,我就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,

机器之间如何互相通信交换数据以完成复杂的计算等等。

这就是 MapReduce / Tez / Spark 的功能。

举个例子,所有的书籍信息都存放在 HDFS 上,我需要统计每个单词的出现次数(经典的 wordcount 任务)。我们可以理解为在一千台电脑上,每一台上面都存放了很多的书的具体信息,在 map 阶段,我们让每一台电脑都统计这台电脑上面的书中的单词的出现次数,得到中间结果。在 reduce 阶段,我们让某些电脑综合所有电脑统计的中间结果,例如 hello 在第一台电脑出现了 5 次,在第二台电脑出现了 3 次,等等等等,那么在所有的电脑上就是出现了 3+5+...次,最终把结果汇总返回给调用者。

Spark

第二代的 Tez 和 Spark 除了内存 Cache 之类的新 feature,本质上来说,是让 Map/Reduce 模型更通用,让 Map 和 Reduce 之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量。

有了 MapReduce,Tez 和 Spark 之后,程序员发现,MapReduce 的程序写起来真麻烦。

他们希望简化这个过程。这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。

之前的 Map Reduce 类似于汇编语言,那么现在的 spark 就类似于 python 了,功能和 Map Reduce 类似,但是对于开发人员更加的友好,更方便使用。

Hive

你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了 Hive。

Hive 用 SQL 描述 MapReduce。它把脚本和 SQL 语言翻译成 MapReduce 程序,丢给计算引擎去计算,而你就从繁琐的 MapReduce 程序中解脱出来,用更简单更直观的语言去写程序了。

之前直接利用 spark 需要处理 map 和 reduce 的过程对于使用者来说都是隐形的了,就像使用本地数据库一样使用大数据文件。

例如之前的 wordcount 任务来说,通过 hive,我们可以通过几句 SQL 语句就可以达到类似的目的。类似于:

select word, count(*) from word_table group by word;

SqarkSQL 和 Hive on Spark

自从数据分析人员开始用 Hive 分析数据之后,它们发现,Hive 在 MapReduce 上跑,很慢!

它们的设计理念是,MapReduce 慢,但是如果我用新一代通用计算引擎 Tez 或者 Spark 来跑 SQL,那我就能跑的更快。

而且用户不需要维护两套系统。

这就好比如果你厨房小,人又懒,对吃的精细程度要求有限,那你可以买个电饭煲,能蒸能煲能烧,省了好多厨具。

Yarn

有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。

现在最流行的是 Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。

只要大家都服从你妈分配,那大家都能愉快滴烧菜。

最后

上面的介绍,基本就是一个数据仓库的构架了。底层 HDFS,上面跑 MapReduce/Tez/Spark,再在上面跑 Hive。

对于一个算法工程师来说,平时接触比较多的就是 spark 和 hive。spark 一般用来对于数据进行一次性提取,得到训练数据等。hive 一般用来创建日常任务加到公司里面的调度系统中,每天都可以得到相对应分区的数据。

转载于知乎:https://zhuanlan.zhihu.com/p/52704422 ,有少量修改。

  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 概述
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...