Apache Hadoop 0.23.0 Release Notes

These release notes cover new developer and user-facing incompatibilities, important issues, features, and major improvements.


  • HADOOP-7740 | Minor | security audit logger is not on by default, fix the log4j properties to enable the logger

Fixed security audit logger configuration. (Arpit Gupta via Eric Yang)


  • HADOOP-7728 | Major | hadoop-setup-conf.sh should be modified to enable task memory manager

Enable task memory management to be configurable via hadoop config setup script.


  • HADOOP-7724 | Major | hadoop-setup-conf.sh should put proxy user info into the core-site.xml

Fixed hadoop-setup-conf.sh to put proxy user in core-site.xml. (Arpit Gupta via Eric Yang)


  • HADOOP-7720 | Major | improve the hadoop-setup-conf.sh to read in the hbase user and setup the configs

Added parameter for HBase user to setup config script. (Arpit Gupta via Eric Yang)


  • HADOOP-7715 | Major | see log4j Error when running mr jobs and certain dfs calls

Removed unnecessary security logger configuration. (Eric Yang)


  • HADOOP-7711 | Major | hadoop-env.sh generated from templates has duplicate info

Fixed recursive sourcing of HADOOP_OPTS environment variables (Arpit Gupta via Eric Yang)


  • HADOOP-7708 | Critical | config generator does not update the properties file if on exists already

Fixed hadoop-setup-conf.sh to handle config file consistently. (Eric Yang)


  • HADOOP-7707 | Major | improve config generator to allow users to specify proxy user, turn append on or off, turn webhdfs on or off

Added toggle for dfs.support.append, webhdfs and hadoop proxy user to setup config script. (Arpit Gupta via Eric Yang)


  • HADOOP-7691 | Major | hadoop deb pkg should take a diff group id

Fixed conflict uid for install packages. (Eric Yang)


  • HADOOP-7684 | Major | jobhistory server and secondarynamenode should have init.d script

Added init.d script for jobhistory server and secondary namenode. (Eric Yang)


  • HADOOP-7681 | Minor | log4j.properties is missing properties for security audit and hdfs audit should be changed to info

HADOOP-7681. Fixed security and hdfs audit log4j properties (Arpit Gupta via Eric Yang)


  • HADOOP-7668 | Minor | Add a NetUtils method that can tell if an InetAddress belongs to local host

closing again


  • HADOOP-7655 | Major | provide a small validation script that smoke tests the installed cluster

Committed to trunk and v23, since code reviewed by Eric.


  • HADOOP-7603 | Major | Set default hdfs, mapred uid, and hadoop group gid for RPM packages

Set hdfs uid, mapred uid, and hadoop gid to fixed numbers (201, 202, and 123, respectively).


  • HADOOP-7547 | Minor | Fix the warning in writable classes.[ WritableComparable is a raw type. References to generic type WritableComparable<T> should be parameterized ]

WARNING: No release note provided for this incompatible change.


  • HADOOP-7507 | Major | jvm metrics all use the same namespace

JVM metrics published to Ganglia now include the process name as part of the gmetric name.


  • HADOOP-7379 | Major | Add ability to include Protobufs in ObjectWritable

Protocol buffer-generated types may now be used as arguments or return values for Hadoop RPC.


  • HADOOP-7374 | Major | Don't add tools.jar to the classpath when running Hadoop

The scripts that run Hadoop no longer automatically add tools.jar from the JDK to the classpath (if it is present). If your job depends on tools.jar in the JDK you will need to add this dependency in your job.


  • HADOOP-7331 | Trivial | Make hadoop-daemon.sh to return 1 if daemon processes did not get started

hadoop-daemon.sh now returns a non-zero exit code if it detects that the daemon was not still running after 3 seconds.


  • HADOOP-7322 | Minor | Adding a util method in FileUtil for JDK File.listFiles

Use of this new utility method avoids null result from File.listFiles(), and consequent NPEs.


  • HADOOP-7305 | Minor | Eclipse project files are incomplete

Added missing library during creation of the eclipse project files.


The “Found X items” header on the output of the “du” command has been removed to more closely match unix. The displayed paths now correspond to the command line arguments instead of always being a fully qualified URI. For example, the output will have relative paths if the command line arguments are relative paths.


  • HADOOP-7264 | Major | Bump avro version to at least 1.4.1

WARNING: No release note provided for this incompatible change.


  • HADOOP-7257 | Major | A client side mount table to give per-application/per-job file system view

viewfs - client-side mount table.


  • HADOOP-7227 | Major | Remove protocol version check at proxy creation in Hadoop RPC.
  1. Protocol version check is removed from proxy creation, instead version check is performed at server in every rpc call.
  2. This change is backward incompatible because format of the rpc messages is changed to include client version, client method hash and rpc version.
  3. rpc version is introduced which should change when the format of rpc messages is changed.

  • HADOOP-7193 | Minor | Help message is wrong for touchz command.

Updated the help for the touchz command.


  • HADOOP-7153 | Minor | MapWritable violates contract of Map interface for equals() and hashCode()

MapWritable now implements equals() and hashCode() based on the map contents rather than object identity in order to correctly implement the Map interface.


Failmon removed from contrib codebase.


  • HADOOP-7133 | Major | CLONE to COMMON - HDFS-1445 Batch the calls in DataStorage to FileUtil.createHardLink(), so we call it once per directory instead of once per file

This is the COMMON portion of a fix requiring coordinated change of COMMON and HDFS. Please see HDFS-1445 for HDFS portion and release note.


  • HADOOP-7119 | Major | add Kerberos HTTP SPNEGO authentication support to Hadoop JT/NN/DN/TT web-consoles

Adding support for Kerberos HTTP SPNEGO authentication to the Hadoop web-consoles


  • HADOOP-7117 | Major | Move secondary namenode checkpoint configs from core-default.xml to hdfs-default.xml

Removed references to the older fs.checkpoint.* properties that resided in core-site.xml


  • HADOOP-7089 | Minor | Fix link resolution logic in hadoop-config.sh

Updates hadoop-config.sh to always resolve symlinks when determining HADOOP_HOME. Bash built-ins or POSIX:2001 compliant cmds are now required.


  • HADOOP-7059 | Major | Remove “unused” warning in native code

Adds __attribute__ ((unused))


  • HADOOP-7023 | Major | Add listCorruptFileBlocks to FileSystem

Add a new API listCorruptFileBlocks to FIleContext that returns a list of files that have corrupt blocks.


  • HADOOP-6949 | Major | Reduces RPC packet size for primitive arrays, especially long[], which is used at block reporting

Increments the RPC protocol version in org.apache.hadoop.ipc.Server from 4 to 5. Introduces ArrayPrimitiveWritable for a much more efficient wire format to transmit arrays of primitives over RPC. ObjectWritable uses the new writable for array of primitives for RPC and continues to use existing format for on-disk data.


Metrics names are standardized to CapitalizedCamelCase. See release note of HADOOP-6918 and HADOOP-6920.


  • HADOOP-6920 | Major | Metrics2: metrics instrumentation

Metrics names are standardized to use CapitalizedCamelCase. Some examples of this is:

Metrics names using “_” is changed to new naming scheme. Eg: bytes_written changes to BytesWritten.

All metrics names start with capitals. Example: threadsBlocked changes to ThreadsBlocked.


New metrics2 framework for Hadoop.


  • HADOOP-6904 | Major | A baby step towards inter-version RPC communications

WARNING: No release note provided for this incompatible change.


  • HADOOP-6864 | Major | Provide a JNI-based implementation of ShellBasedUnixGroupsNetgroupMapping (implementation of GroupMappingServiceProvider)

WARNING: No release note provided for this incompatible change.


  • HADOOP-6683 | Minor | the first optimization: ZlibCompressor does not fully utilize the buffer

Improve the buffer utilization of ZlibCompressor to avoid invoking a JNI per write request.


  • HADOOP-6436 | Major | Remove auto-generated native build files

The native build run when from trunk now requires autotools, libtool and openssl dev libraries.


  • HADOOP-6432 | Major | Statistics support in FileContext

WARNING: No release note provided for this incompatible change.


  • HADOOP-6385 | Minor | dfs does not support -rmdir (was HDFS-639)

The “rm” family of FsShell commands now supports -rmdir and -f options.


  • HADOOP-6255 | Major | Create an rpm integration project

Added RPM/DEB packages to build system.


  • HADOOP-5647 | Major | TestJobHistory fails if /tmp/_logs is not writable to. Testcase should not depend on /tmp

Removed dependency of testcase on /tmp and made it to use test.build.data directory instead.


  • HADOOP-2081 | Major | Configuration getInt, getLong, and getFloat replace invalid numbers with the default value

Invalid configuration values now result in a number format exception rather than the default value being used.


  • HDFS-2465 | Major | Add HDFS support for fadvise readahead and drop-behind

HDFS now has the ability to use posix_fadvise and sync_data_range syscalls to manage the OS buffer cache. This support is currently considered experimental, and may be enabled by configuring the following keys: dfs.datanode.drop.cache.behind.writes - set to true to drop data out of the buffer cache after writing dfs.datanode.drop.cache.behind.reads - set to true to drop data out of the buffer cache when performing sequential reads dfs.datanode.sync.behind.writes - set to true to trigger dirty page writeback immediately after writing data dfs.datanode.readahead.bytes - set to a non-zero value to trigger readahead for sequential reads


  • HDFS-2355 | Major | Federation: enable using the same configuration file across all the nodes in the cluster.

This change allows when running multiple namenodes on different hosts, sharing the same configuration file across all the nodes in the cluster (Datanodes, NamNode, BackupNode, SecondaryNameNode), without the need to define dfs.federation.nameservice.id parameter.


  • HDFS-2338 | Major | Configuration option to enable/disable webhdfs.

Added a conf property dfs.webhdfs.enabled for enabling/disabling webhdfs.


  • HDFS-2318 | Major | Provide authentication to webhdfs using SPNEGO

Added two new conf properties dfs.web.authentication.kerberos.principal and dfs.web.authentication.kerberos.keytab for the SPNEGO servlet filter.


The hdfsproxy contrib component is no longer supported.


  • HDFS-2202 | Major | Changes to balancer bandwidth should not require datanode restart.

New dfsadmin command added: [-setBalancerBandwidth <bandwidth>] where bandwidth is max network bandwidth in bytes per second that the balancer is allowed to use on each datanode during balacing.

This is an incompatible change in 0.23. The versions of ClientProtocol and DatanodeProtocol are changed.


  • HDFS-2107 | Major | Move block management code to a package

Moved block management codes to a new package org.apache.hadoop.hdfs.server.blockmanagement.


  • HDFS-2087 | Major | Add methods to DataTransferProtocol interface

Declare methods in DataTransferProtocol interface, and change Sender and Receiver to implement the interface.


  • HDFS-2066 | Major | Create a package and individual class files for DataTransferProtocol

WARNING: No release note provided for this incompatible change.


  • HDFS-2058 | Major | DataTransfer Protocol using protobufs

WARNING: No release note provided for this incompatible change.


  • HDFS-2055 | Major | Add hflush support to libhdfs

Add hdfsHFlush to libhdfs.


  • HDFS-1966 | Major | Encapsulate individual DataTransferProtocol op header

Added header classes for individual DataTransferProtocol op headers.


  • HDFS-1963 | Major | HDFS rpm integration project

Create HDFS RPM package


  • HDFS-1945 | Major | Removed deprecated fields in DataTransferProtocol

Removed the deprecated fields in DataTransferProtocol.


  • HDFS-1939 | Major | ivy: test conf should not extend common conf

* Removed duplicated jars in test class path.


  • HDFS-1917 | Major | Clean up duplication of dependent jar files

Remove packaging of duplicated third party jar files


  • HDFS-1869 | Major | mkdirs should use the supplied permission for all of the created directories

A multi-level mkdir is now POSIX compliant. Instead of creating intermediate directories with the permissions of the parent directory, intermediate directories are created with permission bits of rwxrwxrwx (0777) as modified by the current umask, plus write and search permission for the owner.


  • HDFS-1843 | Minor | Discover file not found early for file append

I have committed this. Thanks to Bharath!


  • HDFS-1826 | Major | NameNode should save image to name directories in parallel during upgrade

I've committed this. Thanks, Matt!


  • HDFS-1814 | Major | HDFS portion of HADOOP-7214 - Hadoop /usr/bin/groups equivalent

Introduces a new command, “hdfs groups”, which displays what groups are associated with a user as seen by the NameNode.


  • HDFS-1761 | Major | Add a new DataTransferProtocol operation, Op.TRANSFER_BLOCK, instead of using RPC

Add a new DataTransferProtocol operation, Op.TRANSFER_BLOCK, for transferring RBW/Finalized with acknowledgement and without using RPC.


  • HDFS-1723 | Minor | quota errors messages should use the same scale

Updated the Quota exceptions to now use human readable output.


  • HDFS-1703 | Minor | HDFS federation: Improve start/stop scripts and add script to decommission datanodes

The masters file is no longer used to indicate which hosts to start the 2NN on. The 2NN is now started on hosts when dfs.namenode.secondary.http-address is configured with a non-wildcard IP.


  • HDFS-1675 | Major | Transfer RBW between datanodes

Added a new stage TRANSFER_RBW to DataTransferProtocol


  • HDFS-1636 | Minor | If dfs.name.dir points to an empty dir, namenode format shouldn't require confirmation

If dfs.name.dir points to an empty dir, namenode -format no longer requires confirmation.


  • HDFS-1626 | Minor | Make BLOCK_INVALIDATE_LIMIT configurable

Added a new configuration property dfs.block.invalidate.limit for FSNamesystem.blockInvalidateLimit.


  • HDFS-1620 | Minor | Rename HdfsConstants -> HdfsServerConstants, FSConstants -> HdfsConstants

Rename HdfsConstants interface to HdfsServerConstants, FSConstants interface to HdfsConstants


  • HDFS-1606 | Major | Provide a stronger data guarantee in the write pipeline

Added two configuration properties, dfs.client.block.write.replace-datanode-on-failure.enable and dfs.client.block.write.replace-datanode-on-failure.policy. Added a new feature to replace datanode on failure in DataTransferProtocol. Added getAdditionalDatanode(..) in ClientProtocol.


  • HDFS-1596 | Major | Move secondary namenode checkpoint configs from core-default.xml to hdfs-default.xml

Removed references to the older fs.checkpoint.* properties that resided in core-site.xml


  • HDFS-1594 | Major | When the disk becomes full Namenode is getting shutdown and not able to recover

Implemented a daemon thread to monitor the disk usage for periodically and if the disk usage reaches the threshold value, put the name node into Safe mode so that no modification to file system will occur. Once the disk usage reaches below the threshold, name node will be put out of the safe mode. Here threshold value and interval to check the disk usage are configurable.


  • HDFS-1582 | Major | Remove auto-generated native build files

The native build run when from trunk now requires autotools, libtool and openssl dev libraries.


  • HDFS-1560 | Minor | dfs.data.dir permissions should default to 700

The permissions on datanode data directories (configured by dfs.datanode.data.dir.perm) now default to 0700. Upon startup, the datanode will automatically change the permissions to match the configured value.


  • HDFS-1547 | Major | Improve decommission mechanism

Summary of changes to the decommissioning process:

After nodes are decommissioned, they are not shutdown. The decommissioned nodes are not used for writes. For reads, the decommissioned nodes are given as the last location to read from.

Number of live and dead decommissioned nodes are displayed in the namenode webUI.

Decommissioned nodes free capacity is not count towards the the cluster free capacity.


On web UI, missing block number now becomes accurate and under-replicated blocks do not include missing blocks.


  • HDFS-1526 | Major | Dfs client name for a map/reduce task should have some randomness

Make a client name has this format: DFSClient_applicationid_randomint_threadid, where applicationid = mapred.task.id or else = “NONMAPREDUCE”.


  • HDFS-1448 | Major | Create multi-format parser for edits logs file, support binary and XML formats initially

Offline edits viewer feature adds oev tool to hdfs script. Oev makes it possible to convert edits logs to/from native binary and XML formats. It uses the same framework as Offline image viewer.

Example usage:

$HADOOP_HOME/bin/hdfs oev -i edits -o output.xml


  • HDFS-1445 | Major | Batch the calls in DataStorage to FileUtil.createHardLink(), so we call it once per directory instead of once per file

Batch hardlinking during “upgrade” snapshots, cutting time from aprx 8 minutes per volume to aprx 8 seconds. Validated in both Linux and Windows. Depends on prior integration with patch for HADOOP-7133.


  • HDFS-1381 | Major | HDFS javadocs hard-code references to dfs.namenode.name.dir and dfs.datanode.data.dir parameters

Updated the JavaDocs to appropriately represent the new Configuration Keys that are used in the code. The docs did not match the code.


  • HDFS-1321 | Minor | If service port and main port are the same, there is no clear log message explaining the issue.

Added a check to match the sure RPC and HTTP Port's on the NameNode were not set to the same value, otherwise an IOException is throw with the appropriate message.


  • HDFS-1120 | Major | Make DataNode's block-to-device placement policy pluggable

Make the DataNode's block-volume choosing policy pluggable.


  • HDFS-1117 | Major | HDFS portion of HADOOP-6728 (ovehaul metrics framework)

Metrics names are standardized to use CapitalizedCamelCase. Some examples:

Metrics names using “_” is changed to new naming scheme. Eg: bytes_written changes to BytesWritten.

All metrics names start with capitals. Example: threadsBlocked changes to ThreadsBlocked.


  • HDFS-1073 | Major | Simpler model for Namenode's fs Image and edit Logs

The NameNode's storage layout for its name directories has been reorganized to be more robust. Each edit now has a unique transaction ID, and each file is associated with a transaction ID (for checkpoints) or a range of transaction IDs (for edit logs).


  • HDFS-1070 | Major | Speedup NameNode image loading and saving by storing local file names

This changes the fsimage format to be root directory-1 directory-2 ... directoy-n. Each directory stores all its children in the following format: Directory_full_path_name num_of_children child-1 ... child-n. Each inode stores only the last component of its path name into fsimage. This change requires an upgrade at deployment.


  • MAPREDUCE-3317 | Major | Rumen TraceBuilder is emiting null as hostname

Fixes Rumen to get correct hostName that includes rackName in attempt info.


  • MAPREDUCE-3241 | Major | (Rumen)TraceBuilder throws IllegalArgumentException

Rumen is fixed to ignore the AMRestartedEvent.


Resource limits are now expressed and enforced in terms of physical memory, rather than virtual memory. The virtual memory limit is set as a configurable multiple of the physical limit. The NodeManager's memory usage is now configured in units of MB rather than GB.


  • MAPREDUCE-3186 | Blocker | User jobs are getting hanged if the Resource manager process goes down and comes up while job is getting executed.

New Yarn configuration property:

Name: yarn.app.mapreduce.am.scheduler.connection.retries Description: Number of times AM should retry to contact RM if connection is lost.


  • MAPREDUCE-3166 | Major | Make Rumen use job history api instead of relying on current history file name format

Makes Rumen use job history api instead of relying on current history file name format.


  • MAPREDUCE-3157 | Major | Rumen TraceBuilder is skipping analyzing 0.20 history files

Fixes TraceBuilder to handle 0.20 history file names also.


  • MAPREDUCE-3112 | Major | Calling hadoop cli inside mapreduce job leads to errors

Removed inheritance of certain server environment variables (HADOOP_OPTS and HADOOP_ROOT_LOGGER) in task attempt process.


  • MAPREDUCE-3081 | Major | Change the name format for hadoop core and vaidya jar to be hadoop-{core/vaidya}-{version}.jar in vaidya.sh

contrib/vaidya/bin/vaidya.sh script fixed to use appropriate jars and classpath


Simple typo fix to allow ResourceManager to start instead of fail


  • MAPREDUCE-3041 | Blocker | Enhance YARN Client-RM protocol to provide access to information such as cluster's Min/Max Resource capabilities similar to that of AM-RM protocol

WARNING: No release note provided for this incompatible change.


  • MAPREDUCE-2930 | Major | Generate state graph from the State Machine Definition

Generate state graph from State Machine Definition


A new server has been added to yarn. It is a web proxy that sits in front of the AM web UI. The server is controlled by the yarn.web-proxy.address config. If that config is set, and it points to an address that is different then the RM web interface then a separate proxy server needs to be launched.

This can be done by running

yarn-daemon.sh start proxyserver

If a separate proxy server is needed other configs also may need to be set, if security is enabled. yarn.web-proxy.principal yarn.web-proxy.keytab

The proxy server is stateless and should be able to support a VIP or other load balancing sitting in front of multiple instances of this server.


  • MAPREDUCE-2846 | Blocker | a small % of all tasks fail with DefaultTaskController

Fixed a race condition in writing the log index file that caused tasks to ‘fail’.


“mapred/job -list” now contains map/reduce, container, and resource information.


Generalizes token renewal and canceling to a common interface and provides a plugin interface for adding renewers for new kinds of tokens. Hftp changed to store the tokens as HFTP and renew them over http.


  • MAPREDUCE-2736 | Major | Remove unused contrib components dependent on MR1

The pre-MR2 MapReduce implementation (JobTracker, TaskTracer, etc) and contrib components are no longer supported. This implementation is currently supported in the 0.20.20x releases.


Adding a simple, DistributedShell application as an alternate framework to MapReduce and to act as an illustrative example for porting applications to YARN.


  • MAPREDUCE-2702 | Blocker | [MR-279] OutputCommitter changes for MR Application Master recovery

Enhance OutputCommitter and FileOutputCommitter to allow for recover of tasks across job restart.


New config added:

// the maximum number of completed applications the RM keeps <name>yarn.server.resourcemanager.expire.applications.completed.max</name>


IsolationRunner is no longer maintained. See MAPREDUCE-2637 for its replacement.


Gridmix now prints a summary information after every run. It summarizes the runs w.r.t input trace details, input data statistics, cli arguments, data-gen runtime, simulation runtimes etc and also the cluster w.r.t map slots, reduce slots, jobtracker-address, hdfs-address etc.


  • MAPREDUCE-2563 | Major | Gridmix high ram jobs emulation system tests.

Adds system tests to test the High-Ram feature in Gridmix.


  • MAPREDUCE-2554 | Major | Gridmix distributed cache emulation system tests.

Adds distributed cache related system tests to Gridmix.


Adds system tests for testing the compression emulation feature of Gridmix.


Adds High-Ram feature emulation in Gridmix.


Added 2 new config parameters:

mapreduce.reduce.shuffle.catch.exception.stack.regex mapreduce.reduce.shuffle.catch.exception.message.regex


Created rpm and debian packages for MapReduce.


  • MAPREDUCE-2517 | Major | Porting Gridmix v3 system tests into trunk branch.

Adds system tests to Gridmix. These system tests cover various features like job types (load and sleep), user resolvers (round-robin, submitter-user, echo) and submission modes (stress, replay and serial).


  • MAPREDUCE-2494 | Major | Make the distributed cache delete entires using LRU priority

Added config option mapreduce.tasktracker.cache.local.keep.pct to the TaskTracker. It is the target percentage of the local distributed cache that should be kept in between garbage collection runs. In practice it will delete unused distributed cache entries in LRU order until the size of the cache is less than mapreduce.tasktracker.cache.local.keep.pct of the maximum cache size. This is a floating point value between 0.0 and 1.0. The default is 0.95.


  • MAPREDUCE-2492 | Major | [MAPREDUCE] The new MapReduce API should make available task's progress to the task

Map and Reduce task can access the attempt's overall progress via TaskAttemptContext.


Removed duplicated hadoop-common library dependencies.


Looks great. I just committed this. Thanks Siddharth!


  • MAPREDUCE-2474 | Minor | Add docs to the new API Partitioner on how to access Job Configuration data

Improve the Partitioner interface's docs to help fetch Job Configuration objects.


  • MAPREDUCE-2473 | Major | MR portion of HADOOP-7214 - Hadoop /usr/bin/groups equivalent

Introduces a new command, “mapred groups”, which displays what groups are associated with a user as seen by the JobTracker.


  • MAPREDUCE-2469 | Major | Task counters should also report the total heap usage of the task

Task attempt's total heap usage gets recorded and published via counters as COMMITTED_HEAP_BYTES.


  • MAPREDUCE-2455 | Major | Remove deprecated JobTracker.State in favour of JobTrackerStatus

WARNING: No release note provided for this incompatible change.


I just committed this. Thanks Luke!


MRUnit is now available as a separate Apache project.


  • MAPREDUCE-2417 | Major | In Gridmix, in RoundRobinUserResolver mode, the testing/proxy users are not associated with unique users in a trace

Fixes Gridmix in RoundRobinUserResolver mode to map testing/proxy users to unique users in a trace.


  • MAPREDUCE-2416 | Major | In Gridmix, in RoundRobinUserResolver, the list of groups for a user obtained from users-list-file is incorrect

Removes the restriction of specifying group names in users-list file for Gridmix in RoundRobinUserResolver mode.


  • MAPREDUCE-2408 | Major | Make Gridmix emulate usage of data compression

Emulates the MapReduce compression feature in Gridmix. By default, compression emulation is turned on. Compression emulation can be disabled by setting ‘gridmix.compression-emulation.enable’ to ‘false’. Use ‘gridmix.compression-emulation.map-input.decompression-ratio’, ‘gridmix.compression-emulation.map-output.compression-ratio’ and ‘gridmix.compression-emulation.reduce-output.compression-ratio’ to configure the compression ratios at map input, map output and reduce output side respectively. Currently, compression ratios in the range [0.07, 0.68] are supported. Gridmix auto detects whether map-input, map output and reduce output should emulate compression based on original job's compression related configuration parameters.


  • MAPREDUCE-2407 | Major | Make Gridmix emulate usage of Distributed Cache files

Makes Gridmix emulate HDFS based distributed cache files and local file system based distributed cache files.


  • MAPREDUCE-2405 | Major | MR-279: Implement uber-AppMaster (in-cluster LocalJobRunner for MRv2)

An efficient implementation of small jobs by running all tasks in the MR ApplicationMaster JVM, there-by affecting lower latency.


The native build run when from trunk now requires autotools, libtool and openssl dev libraries.


  • MAPREDUCE-2254 | Major | Allow setting of end-of-record delimiter for TextInputFormat

TextInputFormat may now split lines with delimiters other than newline, by specifying a configuration parameter “textinputformat.record.delimiter”


  • MAPREDUCE-2225 | Blocker | MultipleOutputs should not require the use of ‘Writable’

MultipleOutputs should not require the use/check of ‘Writable’ interfaces in key and value classes.


  • MAPREDUCE-2207 | Major | Task-cleanup task should not be scheduled on the node that the task just failed

Task-cleanup task should not be scheduled on the node that the task just failed


  • MAPREDUCE-2153 | Major | Bring in more job configuration properties in to the trace file

Adds job configuration parameters to the job trace. The configuration parameters are stored under the ‘jobProperties’ field as key-value pairs.


  • MAPREDUCE-2137 | Major | Mapping between Gridmix jobs and the corresponding original MR jobs is needed

New configuration properties gridmix.job.original-job-id and gridmix.job.original-job-name in the configuration of simulated job are exposed/documented to gridmix user for mapping between original cluster's jobs and simulated jobs.


Adds total heap usage emulation to Gridmix. Also, Gridmix can configure the simulated task's JVM heap options with max heap options obtained from the original task (via Rumen). Use ‘gridmix.task.jvm-options.enable’ to disable the task max heap options configuration.


Adds cumulative cpu usage emulation to Gridmix


  • MAPREDUCE-2104 | Major | Rumen TraceBuilder Does Not Emit CPU/Memory Usage Details in Traces

Adds cpu, physical memory, virtual memory and heap usages to TraceBuilder's output.


  • MAPREDUCE-2037 | Major | Capturing interim progress times, CPU usage, and memory usage, when tasks reach certain progress thresholds

Capture intermediate task resource consumption information: * Time taken so far * CPU load [either at the time the data are taken, or exponentially smoothed] * Memory load [also either at the time the data are taken, or exponentially smoothed]

This would be taken at intervals that depend on the task progress plateaus. For example, reducers have three progress ranges - [0-1/3], (1/3-2/3], and (2/3-3/3] - where fundamentally different activities happen. Mappers have different boundaries that are not symmetrically placed [0-9/10], (9/10-1]. Data capture boundaries should coincide with activity boundaries. For the state information capture [CPU and memory] we should average over the covered interval.


  • MAPREDUCE-1996 | Trivial | API: Reducer.reduce() method detail misstatement

Fix a misleading documentation note about the usage of Reporter objects in Reducers.


  • MAPREDUCE-1978 | Major | [Rumen] TraceBuilder should provide recursive input folder scanning

Adds -recursive option to TraceBuilder for scanning the input directories recursively.


  • MAPREDUCE-1906 | Major | Lower default minimum heartbeat interval for tasktracker > Jobtracker

The default minimum heartbeat interval has been dropped from 3 seconds to 300ms to increase scheduling throughput on small clusters. Users may tune mapreduce.jobtracker.heartbeats.in.second to adjust this value.


  • MAPREDUCE-1811 | Minor | Job.monitorAndPrintJob() should print status of the job at completion

Print the resultant status of a Job on completion instead of simply saying ‘Complete’.


  • MAPREDUCE-1738 | Major | MapReduce portion of HADOOP-6728 (ovehaul metrics framework)

WARNING: No release note provided for this incompatible change.


  • MAPREDUCE-1461 | Major | Feature to instruct rumen-folder utility to skip jobs worth of specific duration

Added a ‘‘-starts-after’ option to Rumen’s Folder utility. The time duration specified after the ‘-starts-after’ option is an offset with respect to the submit time of the first job in the input trace. Jobs in the input trace having a submit time (relative to the first job's submit time) lesser than the specified offset will be ignored.


Fix a misleading exception message in case the Chained Mappers have mismatch in input/output Key/Value pairs between them.


  • MAPREDUCE-1159 | Trivial | Limit Job name on jobtracker.jsp to be 80 char long

Job names on jobtracker.jsp should be 80 characters long at most.


  • MAPREDUCE-993 | Minor | bin/hadoop job -events <jobid> <from-event-#> <#-of-events> help message is confusing

Added a helpful description message to the mapred job -events command.


  • MAPREDUCE-901 | Major | Move Framework Counters into a TaskMetric structure

Efficient implementation of MapReduce framework counters.


  • MAPREDUCE-587 | Minor | Stream test TestStreamingExitStatus fails with Out of Memory

Fixed the streaming test TestStreamingExitStatus‘s failure due to an OutOfMemory error by reducing the testcase’s io.sort.mb.


MapReduce has undergone a complete re-haul in hadoop-0.23 and we now have, what we call, MapReduce 2.0 (MRv2).

The fundamental idea of MRv2 is to split up the two major functionalities of the JobTracker, resource management and job scheduling/monitoring, into separate daemons. The idea is to have a global ResourceManager (RM) and per-application ApplicationMaster (AM). An application is either a single job in the classical sense of Map-Reduce jobs or a DAG of jobs. The ResourceManager and per-node slave, the NodeManager (NM), form the data-computation framework. The ResourceManager is the ultimate authority that arbitrates resources among all the applications in the system. The per-application ApplicationMaster is, in effect, a framework specific library and is tasked with negotiating resources from the ResourceManager and working with the NodeManager(s) to execute and monitor the tasks.

The ResourceManager has two main components: * Scheduler (S) * ApplicationsManager (ASM)

The Scheduler is responsible for allocating resources to the various running applications subject to familiar constraints of capacities, queues etc. The Scheduler is pure scheduler in the sense that it performs no monitoring or tracking of status for the application. Also, it offers no guarantees on restarting failed tasks either due to application failure or hardware failures. The Scheduler performs its scheduling function based the resource requirements of the applications; it does so based on the abstract notion of a Resource Container which incorporates elements such as memory, cpu, disk, network etc.

The Scheduler has a pluggable policy plug-in, which is responsible for partitioning the cluster resources among the various queues, applications etc. The current Map-Reduce schedulers such as the CapacityScheduler and the FairScheduler would be some examples of the plug-in.

The CapacityScheduler supports hierarchical queues to allow for more predictable sharing of cluster resources. The ApplicationsManager is responsible for accepting job-submissions, negotiating the first container for executing the application specific ApplicationMaster and provides the service for restarting the ApplicationMaster container on failure.

The NodeManager is the per-machine framework agent who is responsible for launching the applications' containers, monitoring their resource usage (cpu, memory, disk, network) and reporting the same to the Scheduler.

The per-application ApplicationMaster has the responsibility of negotiating appropriate resource containers from the Scheduler, tracking their status and monitoring for progress.