1.2 Hadoop 3.0
Hadoop 3.0没有在架构上对Hadoop 2.0进行大的改动,而是将精力放在了如何提高系统的可扩展性和资源利用率上,因此Hadoop 3.0提供了更高的性能、更强的容错能力以及更高效的数据处理能力。
在提高可扩展性方面,Hadoop 3.0为YARN提供了Federation,使其集群规模可以达到上万台。此外,它还为NameNode提供了多个Standby NameNode,这使得NameNode又多了一份保障。
在提高资源利用率方面,Hadoop 3.0对HDFS和YARN都做了调整。HDFS增加了纠删码副本策略,与原先的副本策略相比,该策略可以提高存储资源的利用率,用户可以针对具体场景选择不同的存储策略。YARN作为一个资源管理平台,当然重视资源的利用率,它增加了很多新功能。例如,为了更好地区分集群中各机器的特性,新增了Node Attribute功能,此功能与Node Label不同,具体的细节会在3.4.3节中介绍。由于越来越多的框架运行在YARN上,为了更好地进行资源隔离,YARN丰富了原先的container放置策略等,具体可以参考官网。
另外,Hadoop 3.0中还新增了两个成员,分别是Hadoop Ozone和Hadoop Submarine。Hadoop Ozone是一个对象存储方案,在一定程度上可以缓解HDFS集群中小文件的问题。Hadoop Submarine是一个机器学习引擎,可使TensorFlow或者PyTorch运行在YARN中。
Hadoop 3.0整个工程包含6个模块,具体如下。
- Hadoop Common。这是将其他模块中的公共部分抽象出来并整理成的一个模块,它为Hadoop提供一些常用工具,主要包括配置工具包Configuration、抽象文件系统包FileSystem、远程调用包RPC以及用于指标检测的jmx和metrics2包,还有一些其他公共工具包。
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)。Hadoop有一个综合性的、抽象的文件系统概念,提供了很多文件系统的接口,一般使用URI方案来选取其中合适的文件系统实例进行交互。Java抽象类
org.apache.hadoop.fs.FileSystem
展示了其中的一个文件系统,该系统有几个具体的实现,而HDFS只是这些实现中的一个。HDFS是Hadoop的旗舰级文件系统,以流式数据访问模式存储超大文件,是一个高吞吐量的分布式文件系统。HDFS的设计场景是一次写入,多次读取。因为它认为一个数据集的获取过程通常是先由数据源生成数据集,接着对该数据集进行各种各样的分析,每个分析至少会读取此数据集中的大部分数据,所以HDFS的流式数据访问模式可以提高吞吐量。此外,HDFS还具有高度容错性,能够自动检测和应对硬件故障。
Hadoop YARN。YARN是从JobTracker的资源管理功能中独立出来,形成的一个用于作业调度和资源管理的框架。作为一个通用的资源管理平台,YARN将container作为资源划分的最小单元,所划分的资源包括CPU和内存。YARN能够支持各种计算引擎,例如支持离线处理的MapReduce、支持迭代计算和微批处理的Spark以及支持实时处理的Flink,它还提供了接口以便让用户实现自定义的分布式应用。
YARN作为Hadoop的一个模块,与HDFS有着天然的兼容性。它将应用都集成到统一的资源管理平台中,一方面使得应用之间能够轻松地实现数据共享,避免了多个集群的冗余存储或者跨集群数据复制;另一方面,多个计算引擎集中在一个集群中既能够减轻运维,也能更好地利用资源,避免在某一时刻某些集群的计算资源比较紧张而其他集群的资源比较空闲。
Hadoop MapReduce。MapReduce是一种基于YARN的大数据分布式并行计算模型,它将整个计算过程分为Map和Reduce两个任务:Map任务从输入的数据集中读取数据,并对取出的数据进行指定的逻辑处理,然后生成键值对形式的中间结果,并将该结果写入本地磁盘;Reduce任务从Map任务输出的中间结果中读取相应的键值对,然后进行聚合处理,最后输出结果。
MapReduce主要用于对大规模数据进行离线计算。一个完整的MapReduce作业由n个Map任务和m个Reduce任务组成,出于对性能优化的考虑,n>m。另外,对于某些特定的场景,可以对Map任务使用的combiner个数进行优化以减少它的输出数据。至于Reduce任务要读取哪些数据,这是由Map任务的分区策略决定的,默认是散列分区策略,也可根据需要自定义。
Hadoop Ozone。这是专门为Hadoop设计的、由HDDS(Hadoop Distributed Data Store)构建成的可扩展的分布式对象存储系统。对它的介绍详见2.6节。
- Hadoop Submarine。这是一个机器学习引擎,可以运行TensorFlow、PyTorch、MXNet等框架,可以运行在YARN、Kubernetes等资源管理平台之上。Hadoop Submarine随后的开发计划还包含算法开发、模型增量训练以及模型管理,这使得基础研发工程师和数据分析师都能运行深度学习算法。
其中最后两个模块是新增的,它们正处在开发中,之后会使Hadoop更加强大。Hadoop Ozone已有正式发行版,目前版本是1.0.0,已经可以进行测试、调研、使用。而Hadoop Submarine还没有对外公布任何版本,在Hadoop 3.2中并没有该模块。