如何将子目录中的文件复制到HDFS中的单个目录中

时间:2015-01-28 19:29:20

标签: hadoop grep hdfs

我在Impala中有一个外部表,它由两列分区,因此HDFS目录在到达实际数据文件之前有两级目录。该表在元存储中已损坏,无法查询。我想只将单个(~10k)文件复制到一个目录中,这样我就可以删除损坏的表,删除现有的目录,然后使用Impala中的LOAD DATA INTO表查询将数据运回表中。问题是我无法找到复制文件的方法,因此它们都会在一个目录中结束,因为LOAD DATA不支持子目录加载。

结构如下:

  • myroot
    • mysub1a
      • mysub2a
        • FILE1.TXT
        • FILE2.TXT

mysub1和mysub2级别有数百个目录

我能够通过以下方式获得正确的文件列表:

hadoop fs -lsr / myroot / | grep .parq

但我无法弄清楚如何将此列表的输出传入

hadoop fs -cp {mylist} / mynewdir /

1 个答案:

答案 0 :(得分:1)

通配符应该可以解决问题:

hdfs dfs -cp /myroot/*/*/*.parq /mynewdir

请注意,如果您不需要原始位置的文件,则hdfs dfs -mv会更快。