Hadoop 3的新增功能?
以下是Hadoop3中进行的10项更改,这些更改使其独特且快速。看看Hadoop 3.x的新增功能:
1、Hadoop3.0支持的最低Java版本是JDK 8.0
他们已经使用Java 8运行时版本编译了所有Hadoop jar文件。用户现在必须安装Java8才能使用Hadoop3.0。具有JDK7的用户必须将其升级到JDK8。
2、HDFS支持擦除编码
Hadoop3.x使用擦除编码来提供容错能力。Hadoop2.x使用复制技术来提供相同级别的容错能力。让我们探讨两者之间的区别。
首先,我们将研究复制。让我们采用默认的复制因子3。在这种情况下,对于6个块,我们必须总共存储6*3,即18个块。对于每个复制的块,存储开销为100%。因此,在我们的情况下,存储开销将为200%。
让我们看看擦除编码中会发生什么。对于6个块,将计算3个奇偶校验块。我们称此过程为编码。现在,每当一个块丢失或损坏时,就会从剩余的块和奇偶校验块中进行计算。我们称此过程为解码。在这种情况下,我们总共存储了9个块,其中6个块占了50%的存储开销。因此,我们可以用更少的存储空间获得相同数量的容错能力。但是,在CPU和网络方面始终存在编码和解码过程的开销。因此,它用于很少访问的数据。
3、YARN时间轴服务v.2
Yarn时间线服务是Hadoop3中的新增功能。时间线服务器负责存储和检索应用程序的当前.和历史信息。此信息有两种类型:
已完成申请的一般信息
队列名称
用户信息
每个应用程序的尝试次数
有关每次尝试运行的容器的信息
由ResourceManager存储的有关已完成应用程序的通用数据,可通过Web UI访问。
每个框架有关正在运行和已完成的应用程序的信息
地图任务数
减少任务数
Counters
应用程序开发人员通过Timeline客户端发布到TimeLine Server的信息
REST API会查询此数据,以按应用程序或框架特定的UI进行呈现。
TimeLine服务器v.2解决了v.1版中的主要缺陷。问题之一是可伸缩性。TimeLine服 务器v.1具有读取器/写入器和存储的单个实例。它不能扩展到超过几个节点。而在版本2中,时间轴服务器具有分布式写入器体系结构和可扩展的后端存储。它将数据的收集(写入)与数据的提供(读取)分开。此外,每个YARN应用程序使用一个收集器。它具有一个作为独立实例的读取器,该读取器通过RESTAPI服务器查询请求。时间轴服务器v.2使用HBase进行存储,可以将其扩展到巨大的大小,从而为读取和写入提供了良好的响应时间。
4、支持机会容器和分布式计划
Hadoop 3引入了执行类型的概念。如果目前没有可用资源,则这些容器将在NodeManager中等待。机会容器的优先级低于保证容器。如果假设有保证的容器到达机会容器执行的中间,则随后将被抢占。这恰好为保证容器腾出了空间。
5、支持两个以上的NameNode
到目前为止,Hadoop支持单个活动NameNode和单个备用NameNode。将编辑复制到三个日志节点后,此体系结构允许一个NameNode发生故障。
但是某些情况需要高度的容错能力。通过配置五个日记帐节点,我们可以拥有三NameNodes的系统。这样的系统将容忍两个NameNode的故障。因此,通过引入对两个以上NameNode的支持,Hadoop3.0使系统具有更高的可用性。
6、多个服务更改的默认端口
在Hadoop3.0之前,许多Hadoop服务的默认端口在Linux临时端口范围(32768一61000)中。因此,很多时候这些服务在启动时将无法绑定。因为它们会与其他应用程序冲突。.他们已将这些服务的默认端口移出了临时范围。服务包括NameNode, Secondary NameNode,DataNode和KeyManagementServer。
7、Intra一DataNode平衡器
DataNode管理许多磁盘。在写操作期间,这些磁盘被均匀填充。但是,当我们添加或删除磁盘时,会导致严重的偏差。在HDFS平衡器地址间数据偏斜,而不是帧内节点。
节点内平衡器解决了这种情况。CLI 一 hdfs diskbalancer调用此平衡器。
8、重做守护程序和任务堆管理
守护程序的堆管理和Map一Reduce任务有很多更改:
有新的方法可以配置守护程序堆大小。系统根据主机的内存自动调整。HADOOP_ HEAPSIZE变 量不再使用。取而代之的是我们有HEAP_ MAX_ SIZE和HEAP_ MIN SIZE变量。 此外,他们还删除了内部变量JAVA_ HEAP_ SIZE。 他们还删除了默认堆大小,该默认堆大小允许JVM自动调整。全局和守护程序堆大小的所有变量都支持单位。如果该变量只是一个数字,则它期望大小以兆字节为单位。另外,如果要启用旧的默认值,请在hadoop一env.sh中配置HADOOP_ HEAPSIZE_ MAX。
如果mapreduce.map/ reduce.memory.mb的值设置为默认值一1。然后,它将自动从为mapreduce.map/reduce.java.opts指定的Xmx变量中推断出值。Xmx就是堆大小值系统属性。这种反向也是可能的。假设未为mapreduce.map/reduce.java.opts键指定Xmx值。系统从mapredcue.map/reduce.memory.mb键获得其值。如果我们不指定任何值,则默认值为1024MB。对于明确指定此值的配置和作业代码,将不受影响。
9、纱线资源模型的概括
他们已经对Yarn资源模型进行了概括,以包含除CPU和内存以外的用户定义资源。这些用户定义的资源可以是软件许可证,GPU或本地连接的存储。纱线任务是根据这些资源安排的。
我们可以扩展Yarn资源模型以包含任意“可数”资源。可计数的资源是由容器消耗的资源,系统在完成后将其释放。CPU和内存都是可计数的资源。同样,GPU或图形处理单元以及软件许可证也是可数的资源。默认情况下,Yarn跟踪每个节点,应用程序和队列的CPU和内存。纱线可以扩展以跟踪其他用户定义的可数资源,例如GPU和软件许可证。GPU与容器的集成增强了数据科学和AI用例的性能。
10、S3A客户端的一致性和元数据缓存
现在的S3A客户端具有以快速且一致的方式存储文件和目录的元数据的功能。它通过使用.DynamoDB表执行此操作。我们可以将此新功能称为S3GUARD。它缓存目录信息,以便S3Aclient可以更快地查找。此外,它还可以恢复S3列表操作和对象状态之间的不一致。使用S3GUARD创建文件后,我们总能找到它。S3GUARD是实验性的,我们可以认为它是不稳定的。
我们探索了Hadoop 3的许多新功能,这些功能使其变得独特且受欢迎。
总结
hadoop
如下:默认端口修改,不绑定到linux的临时端口上了,
hdfs:EC/三个NN
MR:
1:Tasknative优化。为MapReduce增加了C/C++的map output collector实现(包括Spill,Sort和IFile等),对于shuffle密集型应用,其性能可提高约30%
2:MapReduce内存参数自动推断
Yarn:
Yarn时间线服务是Hadoop3中的新增功能。时间线服务器负责存储和检索应用程序的当前.和历史信息。
还有
(1)基于cgroup的内存隔离和IO Disk隔离
Cgroups全称Control Groups,是Linux内核提供的物理资源隔离机制,通过这种机制,可以实现对Linux进程或者进程组的资源限制、隔离和统计功能。,docker也用的cgroup
(https://issues.apache.org/jira/browse/YARN-2619)
(2)用curator实现RM leader选举(https://issues.apache.org/jira/browse/YARN-4438)
(3)container resizing(https://issues.apache.org/jira/browse/YARN-1197)
支持更改分配容器的资源Container resizing
当前的YARN资源管理逻辑假定分配给容器的资源在其生命周期中是固定的。当用户想要更改分配的容器的资源时,唯一的办法就是释放它并分配一个具有预期大小的新容器。
允许运行时更改分配容器的资源将使我们更好地控制应用程序中的资源使用情况
(4)Timelineserver next generation (https://issues.apache.org/jira/browse/YARN-2928)
时间线服务器负责存储和检索应用程序的当前.和历史信息。此信息有两种类型:
1、已完成申请的一般信息
2、每个框架有关正在运行和已完成的应用程序的信息
提供YARN时间轴服务v.2 alpha 2,以便用户和开发人员可以对其进行测试,并提供反馈意见和建议,使其成为Timeline Service v.1.x的替代品。它只能用于测试能力。
Yarn Timeline Service V2提供一个通用的应用程序共享信息和共享存储模块。可以将metrics等信息保存。可以实现分布式writer实例和一个可伸缩的存储模块。同时,v2版本在稳定性和性能上面也做出了提升,原先版本不适用于大集群,v2版本使用hbase取代了原先的leveldb作为后台的存储工具。