2015-03-16 4 views
1

Я хочу получить резервную копию на моем кластере hadoop для некоторых папок и файлов. Я выполнил эту команду:Как выполнить команду hadoop distcp -f правильно?

hadoop distcp -p -update -f hdfs://cluster1:8020/srclist hdfs://cluster2:8020/hdpBackup/ 

Мой srclist файл:

hdfs://cluster1:8020/user/user1/folder1 
hdfs://cluster1:8020/user/user1/folder2 
hdfs://cluster1:8020/user/user1/file1 

folder1 содержит два файла: part-00000 and part-00001

folder2 содержит два файла: file and file_old

Эта команда работает, но взрывает все папки содержание.

Результат:

--hdpBackup 
    - part-00000 
    - part-00001 
    - file1 
    - file 
    - file_old 

Но я хочу, чтобы получить результат:

--hdpBackup 
    - folder1 
    - folder2 
    - file1 

Я не могу использовать HDFS: // cluster1: 8020/пользователь/user1/*, потому что user1 содержит много папок и файлы.

Как я могу решить эту проблему?

ответ

2

Используйте сценарий ниже, это программирование оболочки:

#!/bin/sh 

for line in `awk '{print $1}' /home/Desktop/distcp/srclist`; 
do 
line1=$(echo $line | awk 'BEGIN{FS="/"}{print $NF}') 

echo "$line $line1 file are source dest" 

hadoop distcp $line hdfs://10.20.53.157/user/root/backup1/$line1 

done 

srclist файл должен находиться в локальной файловой системе contails пути, как:

hdfs://10.20.53.157/user/root/Wholefileexaple_1 
    hdfs://10.20.53.157/user/root/Wholefileexaple_2 
+0

Я бы любопытно о производительности. То, как я увижу ваше решение, это создаст JVM для каждой итерации цикла. –

Смежные вопросы