Hadoop3.x中增强了很多特性,在Hadoop3.x中,不再允许使⽤jdk1.7,要求必须是jdk1.8以上版本。这是因为Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK 1.8重新发布一个新的Hadoop版本,即Hadoop3.x。Hadoop3.x以后将会调整方案架构,将MapReduce基于内存+io+磁盘共同处理数据。
Hadoop 3.x中引入了一些重要的功能和优化,包括HDFS可擦除编码、多Namenode支持、MR Native Task优化、 YARN基于cgroup的内存和磁盘IO隔离、 YARN container resizing等。 Hadoop3.x官方文档地址为http://hadoop.apache.org/docs/r3.0.1/ 。
下面,从Common、HDFS、YARN、MapReduce等方面的改进,来谈一下Hadoop 3.x新特性。
1. Hadoop3.x新特性之Common改进
精简Hadoop内核,包括剔除过期的API和实现,将默认组件实现替换成最⾼高效的实现(比如将FileOutputCommitter缺省实现换为v2版本,废除hftp,转由webhdfs替代,移除Hadoop子实现序列化库org.apache.hadoop.Records。
lasspath isolation以防止不同版本jar包冲突,比如google Guava在混合使用Hadoop、 HBase和Spark时,很容易产生冲突。
Shell脚本重构。 Hadoop 3.0对Hadoop的管理脚本进行了重构,修复了大量bug,增加了新特性,支持动态命令等。使用方式上则和之前版本的一致。
2. Hadoop3.x新特性之HDFS改进
Hadoop3.x中最大改变的是HDFS, HDFS通过最近black块计算,根据最近计算原则,本地black块先加入到内存,然后计算,再通过IO共享内存计算区域,最后快速形成计算结果。
HDFS支持数据的擦除编码,这使得HDFS在不降低可靠性的前提下,节省一半存储空间。
多NameNode支持,即支持一个集群中,一个active、多个standby namenode部署方式。(注:多ResourceManager特性在hadoop 2.0中已经支持)。
3. Hadoop3.x新特性之YARN改进
基于cgroup的内存隔离和IO Disk隔离。
用curator实现RM leader选举。
containerresizing。
Timelineserver next generation。
4. Hadoop3.x新特性之MapReduce改进
Tasknative优化。为MapReduce增加了C/C++的map output collector实现(包括Spill, Sort和IFile等),通过作业级别参数调整就可切换到该实现上。对于shuffle密集型应用,其性能可提高约30%。
MapReduce内存参数自动推断。在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,涉及到两个参数:mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts,一旦设置不合理,则会使得内存资源浪费严重,比如将前者设置为4096MB,但后者却是“-Xmx2g”,则剩余2g实际上⽆无法让java heap使⽤用到。
5. Hadoop3.x新特性之其他改进
添加新的 hadoop-client-api 和 hadoop-client-runtime 组件到一个单独的jar包,以此解决依赖不兼容的问题。
支持微软的Azure分布式文件系统和阿里的aliyun分布式文件系统 。