hdfs exceeded directory item limit

报错提示:

这里写图片描述

错误原因:
一个目录下的子目录数量达到限制,默认的上限是 1048576。
每次执行hive语句时,都会在 hive.exec.scratchdir 配置的目录下生成一个临时目录,执行结束后会自动删除,如果异常中断则有可能会保留目录。

提供两种解决办法:

  • 提高目录的限制上限,通过 dfs.namenode.fs-limits.max-directory-items 参数限制,最高不能超过 6400000
<property>
      <name>dfs.namenode.fs-limits.max-directory-items</name>
      <value>1048576</value>
</property>
  • 使用脚本批量删除 dfs 过期目录
#!/bin/bash
usage="Usage: ./cleanup.sh [path] [days]"

if [ ! "$1" ]
then
  echo $usage;
  exit 1;
fi

if [ ! "$2" ]
then
  echo $usage;
  exit 1;
fi

now=$(date +%s);
i=1;
arr="";

hdfs dfs -ls $1 | while read f; do
  file_date=`echo $f | awk '{print $6}'`;
  file_name=`echo $f | awk '{print $8}'`;

  diff=$(( ($now - $(date -d "$file_date" +%s)) / (24 * 60 * 60) ));
  if [ $diff -gt $2 ]; then
    if [ $(($i % 5000)) !=0 ]; then
       arr=$arr" "$file_name;
       i=$[$i+1];
    else
       hdfs dfs -rm -r $arr;
       arr="";
       i=1;
    fi
  fi
done

if [ $i != 1 ]; then
  hdfs dfs -rmr -r $arr;
fi

批量删除 /tmp/hive/admin 下10天前创建的目录,每批 5000

./cleanup.sh /tmp/hive/admin 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值