配置使用分布式缓存
配置场景
分布式缓存在两种情况下非常有用。
滚动升级
在升级过程中,应用程序必须保持文字内容(jar文件或配置文件)不变。而这些内容并非基于当前版本的YARN,而是要基于其提交时的版本。这是一个具有挑战性的问题。一般情况下,应用程序(例如MapReduce、Hive、Tez等)需要进行完整的本地安装,将库安装至所有的集群机器(客户端及服务器端机器)中。当集群内开始进行滚动升级或降级时,本地安装的库的版本必然会在应用运行过程时发生改变。在滚动升级过程中,首先只会对少数NodeManager进行升级,这些NodeManager会获得新版本的软件。这导致了行为的不一致,并可能发生运行时错误。
同时存在多个YARN版本
集群管理员可能会在一个集群内运行使用多个版本YARN及Hadoop jars的任务。这在当前很难实现,因为jars已被本地化且只有一个版本。
MapReduce应用框架可以通过分布式缓存进行部署,且无需依赖安装中复制的静态版本。因此,可以在HDFS中存放多版本的Hadoop,并通过配置“mapred-site.xml”文件指定任务默认使用的版本。只需设置适当的配置属性,用户就可以运行不同版本的MapReduce,而无需使用部署在集群中的版本。
在图1中:可以看出,应用程序可以使用HDFS中的Hadoop jars,而无需使用本地版本。因此在滚动升级中,即使NodeManager已经升级,应用程序仍然可以运行旧版本的Hadoop。
配置描述
- 首先,需要将指定版本的MapReduce tar包存放至HDFS中应用程序可以访问的目录下,如下所示:
$HADOOP_HOME/bin/hdfs dfs -put hadoop-x.tar.gz /mapred/framework/
- 根据表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