翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_yarn_cluster_deploy.html#topic_11_4
版本: 5.14.2
重要:
- 在不使用Cloudera Manager的系统上遵循这些命令行指示信息。
- 此信息特别适用于CDH 5.14.X。有关其他版本的信息,请参阅Cloudera文档。
本节仅介绍YARN群集的配置,专门针对从软件包安装YARN的管理员量身定制。
重要:
在配置和部署HDFS后执行以下任务:
继续阅读:
- 关于MapReduce v2(YARN)
- 第1步:配置YARN集群的属性
- 第2步:配置YARN守护进程
- 第3步:配置JobHistory服务器
- 第4步:配置staging目录
- 第5步:如果有必要,请将自定义配置部署到整个群集
- 步骤6:如果必要,请在群集中的每台主机上启动HDFS
- 步骤7:如有必要,创建HDFS / tmp目录
- 第8步:创建历史目录并设置权限
- 第9步:启动YARN和MapReduce JobHistory服务器
- 第10步:为每个MapReduce用户创建一个主目录
- 第11步:配置Hadoop守护进程在启动时运行
注意: 运行服务
使用service命令来启动,停止和重新启动CDH组件,而不是直接在/etc/init.d中运行脚本。
关于MapReduce v2(YARN)
CDH 5中默认安装是基于YARN框架构建的MapReduce 2 (MRv2)。在本文档中,我们通常将这个新版本称为 YARN。MRv2的YARN体系结构的基本思想是将JobTracker的两个主要职责 – 资源管理和作业调度/监视 – 分解为单独的守护进程:全局的ResourceManager(RM)和每个应用程序的ApplicationMasters(AM)。使用MRv2,ResourceManager(RM)和per-host NodeManagers(NM)构成数据计算框架。ResourceManager服务有效地替代了JobTracker的功能,并且NodeManagers替代TaskTracker守护进程在工作主机上运行。ApplicationMaster实际上是一个特定的框架库,它负责与ResourceManager协商资源并与NodeManager一起运行和监视任务。有关新体系结构的详细信息,请参阅Apache Hadoop NextGen MapReduce(YARN)。
另请参阅为作业选择适当的JAR文件。
重要:
确保你没有试图在同一主机上同时运行MRv1和YARN。建议不要这样做,特别是在不受Cloudera Manager管理的群集中; 它会降低性能并可能导致群集不稳定。
- 如果您已经从软件包安装了YARN,请按照以下说明进行部署。(改为部署MRv1,请参阅 在群集上部署MapReduce v1(MRv1)。)
- 如果您从tarball安装了CDH 5,则默认部署为YARN。请记住,此页面上的说明适用于从软件包安装后进行的部署。
第1步:配置YARN集群的属性
注意:
在您复制Hadoop配置时创建的自定义配置目录中编辑这些文件。完成后,将此配置推送到群集中的所有主机; 请参阅步骤5。
属性 | 配置文件 | 描述 |
---|---|---|
mapreduce.framework.name | mapred-site.xml | 如果您打算运行YARN,则必须将此属性设置为yarn |
示例配置:
mapred-site.xml中:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第2步:配置YARN守护进程
配置以下服务:ResourceManager(在专用主机上)和NodeManager(在计划运行MapReduce v2作业的每台主机上)。
下表显示了您必须为集群配置的yarn-site.xml 中最重要的属性。
属性 | 建议值 | 描述 |
---|---|---|
yarn.nodemanager.aux-services | mapreduce_shuffle | 需要为Map Reduce应用程序设置的Shuffle服务。 |
yarn.resourcemanager.hostname | resourcemanager.company.com | 以下属性将设置为此主机上的默认端口:yarn.resourcemanager. address, yarn.resourcemanager. admin.address, yarn.resourcemanager. scheduler.address, yarn.resourcemanager. resource-tracker.address, yarn.resourcemanager. webapp.address |
yarn.application.classpath | $HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/, $HADOOP_COMMON_HOME/lib/, $HADOOP_HDFS_HOME/, $HADOOP_HDFS_HOME/lib/, $HADOOP_MAPRED_HOME/, $HADOOP_MAPRED_HOME/lib/, $HADOOP_YARN_HOME/, $HADOOP_YARN_HOME/lib/ | 应用程序的类路径Classpath。 |
yarn.log.aggregation-enable | true |
接下来,您需要指定,创建并将正确的权限分配给您希望YARN守护程序存储数据的本地目录。
您可以通过配置所有群集主机上的yarn-site.xml中的以下两个属性来指定目录:
属性 | 描述 |
---|---|
yarn.nodemanager.local-dirs | 指定NodeManager存储其本地化文件的目录的URI。运行特定YARN应用程序所需的所有文件将在应用程序运行期间放在这里。Cloudera建议为此属性在每个JBOD安装点上指定一个目录; 例如,file:///data/1/yarn/local 到 /data/N/yarn/local。 |
yarn.nodemanager.log-dirs | 指定NodeManager存储容器日志文件的目录的URI。Cloudera建议为此属性在每个JBOD安装点上指定一个目录; 例如,file:///data/1/yarn/logs 到 file:///data/N/yarn/logs. |
yarn.nodemanager.remote-app-log-dir | 指定聚合日志的目录的URI。将该值设置为hdfs://namenode-host.company.com:8020/var/log/hadoop-yarn/apps (使用NameNode的完全限定名) 或 hdfs:/var/log/hadoop-yarn/apps.。 |
这是一个示例配置:
**yarn-site.xml: **
<property>
<name>yarn.resourcemanager.hostname</name>
<value>resourcemanager.company.com</value>
</property>
<property>
<description>Classpath for typical applications.</description>
<name>yarn.application.classpath</name>
<value>
$HADOOP_CONF_DIR,
$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///data/1/yarn/local,file:///data/2/yarn/local,file:///data/3/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:///data/1/yarn/logs,file:///data/2/yarn/logs,file:///data/3/yarn/logs</value>
</property>
<property>
<name>yarn.log.aggregation-enable</name>
<value>true</value>
</property>
<property>
<description>Where to aggregate logs</description>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs://<namenode-host.company.com>:8020/var/log/hadoop-yarn/apps</value>
</property>
在yarn-site.xml 中指定这些目录后,您必须创建目录并为群集中每台主机上的目录分配正确的文件权限。
在以下说明中,本地路径示例用于表示Hadoop参数。更改路径示例以匹配您的配置。
配置YARN使用的本地存储目录:
- 创建yarn.nodemanager.local-dirs 本地目录:
$ sudo mkdir -p /data/1/yarn/local /data/2/yarn/local /data/3/yarn/local /data/4/yarn/local
- 创建 yarn.nodemanager.log-dirs 本地目录:
$ sudo mkdir -p /data/1/yarn/logs /data/2/yarn/logs /data/3/yarn/logs /data/4/yarn/logs
- 配置 yarn.nodemanager.local-dirs 的所有者 yarn 用户:
$ sudo chown -R yarn:yarn /data/1/yarn/local /data/2/yarn/local /data/3/yarn/local /data/4/yarn/local
- 配置yarn.nodemanager.log-dirs 的所有者yarn 用户:
$ sudo chown -R yarn:yarn /data/1/yarn/logs /data/2/yarn/logs /data/3/yarn/logs /data/4/yarn/logs
以下是本地目录的正确所有者和权限摘要:
目录 | 所有者 | 权限 |
---|---|---|
yarn.nodemanager.local-dirs | yarn:yarn | drwxr-xr-x |
yarn.nodemanager.log-dirs | yarn:yarn | drwxr-xr-x |
第3步:配置JobHistory服务器
如果您决定在群集上运行YARN而不是MRv1,则还应该运行MapReduce JobHistory Server。下表显示了您在mapred-site.xml中必须配置的最重要的属性。
属性 | 建议值 | 描述 |
---|---|---|
mapreduce.jobhistory.address | historyserver.company.com:10020 | JobHistory服务器的地址 host:port |
mapreduce.jobhistory.webapp.address | historyserver.company.com:19888 | JobHistory服务器Web应用程序的地址host:port |
另外,请确保代理已对mapred 用户启用 ; 在 core-site.xml中配置以下属性。
属性 | 建议值 | 描述 |
---|---|---|
hadoop.proxyuser.mapred.groups | * | 允许 mapred 用户移动属于这些组中的用户的文件 |
hadoop.proxyuser.mapred.hosts | * | 允许mapred用户移动属于这些主机的文件 |
第4步:配置Staging目录
YARN运行作业时需要一个临时目录来存放临时文件。默认情况下它会创建具有严格限制权限的目录/tmp/hadoop-yarn/staging ,这个权限可能会阻止其他用户运行作业。为了避免这种情况,你应该自己配置和创建Staging 目录; 在下面的例子中我们/user:
- 在mapred-site.xml配置 yarn.app.mapreduce.am.staging-dir:
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
- 一旦HDFS启动并运行,您将创建该目录和一个history 子目录下(参见步骤8)。
或者,您可以执行以下操作:
- 在mapred-site.xml中 配置mapreduce.jobhistory.intermediate-done-dir and mapreduce.jobhistory.done-dir 。
- 创建这两个目录。
- 设置权限 mapreduce.jobhistory.intermediate-done-dir 为 1777。
- 设置权限 mapreduce.jobhistory.done-dir 为750。
如果你按上述配置了mapreduce.jobhistory.intermediate-done-dir and mapreduce.jobhistory.done-dir ,您可以跳过步骤8。
第5步:如果有必要,请将自定义配置部署到整个群集
如果您尚未这样做,请部署配置。
步骤6:如果必要,请在群集中的每台主机上启动HDFS
如果您尚未这样做,请启动HDFS。
步骤7:如有必要,创建HDFS / tmp目录
如果您尚未这样做,请创建/ tmp目录。
重要:
如果你不创建 / tmp目录限,您以后可能会遇到CDH组件的问题。具体来说,如果你不创建/ tmp目录,另一个进程可能会自动创建限制性权限,以防止其他应用程序使用它,会造成其他组件无法正常使用该目录。
步骤5 6 7 请参见 上篇翻译: 集群部署HDFS
第8步:创建history 目录和设置权限
这是您在步骤4中配置的staging目录的子目录。在这个例子中,我们使用/user/history。创建并设置权限,如下所示:
sudo -u hdfs hadoop fs -mkdir -p /user/history
sudo -u hdfs hadoop fs -chmod -R 1777 /user/history
sudo -u hdfs hadoop fs -chown mapred:hadoop /user/history
第9步:启动YARN和MapReduce JobHistory服务器
要启动YARN,请启动ResourceManager和NodeManager服务:
注意:
确保在启动NodeManager服务之前先启动ResourceManager。
在ResourceManager系统上:
$ sudo service hadoop-yarn-resourcemanager start
在每个NodeManager系统上(通常与运行DataNode服务的系统相同):
$ sudo service hadoop-yarn-nodemanager start
启动MapReduce JobHistory服务器
在MapReduce JobHistory服务器系统上:
$ sudo service hadoop-mapreduce-historyserver start
第10步:为每个MapReduce用户创建一个主目录
在NameNode上为每个MapReduce用户创建一个主目录。例如:
$ sudo -u hdfs hadoop fs -mkdir /user/<user>
$ sudo -u hdfs hadoop fs -chown <user> /user/<user>
其中<user>是每个用户的Linux用户名。
或者,您可以以每个Linux用户身份登录(或者编写脚本来执行此操作),然后按照以下步骤创建主目录:
sudo -u hdfs hadoop fs -mkdir /user/$USER
sudo -u hdfs hadoop fs -chown $USER /user/$USER
第11步:配置Hadoop守护进程在启动时运行
使用chkconfig 工具进行配置。
对于Hadoop核心服务配置随机器启动,参见 Configuring init to Start Core Hadoop System Services.
非核心组件也可以配置随机器启动,在安装后参见 Configuring init to Start Non-core Hadoop System Services for instructions.