如何正确执行 hadoop distcp -f 命令?
How can I execute hadoop distcp -f command properly?
我想在我的 hadoop 集群上备份一些文件夹和文件。我 运行 这个命令:
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/user/user1/* 因为 user1 包含很多文件夹和文件。
我该如何解决这个问题?
使用下面的脚本,是shell编程:
#!/bin/sh
for line in `awk '{print }' /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
文件需要在本地文件系统中包含如下路径:
hdfs://10.20.53.157/user/root/Wholefileexaple_1
hdfs://10.20.53.157/user/root/Wholefileexaple_2
我想在我的 hadoop 集群上备份一些文件夹和文件。我 运行 这个命令:
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/user/user1/* 因为 user1 包含很多文件夹和文件。
我该如何解决这个问题?
使用下面的脚本,是shell编程:
#!/bin/sh
for line in `awk '{print }' /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
文件需要在本地文件系统中包含如下路径:
hdfs://10.20.53.157/user/root/Wholefileexaple_1
hdfs://10.20.53.157/user/root/Wholefileexaple_2