如何将子目录中的文件复制到 HDFS 中的单个目录
How can I copy files in subdirectories to a single directory in HDFS
我在 Impala 中有一个外部 table,它由两列分区,因此在您访问实际数据文件之前,HDFS 目录有两级目录。 table 在元存储中已损坏,无法查询。我只想将单个 (~10k) 文件复制到一个目录中,这样我就可以删除损坏的 table,删除现有目录,然后 运行 将数据放回 table 中Impala 中的 LOAD DATA INTO table 查询。问题是我找不到只复制文件的方法,因此它们最终都在一个目录中,因为 LOAD DATA 不支持子目录加载。
结构如下:
- 我的根
- mysub1a
- mysub2a
- file1.txt
- file2.txt
mysub1 和 mysub2 级别有数百个目录
我已经能够获得正确的文件列表:
hadoop fs -lsr /myroot/ | grep.parq
但我不知道如何将此列表的输出传递给
hadoop fs -cp {mylist} /mynewdir/
通配符应该可以解决问题:
hdfs dfs -cp /myroot/*/*/*.parq /mynewdir
请注意,如果您不需要原始位置的文件,那么 hdfs dfs -mv
会快得多。
我在 Impala 中有一个外部 table,它由两列分区,因此在您访问实际数据文件之前,HDFS 目录有两级目录。 table 在元存储中已损坏,无法查询。我只想将单个 (~10k) 文件复制到一个目录中,这样我就可以删除损坏的 table,删除现有目录,然后 运行 将数据放回 table 中Impala 中的 LOAD DATA INTO table 查询。问题是我找不到只复制文件的方法,因此它们最终都在一个目录中,因为 LOAD DATA 不支持子目录加载。
结构如下:
- 我的根
- mysub1a
- mysub2a
- file1.txt
- file2.txt
- mysub2a
- mysub1a
mysub1 和 mysub2 级别有数百个目录
我已经能够获得正确的文件列表:
hadoop fs -lsr /myroot/ | grep.parq
但我不知道如何将此列表的输出传递给
hadoop fs -cp {mylist} /mynewdir/
通配符应该可以解决问题:
hdfs dfs -cp /myroot/*/*/*.parq /mynewdir
请注意,如果您不需要原始位置的文件,那么 hdfs dfs -mv
会快得多。