[ 
https://issues.apache.org/jira/browse/YARN-6929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16811866#comment-16811866
 ] 

Prabhu Joseph commented on YARN-6929:
-------------------------------------

[~eyang] Have changed the App Log Dir Structure to below format. 

{code}
{aggregation_log_root} / <user> / bucket_{suffix} / {cluster_timestamp} / 
{bucket1} / {bucket2} / {appId}

where aggregation_log_root is yarn.nodemanager.remote-app-log-dir
      suffix is yarn.nodemanager.remote-app-log-dir-suffix (logs) 
      cluster_timestamp is application_timestamp
      bucket1 is application#getId % 10000
      bucket2 is application_timestamp % 10000
          
{code}

*The patch changes below:*

1. {{LogAggregationFileController}} changed to create new app log dir structure
2. {{AggregatedLogDeletionService}} changed to remove older bucket / app dirs 
as per retention.
3. {{LogAggregationFileControllerFactory}} and 
{{LogAggregationIndexedFileController}} changed to include both old and new app 
log dir structure.
4. New config {{yarn.nodemanager.remote-app-log-dir-include-older}}  (default 
true) introduced to include older app log dirs also while accessing the yarn 
logs. This can be configured to false later if user does not want / have older 
log dir structure. 

*Functional Testing Done:*
{code}
1. Check if new application logs gets written into correct app log dir 
structure.
2. Yarn Logs Cli 
3. Accessing Logs from RM UI / HistoryServer UI works fine while job is running 
/ complete.
4. Accessing Older Logs.
{code}


*App Log Dir Structure for sample job:*

{code}
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls /app-logs/ambari-qa/
Found 2 items
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:26 
/app-logs/ambari-qa/bucket_logs
drwxrwx---   - ambari-qa hadoop          0 2019-04-05 15:01 
/app-logs/ambari-qa/logs
[hdfs@yarn-ats-2 yarn]$ 
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls /app-logs/ambari-qa/bucket_logs
Found 1 items
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:30 
/app-logs/ambari-qa/bucket_logs/1554476304275
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls 
/app-logs/ambari-qa/bucket_logs/1554476304275
Found 4 items
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:26 
/app-logs/ambari-qa/bucket_logs/1554476304275/0004
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:29 
/app-logs/ambari-qa/bucket_logs/1554476304275/0005
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:29 
/app-logs/ambari-qa/bucket_logs/1554476304275/0006
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:30 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007
[hdfs@yarn-ats-2 yarn]$ 
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007
Found 1 items
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:30 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007/4275
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007/4275
Found 1 items
drwxrwx---   - ambari-qa hadoop          0 2019-04-07 12:31 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007/4275/application_1554476304275_0007
[hdfs@yarn-ats-2 yarn]$ 
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007/4275/application_1554476304275_0007
Found 2 items
-rw-r-----   3 ambari-qa hadoop      94103 2019-04-07 12:31 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007/4275/application_1554476304275_0007/yarn-ats-2_45454
-rw-r-----   3 ambari-qa hadoop      80434 2019-04-07 12:31 
/app-logs/ambari-qa/bucket_logs/1554476304275/0007/4275/application_1554476304275_0007/yarn-ats-3_45454

{code}

*App Log Dir Structure after deletion:*

{code}
[hdfs@yarn-ats-2 yarn]$ hadoop fs -ls /app-logs/ambari-qa/bucket_logs
[hdfs@yarn-ats-2 yarn]$ 
{code}


> yarn.nodemanager.remote-app-log-dir structure is not scalable
> -------------------------------------------------------------
>
>                 Key: YARN-6929
>                 URL: https://issues.apache.org/jira/browse/YARN-6929
>             Project: Hadoop YARN
>          Issue Type: Bug
>          Components: log-aggregation
>    Affects Versions: 2.7.3
>            Reporter: Prabhu Joseph
>            Assignee: Prabhu Joseph
>            Priority: Major
>         Attachments: YARN-6929-007.patch, YARN-6929.1.patch, 
> YARN-6929.2.patch, YARN-6929.2.patch, YARN-6929.3.patch, YARN-6929.4.patch, 
> YARN-6929.5.patch, YARN-6929.6.patch, YARN-6929.patch
>
>
> The current directory structure for yarn.nodemanager.remote-app-log-dir is 
> not scalable. Maximum Subdirectory limit by default is 1048576 (HDFS-6102). 
> With retention yarn.log-aggregation.retain-seconds of 7days, there are more 
> chances LogAggregationService fails to create a new directory with 
> FSLimitException$MaxDirectoryItemsExceededException.
> The current structure is 
> <yarn.nodemanager.remote-app-log-dir>/<user>/logs/<job_name>. This can be 
> improved with adding date as a subdirectory like 
> <yarn.nodemanager.remote-app-log-dir>/<user>/logs/<date>/<job_name> 
> {code}
> WARN 
> org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService:
>  Application failed to init aggregation 
> org.apache.hadoop.yarn.exceptions.YarnRuntimeException: 
> org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.FSLimitException$MaxDirectoryItemsExceededException):
>  The directory item limit of /app-logs/yarn/logs is exceeded: limit=1048576 
> items=1048576 
> at 
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyMaxDirItems(FSDirectory.java:2021)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.addChild(FSDirectory.java:2072)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedMkdir(FSDirectory.java:1841)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsRecursively(FSNamesystem.java:4351)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:4262)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:4221)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4194)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:813)
>  
> at 
> org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:600)
>  
> at 
> org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
>  
> at 
> org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
>  
> at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962) 
> at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2039) 
> at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2035) 
> at java.security.AccessController.doPrivileged(Native Method) 
> at javax.security.auth.Subject.doAs(Subject.java:415) 
> at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
>  
> at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033) 
> at 
> org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.createAppDir(LogAggregationService.java:308)
>  
> at 
> org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.initAppAggregator(LogAggregationService.java:366)
>  
> at 
> org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.initApp(LogAggregationService.java:320)
>  
> at 
> org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.handle(LogAggregationService.java:443)
>  
> at 
> org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.handle(LogAggregationService.java:67)
>  
> at 
> org.apache.hadoop.yarn.event.AsyncDispatcher.dispatch(AsyncDispatcher.java:173)
>  
> at 
> org.apache.hadoop.yarn.event.AsyncDispatcher$1.run(AsyncDispatcher.java:106) 
> at java.lang.Thread.run(Thread.java:745) 
> Caused by: 
> org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.FSLimitException$MaxDirectoryItemsExceededException):
>  The directory item limit of /app-logs/yarn/logs is exceeded: limit=1048576 
> items=1048576 
> at 
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyMaxDirItems(FSDirectory.java:2021)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.addChild(FSDirectory.java:2072)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedMkdir(FSDirectory.java:1841)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsRecursively(FSNamesystem.java:4351)
>  
> at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:4262)
>  
> {code}
> Thanks to Robert Mancuso for finding this issue.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to