:original_name: mrs_08_00503.html

.. _mrs_08_00503:

MapReduce Enhanced Open Source Features
=======================================

MapReduce Enhanced Open-Source Feature: JobHistoryServer HA
-----------------------------------------------------------

JobHistoryServer (JHS) is the server used to view historical MapReduce task information. Currently, the open source JHS supports only single-instance services. JHS HA can solve the problem that an application fails to access the MapReduce API when SPOFs occur on the JHS, which causes the application fails to be executed. This greatly improves the high availability of the MapReduce service.


.. figure:: /_static/images/en-us_image_0000001296590602.png
   :alt: **Figure 1** Status transition of the JobHistoryServer HA active/standby switchover

   **Figure 1** Status transition of the JobHistoryServer HA active/standby switchover

**JobHistoryServer High Availability**

-  ZooKeeper is used to implement active/standby election and switchover.
-  JHS uses the floating IP address to provide services externally.
-  Both the JHS single-instance and HA deployment modes are supported.
-  Only one node starts the JHS process at a time point to prevent multiple JHS operations from processing the same file.
-  You can perform scale-out, scale-in, instance migration, upgrade, and health check.

Enhanced Open Source Feature: Improving MapReduce Performance by Optimizing the Merge/Sort Process in Specific Scenarios
------------------------------------------------------------------------------------------------------------------------

The figure below shows the workflow of a MapReduce task.


.. figure:: /_static/images/en-us_image_0000001349390613.png
   :alt: **Figure 2** MapReduce job

   **Figure 2** MapReduce job


.. figure:: /_static/images/en-us_image_0000001349190317.png
   :alt: **Figure 3** MapReduce job execution flow

   **Figure 3** MapReduce job execution flow

The Reduce process is divided into three different steps: Copy, Sort (actually supposed to be called Merge), and Reduce. In Copy phase, Reducer tries to fetch the output of Maps from NodeManagers and store it on Reducer either in memory or on disk. Shuffle (Sort and Merge) phase then begins. All the fetched map outputs are being sorted, and segments from different map outputs are merged before being sent to Reducer. When a job has a large number of maps to be processed, the shuffle process is time-consuming. For specific tasks (for example, SQL tasks such as hash join and hash aggregation), sorting is not mandatory during the shuffle process. However, the sorting is required by default in the shuffle process.

This feature is enhanced by using the MapReduce API, which can automatically close the Sort process for such tasks. When the sorting is disabled, the API directly merges the fetched Maps output data and sends the data to Reducer. This greatly saves time, and significantly improves the efficiency of SQL tasks.

Enhanced Open Source Feature: Small Log File Problem Solved After Optimization of MR History Server
---------------------------------------------------------------------------------------------------

After the job running on Yarn is executed, NodeManager uses LogAggregationService to collect and send generated logs to HDFS and deletes them from the local file system. After the logs are stored to HDFS, they are managed by MR HistoryServer. LogAggregationService will merge local logs generated by containers to a log file and upload it to the HDFS, reducing the number of log files to some extent. However, in a large-scale and busy cluster, there will be excessive log files on HDFS after long-term running.

For example, if there are 20 nodes, about 18 million log files are generated within the default clean-up period (15 days), which occupy about 18 GB of the memory of a NameNode and slow down the HDFS system response.

Only the reading and deletion are required for files stored on HDFS. Therefore, Hadoop Archives can be used to periodically archive the directory of collected log files.

**Archiving Logs**

The AggregatedLogArchiveService module is added to MR HistoryServer to periodically check the number of files in the log directory. When the number of files reaches the threshold, AggregatedLogArchiveService starts an archiving task to archive log files. After archiving, it deletes the original log files to reduce log files on HDFS.

**Cleaning Archived Logs**

Hadoop Archives does not support deletion in archived files. Therefore, the entire archive log package must be deleted upon log clean-up. The latest log generation time is obtained by modifying the AggregatedLogDeletionService module. If all log files meet the clean-up requirements, the archive log package can be deleted.

**Browsing Archived Logs**

Hadoop Archives allows URI-based access to file content in the archive log package. Therefore, if MR History Server detects that the original log files do not exist during file browsing, it directly redirects the URI to the archive log package to access the archived log file.

.. note::

   -  This function invokes Hadoop Archives of HDFS for log archiving. Because the execution of an archiving task by Hadoop Archives is to run an MR application. Therefore, after an archiving task is executed, an MR execution record is added.
   -  This function of archiving logs is based on the log collection function. Therefore, this function is valid only when the log collection function is enabled.
