Hadoop 3.0 New Features And Enhancement

Why do you need Hadoop 3.0 new features and enhancement and what is driving this change. The key driving force behind Hadoop 3.0 that there are lot of content in trunk that did not make in 2.x. And another roadblock that JDK 1.7 is not supported by Oracle. Look at the below comparison table where it clearly says what Hadoop 3.0 is promising.

Hadoop 3 vs Hadoop 2 side by side
Hadoop 3 vs Hadoop 2 side by side

The key Hadoop 3.0 new features and enhancement are as follows

Hadoop-3.0

  1. Java 8 (jdk 1.8) as runtime for Hadoop 3.0
  2. Erasure Encoding for to reduce storage cost
  3. YARN Timeline Service v.2 (YARN-2928)
  4. New Default Ports for Several Services
  5. Intra-DataNode Balancer
  6. Shell Script Rewrite (HADOOP-9902)
  7. Shaded Client Jars
  8. Support for Opportunistic Containers
  9. MapReduce Task-Level Native Optimization
  10. Support for More than 2 NameNodes
  11. Support for Filesystem Connector
  12. Reworked Daemon and Task Heap Management
  13. Improved Fault-tolerance with Quorum Journal Manager

Java 8 Minimum Runtime Version

Hadoop 3.0 and Java 8 Runtime

Oracle JDK 7 is EoL (End of Life) at April 2015 so in Hadoop 3.0, all JARs are compiled targeting a runtime version of Java 8. Hadoop 3.0 new features and enhancement is using lamda expression, Steam API, security enhancement and performance enhancements for HashMaps & IO/NIO.

 

Hadoop’s evaluation with JDK upgrade

  • Hadoop 2.6.x – JDK 6,7,8 or later
  • Hadoop 2.7.x/2.8.x/2.9.s – JDK 7,8 or later
  • Hadoop 3.0.x – JDK 8 or later

Erasure Coding Support in Hadoop 3.0

With the speed data is growing and many application are being developed to crunch them, organisation is looking to optimise the storage and HDFC erasure coding is an important feature to server this purpose.

Erasure Coding Hadoop 3.0

Hadoop 2.x has three replica by default. 1st replica on local node, local rack or random node. 2nd and 3rd replicas on the same remote rack. This gives reliability tolerance 2 failure. this gives good data locality and local shortcut. Multiple copies and parallel IO for parallel compute. very fast block recovery and node recovery. 3x storage has 200% overhead and to solve this storage overhead, erasure coding storage is implemented. It is cost effective, durable, save IO bandwidth however expensive recovery.

YARN Timeline Service v.2

Hadoop 3.0 introduced a major revision of YARN Timeline Service i.e. v.2. YARN Timeline Service. It is developed to address two major challenges:

  • Improving scalability and reliability of Timeline Service
  • Enhancing usability by introducing flows and aggregation

 

YARN Timeline Service v.2: Scalability

YARN version 1.x is limited to a single instance of writer/reader and does not scale well beyond small clusters. Version 2.x uses a more scalable distributed writer architecture and a scalable backend storage. It separates the collection (writes) of data from serving (reads) of data. It uses distributed collectors, essentially one collector for each YARN application. The readers are separate instances that are dedicated to serving queries via REST API.

YARN Timeline Service v.2 chooses Apache HBase as the primary backing storage, as Apache HBase scales well to a large size while maintaining good response times for reads and writes.

YARN Timeline Service v.2: Usability Improvements

Now talking about usability improvements,  users are interested in the information at the level of “flows” or logical groups of YARN applications. It is much more common to launch a set or series of YARN applications to complete a logical application. Timeline Service v.2 supports the notion of flows explicitly. In addition, it supports aggregating metrics at the flow level as you can see in the below diagram.

More details are available in the YARN Timeline Service v.2 docs.

Shell Script Rewrite

The Hadoop 3.0 shell scripts have been rewritten to fix  bugs, correct compatibility issues and some of the existing installation problem. It also incorporates some new features. So I will list some of the important ones:

  1. All Hadoop shell script subsystems now execute hadoop-env.sh, which allows for all of the environment variables to be in one location.
  2. Daemonization has been moved from *-daemon.sh to the bin commands via the –daemon option. In Hadoop 3 we can simply use –daemon start to start a daemon, –daemon stop to stop a daemon, and –daemon status to set $? to the daemon’s status. For example, ‘hdfs –daemon start namenode’.
  3. Operations which trigger ssh connections can now use pdsh if installed.
  4. ${HADOOP\_CONF\_DIR} is now properly honored everywhere, without requiring symlinking and other such tricks.
  5. Scripts now test and report better error messages for various states of the log and pid dirs on daemon startup. Before, unprotected shell errors would be displayed to the user.

There are many more features you will know when Hadoop 3.0 will be in the beta phase. Now let us discuss the shaded client jar and know their benefits.

Classpath Client Side Isolation

Classpath client side isolation solve the problem with application’s code dependency and its conflict with Hadoop’s dependencies. so this feature separating server side jar and client side jar like hbase-client dependencies are shared.

New Default Ports for Several Services

Prior to Hadoop 3.0, the default ports for multiple Hadoop services were in the Linux ephemeral port range (short-lived transport protocol port) (32768-61000) and can conflict with other apps running in the same node . So these default ports for NameNode, DataNode, Secondary NameNode and KMS have been moved out of the Linux ephemeral port range to avoid any bind errors on startup. This feature has been introduced to enhance the reliability of rolling restarts on large hadoop clusters.

See the release notes for HDFS-9427 and HADOOP-12811 for a full list of port changes

 

MapReduce Task-Level Native Optimization

In Hadoop 3.0, a native Java implementation has been added in MapReduce for the map output collector. For shuffle-intensive jobs, this improves the performance by 30% or more.

They added a native implementation of the map output collector. For shuffle-intensive jobs, this may provide speed-ups of 30% or more. They are working on native optimization for MapTask based on JNI. The basic idea is to add a NativeMapOutputCollector to handle key value pairs emitted by the mapper, therefore sort, spill, IFile serialization can all be done in native code. They are still working on the Merge code.

Support for More than 2 NameNodes

In Hadoop 2.x, HDFS NameNode high-availability architecture has a single active NameNode and a single Standby NameNode. By replicating edits to a quorum of three JournalNodes, this architecture is able to tolerate the failure of any one NameNode.

However, business critical deployments require higher degrees of fault-tolerance. So, in Hadoop 3 allows users to run multiple standby NameNodes. For instance, by configuring three NameNodes (1 active and 2 passive) and five JournalNodes, the cluster can tolerate the failure of two nodes.

Support for Filesystem Connector

Hadoop now supports integration with Microsoft Azure Data Lake and Aliyun Object Storage System. It can be used as an alternative Hadoop-compatible filesystem. First Microsoft Azure Data Lake was added and then they added Aliyun Object Storage System as well. You might expect some more.

Intra-DataNode Balancer

A single DataNode manages multiple disks. During a normal write operation, data is divided evenly and thus, disks are filled up evenly. But adding or replacing disks leads to skew within a DataNode. This situation was earlier not handled by the existing HDFS balancer. This concerns intra-DataNode skew.

Now Hadoop 3 handles this situation by the new intra-DataNode balancing functionality, which is invoked via the hdfs diskbalancer CLI.

See the disk balancer section in the HDFS Commands Guide for more information.

Reworked Daemon and Task Heap Management

A series of changes have been made to heap management for Hadoop daemons as well as MapReduce tasks.

  • New methods for configuring daemon heap sizes. Notably, auto-tuning is now possible based on the memory size of the host, and the HADOOP_HEAPSIZE variable has been deprecated.In its place, HADOOP\_HEAPSIZE\_MAX and HADOOP\_HEAPSIZE\_MIN have been introduced to set Xmx and Xms, respectively. All global and daemon-specific heap size variables now support units. If the variable is only a number, the size is assumed to be in megabytes.
  • Simplification of the configuration of map and reduce task heap sizes, so the desired heap size no longer needs to be specified in both the task configuration and as a Java option. Existing configs that already specify both are not affected by this change.

Hadoop 3.0 Downstream Compatibility

Following are the version compatibility matrix sheet indication the version of different Apache projects and their unit test status including basic functionality testing. This was done as part of Hadoop 3.0 Beta 1 release in Oct 2017.

Apache Project Version Compiles Unit Testing Status Basic Functional Testing
HBase 2.0.0
Spark 2.0
Hive 2.1.0
Oozie 5.0
Pig 0.16
Solr 6.x
Kafka 0.10

More on Hadoop 3.0 Related Topics

# Other Articles Link
1 All the newly added features and enhancements in Hadoop 3.0 Hadoop 3.0 features and enhancement
2 Detailed comparison between Hadoop 3.0 vs Hadoop 2.0 and what benefit it brings to the developer Hadoop 3.0 vs Hadoop 2.0
3 Hadoop 3.0 Installation Hadoop 3.0 Installation
4 Hadoop 3.0 Release Date Hadoop 3.0 Release Date
5 Hadoop 3. 0 Security Book Hadoop 3.0 Security by Ben and Joey
6 Demystify The Hadoop 3.0 Architecture and its components Hadoop 3.0 Architecture
7 Hadoop 3.0 & Hortonworks Support for it in HDP 3.0 Release Hadoop 3.0 Hortonworks

Venky Jayaraman

20+ years of extensive expertise developing and managing enterprise level application. 7+ years of extensive experience building and implementing Bigdata solution.