如何使用bash脚本管理hdfs中的目录?

aiazj4mn  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(624)

最近我尝试编写一个bash脚本来管理hdfs中的一些目录,以便与kafka一起工作。
假设在hdfs中有这样一个目录:

/tmp/my_dir/state=a

当我列出这个目录时 hdfs dfs -ls /tmp/my_dir/state=a 结果是:

part=2020-05-10
part=2020-05-11
.
.
.
part=2020-05-20

每个文件夹都包含一些文件,我想根据特定日期将这些文件夹分为两个目录。
我的目标是创建两个目录 version=1 以及 version=2 我想根据一个特定的日期,将每个零件文件夹移到这两个目录中,这样所有日期较小的零件文件夹都将移到

/tmp/my_dir/version=1/state=a

其他人去

/tmp/my_dir/version=2/state=a

我准备了这个代码,但它不能正常工作。有人能帮我改正一下吗?

for fullname in `hdfs dfs -ls /tmp/my_dir/state=a | awk '{print $NF}' | grep part | tr '\n' ' '`; do

    name=$(basename $fullname)

    if [[ "${name#*=}" < "$selected_date" ]]; then

        hdfs dfs -mv $fullname /tmp/my_dir/version=1/state=a

    else
        hdfs dfs -mv $fullname /tmp/my_dir/version=2/state=a
    fi
done
qlckcl4x

qlckcl4x1#

通过提供 -p 的标志 mkdir :

hdfs dfs -mkdir -p version=1/state=a version=2/state=a

作为一般建议,我建议使用更好的命名约定。在这种情况下, v1/state_a/ 以及 v2/state_a/ 是合适的(甚至 v1/state/a/ ).

iqih9akk

iqih9akk2#

我发现了我的问题!
只是因为我没有创建内部目录,我应该在循环指令之前使用以下命令:

hdfs dfs -mkdir /tmp/my_dir/version=1
hdfs dfs -mkdir /tmp/my_dir/version=2

hdfs dfs -mkdir /tmp/my_dir/version=1/state=a
hdfs dfs -mkdir /tmp/my_dir/version=2/state=a

相关问题