1.JDK
hadoop3.x的JDK最低为Java8
2.副本&EC
副本:在分布式存储系统下的一种数据可靠性保护技术,通过冗余的数据副本来保障单点故障下数据的请求不中断。
Erasure Code(EC):即纠删码,是另一种实现数据保护的机制,该机制通过计算校验片的方式来实现数据冗余保护,更高存储利用率。
EC的优势:数据的持久度增强,降低了成本,写性能提升。
EC的缺点:由于擦除编码需要在执行远程读取时,对数据重建带来额外的开销,读取性能下降,因此他通常用于存储不太频繁访问的数据。
hadoop的3副本机制已经广为人知,是复制了3个副本,对磁盘空间的占用为3份。而EC使用的4+2的方式只需要1.5份的磁盘空间,所以写的时候有效的降低了写放大,提升性能。在读数据的时候,副本是直接返回,EC则是拼装在一起返回。
在故障场景下,副本写会降级写(3副本将为2副本)保证前台写不中断,而EC则会通过缩列写保证写入的可靠性不降低,即原来4+2的EC会按照2+2的方式写入。而且EC支持不降级写,所以具备更高的可靠性。
3.多NameNode
hadoop2中,NameNode高可用有一个Active 和standby NameNode,该体系结构能够容忍任何一个NameNode失败。hadoop3与允许用户同时运行多个备用的NameNode。
4.DataNode内部负载均衡
单个数据节点配置多个数据磁盘,在正常写入操作期间,数据被均匀的划分,因此,磁盘被均匀填充。但是,在维护磁盘时,添加或者替换磁盘会导致DataNode节点存储出现偏移,这种情况在早期的HDFS文件系统中,是没有被处理的。现在Hadoop3通过新的内部DataNode平衡功能来处理这种情况,这是通过hdfs diskbalancer CLI来进行调用的。执行之后,DataNode会进行均衡处理。
5.MapReduce任务级别本地化优化
在Hadoop3中,本地的Java实现已加入MapReduce地图输出器,对于Shuffle密集的作业,这样可以提高30%或者更高的性能。它们添加了映射输出收集器的本机实现,让MapTask基于JNI来本机优化。基本思想是添加一个NativeMapOutputCollector收集器来处理映射器发出的键值对,因此Sort、Spill、文件序列化都可以在本机代码中完成。
6.支持等待容器和分布式调度
在Hadoop3 中引入了一种新型执行类型,即等待容器,即使在调度时集群没有可用的资源,它也可以在NodeManager中被调度执行。在这种情况下,这些容器将在NM中排队等待资源启动,等待荣容器比默认容器优先级低,因此,如果需要,可以抢占默认容器的空间,这样可以提供机器的利用率。