大数据开发之 Hadoop 家族都有谁
Hadoop 的整体架构
Hadoop 是一个用于大数据的架构解决方案。经过多年的开发演进,Hadoop 已成为一个庞大的系统,大数据培训它的内部工作机制非常复杂,是一个结合了分布式理论与具体的工程开发的整体架构。
关于 Hadoop 最朴素的原理,就是要使用大量的普通计算机处理大规模数据的存储和分析,而不是建造一台超级计算机。
这里有两个问题需要解决:
计算机的故障问题。想象我们使用一个有一万台计算机组成的集群,其中一台计算机出现问题的可能性是很高的,所以在大规模计算机集群上要处理好故障问题,就要做到一台计算机出现问题不会影响整个集群。
数据的依赖关系。集群由若干台计算机组成,数据也是分布在不同的计算机上面,当你需要计算一个任务的时候,你所需要的数据可能要从若干台计算机进行读取,而你的计算过程也要分配到不同的计算机上。当你的任务分成若干个步骤形成相互依赖的关系时,如何让系统保持高效和正确的运行是一个很大的问题。
Hadoop 系统的一个架构图。现在已经有了非常多的组件,但最核心的两部分依然是底层的文件系统 HDFS 和用于计算的 MapReduce。来看下 Hadoop 系统中的一些重要组成部分。
1.HDFS(分布式文件系统)
HDFS 是 Hadoop Distributed File System 的缩写,是一个文件系统。它在 Hadoop 体系中帮助解决文件的底层存储问题,支持海量数据的磁盘存储,进行机器的线性扩充,只需要在集群中增加节点,存储能力就会同步增长。
HDFS 具备非常强大的容错性能,某些节点出现了故障不影响系统的使用,通常数据都有很多的副本。HDFS 屏蔽了存储的细节,在客户端提供了一套完整的文件管理命令,把底层的文件以一种结构化的目录形式展现给用户,可以像使用 Linux 文件操作命令一样使用 Hadoop 命令来访问对应的文件。
2.MapReduce(分布式计算框架)
在 Hadoop 中的 MapReduce 框架就解决了分布式计算的问题,包括其中的运算逻辑与数据依赖。在 MapReduce 的应用上,提供了一套编程模型,重点就是实现 map 函数和 reduce 函数:
map 函数用于组织和分割数据;
reduce 函数主要负责在分布式节点上的数据运算。
MapReduce 编程支持多种语言实现,比如 Java、Scala 等。
3.Hive(数仓系统)
在 HDFS 之上,Hive 是 Hadoop 体系的数据仓库工具,可以将结构化的数据文件映射成一个数据表,注意这里的重点是结构化的数据文件。在 HDFS 文件系统中可以存储结构化数据文件,也可以存储非结构化数据文件,而 Hive 是处理其中的结构化数据文件,它本身并不进行存储。
Hive 提供了一套 Hive SQL 实现 MapReduce 计算,可以使用与 SQL 十分类似的 Hive SQL 对这些结构化的数据进行统计分析,从某种意义上来说 Hive 是对 MapReduce 进行包装后产生的工具。
Hive 是一个非常常用的数仓工具,很多公司都会把它当作基础数仓来使用。不过 Hive 也有一些不好用的地方,比如不能进行单条数据更新。
4.HBase(分布式数据库)
在存储方面,Hadoop 架构中还有一个 Hbase 数据库。HBase 是一个分布式高并发的 K-V 数据库系统,它的底层由 HDFS 来支撑,而 HBase 通过对存储内容的重新组织,克服了 HDFS 对小文件处理困难的问题,实现了数据的实时操作。
互联网公司中,对于量级较大变动较多的数据通常适合使用 HBase 进行存取。
5.Yarn(资源调度和管理框架)
在最早的 Hadoop 1.0 中其实是没有 Yarn 的,资源调度等功能都包装在 MapReduce 的 JobTracker 中。而 JobTracker 负担了太多的功能,接受任务、资源调度甚至是监控 TaskTracker 的运行情况。当时存在一个问题,在集群规模非常大的时候会出现不稳定的情况。在 2.0 中对其进行了拆分,产生了独立的 Yarn。拆分出 Yarn 之后,MapReduce 只负责计算,这也给后面其他计算框架替换 MapReduce 提供了方便,保障了 Hadoop 整个架构长盛不衰。
6.ZooKeeper(分布式协作服务)
ZooKeeper,直译是动物园管理员。这是因为很多项目都以动物的名字命名,而 ZooKeeper 最常用的场景是作为一个服务的注册管理中心。生产者把所提供的服务提交到 ZooKeeper 中,消费者则去 ZooKeeper 中寻找自己需要的服务,从中获取生产者的信息,然后再去调用生产者的服务。
Hadoop 的优缺点
在 Hadoop 的框架中还远远不止这些东西。不过最主要的、平时工作中接触最多的部分已经都有涉及。再看看 Hadoop 的一些优缺点。
Hadoop 的优点
强大的数据存储和处理能力。这个优点是显而易见的,也是最根本的。通过技术手段,Hadoop 实现了只需要增加一些普通的机器就可以获得强大的存储和运算能力。
隐藏了大量技术细节。使用 Hadoop 框架,不再需要关注那些复杂的并行计算、负载均衡等内容,只需要调用相关的 API 就可以实现大规模存储和计算。
良好的扩展能力。Hadoop 已经不是一个单一的解决方案,它提供了很多不同的组件,不限于我上面列出的这些。公司可以使用标准的方案,也可以根据自己的业务需求来进行细节上的调整甚至是自己的开发。比如说对于计算框架 MapReduce,在很多公司已经使用性能更好的 Spark 或者 Flink 进行了替换。
Hadoop 的缺点
实时性较差。由于 HDFS 存储底层都是在磁盘中进行的,以及原生的 MapReduce 的中间结果也都要存储在磁盘上,所以 Hadoop 的实时性不太好。
学习难度较大。虽然说 Hadoop 已经对很多复杂的技术进行了封装,但是仍然挡不住它是一个庞大而复杂的系统。尤其是其中的很多问题都需要在实践中不断摸索,要想学习整个体系几乎是很难在短时间内实现的。
虽然处理大数据的框架并不只 Hadoop 一种。但 Hadoop 是免费的开源的,且是当前应用最广泛的。它最强大的地方就在于能够利用最普通的机器解决了大规模数据存储和运算的问题。
原创作者:勾叔
评论