1. 前言

PS: 新特性主要翻译自官网:Apache Hadoop 3.0.0-alpha1——Overview

2. 概览

Apache Hadoop 3.0.0-alpha1 在hadoop-2.x的基础上集成了大量的新特性。不过这个alpha版本不能保证API的稳定性,需要注意。

3. 关于JAVA版本

必须使用java8及以上版本才能使用hadoop3.0

4. 支持erasure encoding纠错码

HDFS支持纠编码erasure encoding,简称EC技术。EC技术可以防止数据丢失,又可以解决HDFS存储空间翻倍的问题。劣势是:

  1. 一旦数据需要恢复,会带来网络消耗,因为不仅要读取原数据块,还要读取校验块。
  2. 存储文件,或者恢复文件需要编码解码,会有CPU消耗。

建议EC存储用于冷数据,由于冷数据确实数量大,可以减少副本从而降低存储空间,另外冷数据稳定,一旦需要恢复数据,对业务不会有太大影响。

5. YARN Timeline Service v.2

timeline server主要提供一些完成或者运行中的applications的profiling信息。在hadoop3.0中引入了version 2版本。主要是提高了伸缩性和可靠性。通过引入“流“和”聚集“的概念来优化可用性。 这个在alpha版本仍然是测试的,主要用来收集BUG,而且安全性是没有开启的,需要留意。

6. shell脚本重写

重写了一些hadoop的shell脚本来修补一些长期存在的BUG。
不兼容的shell脚本可以参考文档:HADOOP-9902

7. MapReduce task-level native optimization

对map output collector做了一个native的实现。对于shuffle密集型的JOB可以带来30%以上的提升。

8. 支持2个以上的namenode

原本做namenode的高可用都是通过在3个JournalNodes集群上复制edit log来实现的。这种架构的高可用仍然不是很足够,毕竟才总共才2个namenode。现在新的架构可以使得用户可以运行更多的standby namenode来满足更加严格的可用性要求。例如可以配置3个namenode和5个JournalNodes来容忍2个namenode的故障。

9. 服务默认端口修改

原来的很多服务都是使用Linux的临时端口范围: (32768-61000)

这样有时候启动服务的时候,容易和其他服务造成端口冲突。现在把一些冲突的端口都移出了这个范围。包括namenode、datanode和KMS。具体修改对的port变化见:

  1. HDFS-9427
  2. HADOOP-12811

10. 支持微软的Microsoft Azure Data Lake文件系统

提供了该文件系统的connector

11. 内部的datanode balancer

一个datanode往往对应多个disk,写入数据的时候也会负载均衡的写入到多个disk上。但是一旦需要增加或者替换disk的时候,就会发生数据倾斜。以前的HDFS balancer是不会处理这样的情况的。现在引入了内部datanode balancer可以来处理这种情况。

具体可以参考HDFS Commands Guide

12. 重写堆管理

对守护线程的堆管理进行重写。

  1. HADOOP-10950: 引入新的方法来配置守护线程的堆大小。并且现在支持基于主机内存大小来自动调优。因此“HADOOP_HEAPSIZE”这个变量也被移除了。
  2. MAPREDUCE-5785: 简化了map和reduce任务heap size相关的配置。

其他参考资料:

  1. hadoop-3.0新特性