根据hdfs的auditlog以及fsimage分析,yarn的日志文件占用了10%-20%的rpc请求以及文件量,这对namenode的性能有比较大的影响,特别是当集群规模越来越大,会影响生产业务。故下面的方案对yarn日志进行拆分,将日志写入一个独立的hdfs集群

运行yarn的集群(pascdev),日志写入集群(pasc)

一、   配置

hdfs-site.xml

//添加日志写入集群的nameservice

<property>

<name>dfs.nameservices</name>

<value>pascdev,pasc</value>

</property>

//添加日志写入集群的rpc端口

<property>

<name>dfs.ha.namenodes.pasc</name>

<value>CDM01,CDM02</value>

</property>

<property>

<name>dfs.namenode.rpc-address.pasc.CDM01</name>

<value>CDM01.qa.pab.com.cn:8020</value>

</property>

<property>

<name>dfs.namenode.servicerpc-address.pasc.CDM01</name>

<value>CDM01.qa.pab.com.cn:8021</value>

</property>

<property>

<name>dfs.namenode.rpc-address.pasc.CDM02</name>

<value>CDM02.qa.pab.com.cn:8020</value>

</property>

<property>

<name>dfs.namenode.servicerpc-address.pasc.CDM02</name>

<value>CDM02.qa.pab.com.cn:8021</value>

</property>

//添加日志集群的client.failover.proxy

<property>

<name>dfs.client.failover.proxy.provider.pasc</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

//为防止datanode向日志集群的namenode执行块汇报,添加以下配置

<property>

<name>dfs.internal.nameservices</name>

<value>pascdev</value>

</property>

yarn-site.xml

//修改Yarn日志路径

<property>

<name>yarn.nodemanager.remote-app-log-dir</name>

<value>hdfs://pasc/metadata/logs/remoteyarn</value>

</property>

二、   部署相关Patch

(1)修改以上配置,重启hadoop服务后,报以下错误

hadoop yarn日志分离-LMLPHP

原因是现有的版本不支持跨ns的日志聚合操作,部署Patch Yarn-3269

(2)解决跨ns问题后,再次重启服务,报以下错误,提示rpc认证错误

hadoop yarn日志分离-LMLPHP

查看源码发现是在logaggragationservice的initappaggregator方法中获取用户的credential

通过打印日志,获取了Nodemananger在进行日志聚合操作时所持有的tokens,发现并没有集群pasc的HDFS_DELEGATION_TOKEN

hadoop yarn日志分离-LMLPHP

通过添加代码修改这个问题:

credentials = new Credentials();

FileSystem remoteFs = getFileSystem(getconfig());

remoteFs.addDelegationTokens(UserGroupInformation.getLoginUser().getshortname(),credentials)

可以看到已经获取集群pasc的HDFS_DELEGATION_TOKEN

hadoop yarn日志分离-LMLPHP

三、测试

可以看到pasc集群上已经有该app执行的日志

hadoop yarn日志分离-LMLPHP

同时可以在pascdev集群上通过yarn logs命令查看日志

hadoop yarn日志分离-LMLPHP

05-17 23:20