更新时间:2023-03-17 GMT+08:00

配置使用分布式缓存

配置场景

本章节操作适用于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的集群

图1中:可以看出,应用程序可以使用HDFS中的Hadoop jars,而无需使用本地版本。因此在滚动升级中,即使NodeManager已经升级,应用程序仍然可以运行旧版本的Hadoop。

配置描述

  1. 首先,需要将指定版本的MapReduce tar包存放至HDFS中应用程序可以访问的目录下,如下所示:

    $HADOOP_HOME/bin/hdfs dfs -put hadoop-x.tar.gz /mapred/framework/

  2. 根据表1,对“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

    可以将多个版本的MR tarball上传至HDFS。不同的“mapred-site.xml”文件可以指向不同的位置。用户在此之后可以针对特定的“mapred-site.xml”文件运行任务。以下是一个针对x版本的MR tarball运行MR任务的例子:

    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi -conf etc/hadoop-x/mapred-site.xml 10 10