如何使用 bash 脚本管理 hdfs 中的目录?
How to manage directories in hdfs with a bash script?
最近我试图写一个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
我发现了我的问题!
只是因为我没有创建内部目录,我应该在循环指令之前使用这个命令:
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
您实际上可以通过为 mkdir
提供 -p
标志来使用单个命令实现此目的:
hdfs dfs -mkdir -p version=1/state=a version=2/state=a
作为一般建议,我建议使用更好的命名约定。在这种特殊情况下,v1/state_a/
和 v2/state_a/
是合适的(甚至 v1/state/a/
)。
最近我试图写一个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
我发现了我的问题!
只是因为我没有创建内部目录,我应该在循环指令之前使用这个命令:
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
您实际上可以通过为 mkdir
提供 -p
标志来使用单个命令实现此目的:
hdfs dfs -mkdir -p version=1/state=a version=2/state=a
作为一般建议,我建议使用更好的命名约定。在这种特殊情况下,v1/state_a/
和 v2/state_a/
是合适的(甚至 v1/state/a/
)。