📜  Hadoop 3.0 版 – 有什么新变化?

📅  最后修改于: 2021-10-27 06:46:15             🧑  作者: Mango

Hadoop 是一个用Java编写的框架,用于解决大数据问题。 Hadoop 的初始版本于 2006 年 4 月发布。从 Hadoop 在市场上的第一个发布之日起,Apache 社区就发生了许多变化。 Hadoop 的旅程始于 2005 年,由 Doug Cutting 和 Mike Cafarella 发起。开发 Hadoop 背后的原因是为了支持Nutch 搜索引擎项目的分发。

Hadoop 在 2008 年征服了超级计算机,成为人类有史以来对存储的 TB 级数据进行排序的最快系统。 Hadoop 已经取得了长足的进步,并且已经适应了其先前版本(即 Hadoop 2.x)的许多变化。在本文中,我们将讨论 Apache 对 Hadoop 3.x 版所做的更改,以使其更高效、更快。

Hadoop 3.0 有哪些新变化?

1、JDK 8.0是Hadoop 3.x支持的最低Java版本

由于Oracle已于 2015 年停止使用 JDK 7,因此要使用 Hadoop 3 用户必须将其Java版本升级到 JDK 8 或更高版本才能编译和运行所有 Hadoop 文件。使用 Hadoop 3 不再支持低于 8 的 JDK 版本。

2. 支持纠删码

纠删码用于在计算机硬盘出现故障时恢复数据。它是许多 IT 公司用来恢复数据的高级 RAID(独立磁盘冗余阵列)技术。 Hadoop 文件系统 HDFS 即 Hadoop 分布式文件系统使用擦除编码在 Hadoop 集群中提供容错能力。由于我们使用的是商用硬件来构建我们的 Hadoop 集群,因此节点故障是正常的。 Hadoop 2 使用复制机制来提供与 Hadoop 3 中的擦除编码类似的容错能力。

在数据的 Hadoop 2 副本中,创建了块,然后将其存储在 Hadoop 集群中的不同节点上。纠删码消耗的存储空间比 Hadoop 2 中的复制少或一半,以提供相同级别的容错能力。随着行业数据量的不断增加,开发者可以通过纠删码来节省大量的存储空间。擦除编码最大限度地减少了对硬盘的需求,并在提供类似资源的情况下将容错能力提高了 50%。

3. 支持两个以上的NameNode

先前版本的 Hadoop 支持单个活动 NameNode 和单个备用 NameNode。在最新版本的 Hadoop 中,即 Hadoop 3.x,数据块复制是在三个 JournalNodes(JNs) 之间完成的。有了它的帮助,Hadoop 3.x 架构比之前的版本更能处理容错。需要高容错能力的大数据问题,Hadoop 3.x 在这种情况下非常有用。在这个Hadoop中,3.x用户可以根据需要管理备用节点的数量,因为提供了多个备用节点的便利。

例如,开发人员现在可以轻松配置三个 NameNode 和五个 JournalNode,我们的 Hadoop 集群能够处理两个节点而不是单个节点。

4、Shell脚本重写

Hadoop 文件系统利用各种shell 类型的命令直接与HDFS 和Hadoop 支持的其他文件系统(例如WebHDFS、Local FS、S3 FS 等)交互。Hadoop 的多种功能由shell 控制。 Hadoop 最新版本(即 Hadoop 3.x)中使用的 shell 脚本修复了许多错误。 Hadoop 3.x shell 脚本还提供了重写 shell 脚本的功能。

5. YARN 的时间线服务 v.2

YARN 时间线服务存储和检索申请人的信息(信息可以是正在进行的或历史的)。 Timeline service v.2 对于提高我们 Hadoop 的可靠性和可扩展性非常重要。在流和聚合的帮助下增强了系统可用性。在带有TimeLine 服务的Hadoop 1.x 中,v.1用户只能制作读写器和存储架构的单个实例,无法进一步扩展。

Hadoop 2.x 使用分布式写入器架构,其中数据读取和写入操作是可分离的。这里为每个 YARN(Yet Another Resource Negotiator)应用程序提供了分布式收集器。 Timeline service v.2 使用 HBase 进行存储,它可以扩展到大规模,同时为读写操作提供良好的响应时间。

Timeline service v.2 存储的信息主要有两种类型:

A. 已完成申请的一般信息

  • 用户信息
  • 队列名称
  • 每个应用程序的尝试次数
  • 每次尝试应用程序时运行的容器信息

B.关于运行和完成的应用程序的每个框架信息

  • Map 和 Reduce 任务的计数
  • 柜台
  • 开发者在 Timeline 客户端的帮助下为 TimeLine Server 广播的信息。

Apache-Hadoop-Yarn-架构

6. 文件系统连接器支持

这个新的 Hadoop 版本 3.x 现在支持 Azure Data Lake 和 Aliyun Object Storage System,它们是 Hadoop 兼容文件系统的另一个备用选项。

7.默认多个服务端口已更改

在以前的 Hadoop 版本中,Hadoop 的多服务端口在Linux 临时端口范围 (32768-61000) 内。在这种配置中,由于某些其他应用程序中发生冲突,有时服务无法绑定到端口。因此,为了克服这个问题,Hadoop 3.x 已将冲突端口从 Linux 临时端口范围中移出,并已为其分配新端口,如下所示。

// The new assigned Port
Namenode Ports: 50470 -> 9871, 50070 -> 9870, 8020 -> 9820
Datanode Ports: 50020-> 9867,50010 -> 9866, 50475 -> 9865, 50075 -> 9864
Secondary NN Ports: 50091 -> 9869, 50090 -> 9868  

8. 数据节点内平衡器

DataNode 在 Hadoop 集群中用于存储目的。 DataNode 一次处理多个磁盘。该磁盘在写入操作期间被均匀填充。添加或删除磁盘可能会导致 DataNode 出现严重偏斜。现有的HDFS-BALANCER无法处理这种严重的偏斜,这与 DN 间的偏斜有关,而不是内部的 DN 偏斜。最新的 DataNode 内部平衡功能可以管理这种情况,该功能在 HDFS 磁盘平衡器 CLI 的帮助下调用。

9. 阴影客户罐

新的Hadoop-client-APIHadoop-client-runtime在 Hadoop 3.x 中可用,它在单个数据包或单个 jar 文件中提供 Hadoop 依赖项。在 Hadoop 3.x 中,Hadoop –client-API 具有编译时范围,而 Hadoop-client-runtime 具有运行时范围。这两个都包含由 Hadoop-client 提供的第三方依赖项。现在,开发人员可以轻松地将所有依赖项捆绑在一个 jar 文件中,并且可以轻松测试 jar 是否存在任何版本冲突。使用这种方式,可以轻松撤消对应用程序类路径的 Hadoop 依赖项。

10. 任务堆和守护进程管理

在 Hadoop 3.x 版中,我们可以通过一些新添加的方式轻松配置 Hadoop 守护进程堆大小。借助主机的内存大小进行自动调整。开发人员可以使用HEAP_MAX_SIZEHEAP_MIN_SIZE变量代替HADOOP_HEAPSIZEJAVA_HEAP_SIZE内部变量也在这个最新的 Hadoop 版本 3.x 中被删除。默认堆大小也被删除,用于 JVM(Java虚拟机)自动调整。如果你想使用旧的默认值,那么通过在 Hadoop-env.sh 文件中配置HADOOP_HEAPSIZE_MAX来启用它。