
对Hadoop内核精简,其中包括去除过期的API和实现,将默认组件实现替换成最高效的实现。
Classpath isolation防止不同版本jar包冲突
Shell脚本重构,启动脚本和Hadoop2.x不同,Hadoop3.x对Hadoop的管理脚本进行了重构,修复了大量的bug增加了新特性,并且增加了动态命令。
HDFS的改进
HDFS纠删码,在Hadoop3.X中,HDFS实现了Erasure Coding这个新功能,Erasure coding纠删码技术简称EC,是一种数据保护技术。最早用于通信行业中数据传输中的数据恢复,是一种编码容错技术。HDFS支持数据的擦除编码,这使得HDFS在不降低可靠性的前提下,能够节省一半存储空间。
支持多个NameNodes,最初的HDFS NameNode high-availability实现,仅仅提供了一个Active NameNode和一个Standby NameNode,并且通过将编辑日志复制到三个JournalNodes上,这种架构能够容忍系统中的任何一个节点的失败。在实际开发中,一些部署需要更高的容错度,可以通过这个新特性来实现,它允许用户运行多个Standby NameNode。
MapReduce的改进
MapReduce任务级本地优化:提高MapReduce的速度,为MapReduce增加了C/C++的map output collector实现(包括Spill,Sort和IFile等),通过作业级别参数调整就可切换到该实现上。对于shuffle密集型应用,其性能可提高约30%。
MapReduce内存参数自动推断:在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,一旦设置不合理,则会使得内存资源浪费严重,在Hadoop3.x中避免了这种情况。
YARN 资源类型
YARN 资源模型(YARN resource model)已被推广为支持用户自定义的可数资源类型(support user-defined countable resource types),它支持 CPU 和内存。比如集群管理员可以定义诸如 GPUs、软件许可证(software licenses)或本地附加存储器(locally-attached storage)之类的资源。YARN 任务可以根据这些资源的可用性进行调度。[1]
Java的最小支持版本:Hadoop 2.x - Java 7;Hadoop 3.x - Java 8。
容错性:Hadoop 2.x - 通过版本复制提高容错性;Hadoop 3.x - 通过擦除编码技术实现容错性。
数据负载均衡:Hadoop 2.x - 对于数据,采用hdfs均衡器做负载均衡;Hadoop 3.x - 对于数据,采用数据内节点均衡器做负载均衡,通过HDFS磁盘均衡器CLI调用。
存储方案:Hadoop 2.x - 3副本存储方案;Hadoop 3.x - 在HDFS上支持擦除编码技术(Erasure Coding,简称EC),解决副本复制和副本存储带来的空间和资源的消耗,以EC代替副本,提供和副本存储相同的容错能力,并且存储开销不大于单副本开销的50%。
存储开销:Hadoop 2.x - 2倍额外的存储空间开销;Hadoop 3.x - 0.5倍额外的存储空间开销。
存储开销实例:Hadoop 2.x - 如果有6个block块,那么基于副本方案,将会有18个块空间被使用;Hadoop 3.x - 如果有6个block块,那么基于EC技术方案,将会有9个块空间被使用,6个数据块和3个奇偶校验块。
YARN时间线服务:Hadoop 2.x - 使用老的时间线服务,有性能扩展问题;Hadoop 3.x - 升级时间线服务v2,提高了稳定性和扩展性。
默认的端口区间:Hadoop 2.x - 在hadoop2.x中,一些默认端口是linux的临时端口范围,当服务启动时,可能无法绑定造成启动失败;Hadoop 3.x - 3.x中,这些端口从临时端口范围中移出来了。
工具:Hadoop 2.x - 使用Hive Pig Tez Hama Giraph和其他hadoop工具;Hadoop 3.x - Hive Pig Tez Hama Giraph和其他hadoop工具都可以使用
兼容的文件系统:Hadoop 2.x - HDFS,FTP文件系统(将所有数据存储在远端FTP服务器上),亚马逊S3,微软Azure WASB文件系统;Hadoop 3.x - 以上及微软Azure数据湖文件系统。
MR API兼容性:Hadoop 2.x - Hadoop 1.x应用程序可以兼容2.x;Hadoop 3.x - Hadoop 1.x应用程序可以兼容到3.x中。
插槽、容器:Hadoop 2.x - Hadoop 1任务运行在slot的概念中,hadoop 2任务运行在容器container概念中;Hadoop 3.x - Hadoop 3任务运行在容器概念中。
单点故障:Hadoop 2.x - 当namenode下线时,standby namenode自动上线提供服务,支持namednode单点故障恢复;Hadoop 3.x - 支持namednode单点故障恢复。
HDFS联盟:Hadoop 2.x - Hadoop 1中,仅一个NameNode管理多个namespace命名空间,Hadoop 2中,多个NameNode管理多个命名空间;Hadoop 3.x - Hadoop 3中,多个NameNode管理多个命名空间。
扩展性:Hadoop 2.x - 在Hadoop 2中,单个集群可以扩展到10000个节点;Hadoop 3.x - 扩展性更好,单个集群可以扩展到大于10000个节点。
HDFS快照:Hadoop 2.x - Hadoop 2添加了快照的支持,当用户错误时提供了数据的灾难恢复和保护机制;Hadoop 3.x - 也提供了快照支持[2]。
—— END ——
参考文献:
[1] https://zhuanlan.zhihu.com/p/367318462
[2] https://blog.csdn.net/chenzuoli/article/details/123713129




