hdfs目录存储最大文件数异常MaxDirectoryItemsExceededException

hdfs目录存储最大文件数异常MaxDirectoryItemsExceededException


hdfs-site.xml文件参数中,定义一个目录最大的item数,设置为0将会使该检查失效,默认值:1048576。
在2.7.3版本中,必须设置为1~6400000。

18/11/05 22:22:15 INFO scheduler.TaskSetManager: Lost task 203616.0 in stage 0.0 (TID 1049710) on emr-worker-412.cluster-40699, executor 228: org.apache.hadoop.ipc.RemoteException (The directory item limit of /tmp/hive/scopa is exceeded: limit=1048576 items=1048576
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyMaxDirItems(FSDirectory.java:932)
    at org.apache.hadoop.hdfs.server.namenode.FSDirRenameOp.verifyFsLimitsForRename(FSDirRenameOp.java:117)
    at org.apache.hadoop.hdfs.server.namenode.FSDirRenameOp.unprotectedRenameTo(FSDirRenameOp.java:189)
    at org.apache.hadoop.hdfs.server.namenode.FSDirRenameOp.renameTo(FSDirRenameOp.java:474)
    at org.apache.hadoop.hdfs.server.namenode.FSDirRenameOp.renameToInt(FSDirRenameOp.java:73)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.renameTo(FSNamesystem.java:3650)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.rename(NameNodeRpcServer.java:867)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.rename(ClientNamenodeProtocolServerSideTranslatorPB.java:575)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2045)
) [duplicate 23]

错误原因: 一个目录下的子目录数量达到限制,默认的上限是 1048576。 每次执行hive语句时,都会在 hive.exec.scratchdir 配置的目录下生成一个临时目录,执行结束后会自动删除,如果异常中断则有可能会保留目录。
两种解决办法:
1、修改hdfs-site.xml文件参数,提高目录的限制上限,通过 dfs.namenode.fs-limits.max-directory-items 参数限制,最高不能超过 6400000


  dfs.namenode.fs-limits.max-directory-items
  1048576
  Defines the maximum number of items that a directory may contain. Cannot set the property to a value less than 1 or more than 6400000.

2、使用该目录下的相关程序,适当做一下控制。

你可能感兴趣的:(HDFS)