【问题标题】:How can I execute hadoop distcp -f command properly?如何正确执行 hadoop distcp -f 命令?
【发布时间】:2015-05-18 15:02:26
【问题描述】:

我想在我的 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 包含许多文件夹和文件。

我该如何解决这个问题?

【问题讨论】:

    标签: hadoop hdfs hadoop2 distcp


    【解决方案1】:

    使用下面的脚本,是shell编程:

     #!/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 文件需要在本地文件系统中包含如下路径:

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

    【讨论】:

    • 我会对性能感到好奇。我会看到你的解决方案的方式,它会为每个循环迭代生成一个 JVM。
    猜你喜欢
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多