Переименовать несколько файлов данных - PullRequest
2 голосов
/ 12 апреля 2019

Я ищу решение переименовать несколько файлов данных в 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 ': слишком много совпадений

Thisкод делает то, что я хочу, но проблема в том, что он очень медленный, он хорош для 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 голосов
/ 12 апреля 2019

Вы можете использовать скрипт свиньи, чтобы сделать это.Это должно выглядеть так:

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 вы вызываете ее каждый раз.

Примечание: Свинья доступнана всех основных дистрибутивах Hadoop (CDH, HDP, MapR).

Ссылки

0 голосов
/ 12 апреля 2019

Попробуйте цикл в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...