重命名多个数据文件

时间:2019-04-12 15:41:54

标签: hdfs

我正在寻找在HDFS中重命名多个数据文件的解决方案,我说26000个具有相同名称的数据文件/data/sample/_file.json.zip,并从文件末尾删除.zip,例如/ data / sample / _file.json

我想做什么..

我可以喜欢一个文件

hdfs dfs -mv /data/sample/abc12300021b9_file.json.zip /data/sample/abc12300021b9_file.json

我想做的是重命名所有26000个数据文件,例如,我收到以下消息

hdfs dfs -mv /data/sample/*_file.json.zip /data/sample/*_file.json

mv:`/data/sample/*_file.json':匹配项过多

此代码正在执行我想要的操作,但问题是它非常慢,它适合100或200个数据文件,当我处理成千上万个文件时,速度非常慢。

#!/bin/bash

source_dir=/data/sample/

$(hdfs dfs -test -e  ${source_dir})

hdfs dfs -ls "${source_dir}/*.zip" | awk '{print $8}'  | while read FILE; do

FILENAME="$(basename "${FILE}")"
new_name=${FILENAME::-4}

hdfs dfs -mv "${source_dir}/${FILENAME}" "${source_dir}/${new_name}"

done

2 个答案:

答案 0 :(得分:0)

尝试在bash中循环

    for n in {0..26000} ; do
        long=$(printf %05d "$n")
        hdfs dfs -mv /data/sample/"$long"_file.json.zip /data/sample/"$long"_file.json
    done

答案 1 :(得分:0)

您可以使用Pig脚本来执行此操作。它应该看起来像这样:

fs -mv /data/sample/abc12300021b9_file.json.zip /data/sample/abc12300021b9_file.json
fs -mv /data/sample/AAAAAAAA.json.zip /data/sample/AAAAAAAA.json
fs -mv /data/sample/AAAAAAAB.json.zip /data/sample/AAAAAAAB.json
....

假设文件已另存为mv_26000_files。然后运行:

pig -f mv_26000_files

这将更快很多,因为在使用HDFS CLI的情况下,身份验证仅被调用一次,因此您每次都调用它。

注意:Pig在所有主要的Hadoop发行版(CDH,HDP,MapR)上均可用。

参考文献