最近在知乎上面看到这样一个问题:Hadoop 和大数据的关系?和 Spark 的关系?
刚好我个人是大数据引擎开发,所以对于 Hadoop 也算比较了解,所以今天我就来分享一下我的看法。
01、我的回答
Enjoy life
A HAPPY LIFE AFTER RAIN
先说结论,Hadoop 属于大数据技术这个领域的一个分支,它真正开启了大数据技术到工业使用的普惠时代,你现在听到的 Hadoop 这一词,一般情况是指 Hadoop 这个技术生态,它不再局限于 Hadoop 原先自身已有的技术,而是指建立在这个基础之上的其他所有相关的技术,比如 Spark、Hive、HDFS、Yarn、HBase、Zookeeper 等等。所以 Spark 你可以理解为它是 Hadoop 生态技术的一部分。
在 Hadoop 出来之前,国内真正用大数据技术的公司很少,你可能只会听到国内一堆人在那鼓吹大数据,但实际用大数据技术来解决业务问题的工业实践却很少。国外也主要是谷歌内部在用,毕竟人家全球搜索的数据量太大,也是业务趋势所需。
part1
「Hadoop 是什么?」
Hadoop 是 2006 年由道格卡丁(Doug Cutting)开源出来分布式计算平台,其前身是Apache Lucene 子项目 Nutch 的一部分。
Hadoop 框架之所以能够开源能出来,其设计思想很大程度上借鉴了谷歌三驾马车论文的思想,Hadoop MapReduce 计算框架借鉴了谷歌《MapReduce: Simplified Data Processing on Large Clusters》这篇论文,Hadoop HDFS 则是借鉴了谷歌《The Google File System》这篇论文,后面 Doug Cutting 结合这两篇论文的思想,开发出今天的 Hadoop MapReduce 计算框架 和 HDFS(Hadoop Distributed File System), 不得不说,谷歌对于大数据领域的贡献,还是真的有东西的。
Hadoop 主要包含三部分:MapReduce 分布式任务计算模型、HDFS 分布式文件系统、Yarn 资源管理框架。
MapReduce 任务框架,它把大数据计算任务分为了 Map 任务和 Reduce 任务,用户在开发大数据任务时,只需要开发 Map 任务的逻辑和 Reduce 任务逻辑即可。这种编程模型简化了开发大数据任务复杂度,不过后面随着 Hive 出来,用户直接使用 SQL 来开发 Hadoop 任务,这种开发模型几乎也没有人使用了。
HDFS 分布式文件系统,主要是将文件分为 Block 来进行存放,一个 Block 一般是 256 MB,副本存放数一般是 3,主要是为了防止文件损坏,而进行容错。HDFS 一般有两类节点:NameNode 和 DataNode,NameNode 管理文件的元数据,DataNode 则是实际数据文件的存放节点。
Yarn 则是 Hadoop 的计算资源管理框架,它既可以运行 Hadoop MapReduce 任务,也可以运行 Spark 任务,同时也可以运行 Apache Flink 任务,它是以 Container 来封装具体申请的资源,比如一个 Container 的内存为 4096 MB,CPU 为 2 Core(软隔离),一个任务申请 4 个 Container。现在企业逐渐开始使用 K8S 来管理资源,核心还是为了公司机器资源管理的统一。
Spark 本质是一种计算框架,其内置了 SQL、流式传输和计算、机器学习和图处理模块。它没有实际的数据存储层,所以它的数据源一般来自于外部。用户可以使用 SQL 来编写 Spark 计算任务,同时也可以使用 Java、Scala、Python 来编写 Spark 计算任务。
Spark 计算框架相对于 Hadoop MapReduce 任务最大的一个区别,就是它可以在内存中存储 Shuffle 的数据,而 Hadoop MapReduce 则需要将 Shuffle 的数据放到磁盘,由于内存和磁盘在读取和写入不是一个量级,所以 Spark 计算任务比 Hadoop MapReduce 快的非常多,一般企业现在离线作业方面,都是使用的 Spark。
最后寄语
如果我的文章对你有启发的,欢迎点赞、在看、关注我,你的鼓励,是我更新的动力。