
# 配置使用分布式缓存执行MapReduce任务
#### 配置场景
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
本章节操作适用于MRS 3.x及之后版本。
分布式缓存在两种情况下非常有用。
- **滚动升级**
  在升级过程中，应用程序必须保持文字内容（jar文件或配置文件）不变。而这些内容并非基于当前版本的Yarn，而是要基于其提交时的版本。一般情况下，应用程序（例如MapReduce、Hive、Tez等）需要进行完整的本地安装，将库安装至所有的集群机器（客户端及服务器端机器）中。当集群内开始进行滚动升级或降级时，本地安装的库的版本必然会在应用运行过程时发生改变。在滚动升级过程中，首先只会对少数NodeManager进行升级，这些NodeManager会获得新版本的软件。这导致了行为的不一致，并可能发生运行时错误。
  
- **同时存在多个Yarn版本**
  集群管理员可能会在一个集群内运行使用多个版本Yarn及Hadoop jars的任务。这在当前很难实现，因为jars已被本地化且只有一个版本。
  MapReduce应用框架可以通过分布式缓存进行部署，且无需依赖安装中复制的静态版本。因此，可以在HDFS中存放多版本的Hadoop，并通过配置"mapred-site.xml"文件指定任务默认使用的版本。只需设置适当的配置属性，用户就可以运行不同版本的MapReduce，而无需使用部署在集群中的版本。
  图1具有多个版本NodeManagers及Applications的集群   
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0264265542.png "点击放大")
  在[图1]中：可以看出，应用程序可以使用HDFS中的Hadoop jars，而无需使用本地版本。因此在滚动升级中，即使NodeManager已经升级，应用程序仍然可以运行旧版本的Hadoop。
  
 
#### 配置描述
1. 进入HDFS客户端。 
   1. 以客户端安装用户，登录安装客户端的节点。
   
   2. 执行以下命令，切换到客户端安装目录。 **cd** *客户端安装路径*
      
   
   3. 执行以下命令配置环境变量。 **source bigdata_env**
      
   
   4. 如果集群为安全模式，执行以下命令进行用户认证。普通模式集群无需执行用户认证。 **kinit** *组件业务用户*
      
   
   
   
   
2. 将指定版本的MapReduce tar包存放至HDFS中应用程序可以访问的目录下，如下所示： 
   *$HADOOP_HOME* **/bin/hdfs dfs -put** *hadoop-x.tar.gz* */mapred/framework/*
   
   
3. 执行以下命令，根据[表1]，对"客户端安装路径/Yarn/config/mapred-site.xml"文件中的参数进行设置。
   
   **vi** *客户端安装路径* **/Yarn/config/mapred-site.xml**
    表1分布式缓存相关参数 
   | **参数**                               | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | **默认值** |
   |:---|:---|:---|
   | mapreduce.application.framework.path | 此参数值为指向存档位置的URL。 说明： 如果对URL片段标示名称进行如下指定，该属性还可以为存档创建别名。作为示例，这里将别名设为了mr-framework。 ``` <property> <name>mapreduce.application.framework.path</name> <value>hdfs:/mapred/framework/hadoop-x.tar.gz#mr-framework</value> </property> ```                                                                                                                                                                                                                                                                                                                                                                                                     | NA      |
   | mapreduce.application.classpath      | 设定属性mapreduce.application.classpath，使其可以包含类目录中相关的MR jars。 说明： 例如，此处利用在框架路径中使用过的别名"mr-framework"对目录进行匹配。 ``` <property> <name>mapreduce.application.classpath</name>   <value>$PWD/mr-framework/hadoop/share/hadoop/mapreduce/*:$PWD/mr-framework/hadoop/share/hadoop/mapreduce/lib/*:$PWD/mr-framework/hadoop/share/hadoop/common/*:$PWD/mr-framework/hadoop/share/hadoop/common/lib/*:$PWD/mr-framework/hadoop/share/hadoop/yarn/*:$PWD/mr-framework/hadoop/share/hadoop/yarn/lib/*:$PWD/mr-framework/hadoop/share/hadoop/hdfs/*:$PWD/mr-framework/hadoop/share/hadoop/hdfs/lib/*:/etc/hadoop/conf/secure</value></property> ```  | NA      |
      
   可以将多个版本的MapReduce tar包上传至HDFS。不同的"mapred-site.xml"文件可以指向不同的位置。用户在此之后可以针对特定的"mapred-site.xml"文件运行任务。以下是一个针对x版本的MapReduce tar包运行MapReduce任务的样例：
   hadoop jar *share/hadoop/mapreduce/hadoop-mapreduce-examples-\*.jar* *pi* -conf etc/hadoop-x/mapred-site.xml *10 10*
   
   
 
