たごもりすメモ

コードとかその他の話とか。

YARN/Hiveな環境で大量の一時ファイルとログをごりごり削除する

YARN使っててHDFSにログを吐くよう設定してるとアホみたいにたまっていくので削除しないとやばい。
とりあえず10日経過したら削除するようにした。

(
    for searchpath in '/tmp/hive-*' '/mr-history/done/*/*' '/mr-history/tmp/*' '/yarn/user/*/.staging' '/yarn/log/apps/*/logs';
    do
        hdfs dfs -ls "$searchpath" | grep -v '^Found [0-9]* items' | \
            perl -MTime::Piece -MTime::Seconds \
            -e '$t = ((scalar(localtime(time))) - ONE_DAY*10)->strftime("%Y%m%d");' \
            -e 'while(<>){ chomp; @f = split(/ +/, $_, 8); $d = $f[5]; $d =~ s/-//g; if($d < $t){ print $f[-1],"\n"; } }'
    done
) | xargs hdfs dfs -rm -r

perl 5.10 以降で使える、かな? あと /mr-history とか /yarn/log/apps とかは設定による。