我在 HDFS 中有 1000 多个可用文件,命名约定为1_fileName.txt
to N_fileName.txt
。每个文件的大小为 1024 MB。
我需要将这些文件合并到一个(HDFS)中,并保持文件的顺序。说5_FileName.txt
应该只附加在之后4_fileName.txt
执行此操作的最佳和最快方法是什么?
有没有什么方法可以执行这种合并而不在数据节点之间复制实际数据?例如:获取该文件的块位置并使用这些块位置在 Namenode 中创建一个新条目(FileName)?
没有有效的方法可以做到这一点,您需要将所有数据移动到一个节点,然后返回到 HDFS。
用于执行此操作的命令行脚本如下:
hadoop fs -text *_fileName.txt | hadoop fs -put - targetFilename.txt
这会将与 glob 匹配的所有文件捕获到标准输出,然后您将该流传输到 put 命令并将该流输出到名为 targetFilename.txt 的 HDFS 文件
你遇到的唯一问题是你所选择的文件名结构 - 如果你有固定宽度,用零填充数字部分会更容易,但在当前状态下你会得到一个意想不到的词典顺序(1, 10, 100, 1000 、 11、 110 等)而不是数字顺序(1、2、3、4 等)。您可以通过将 scriptlet 修改为以下方式来解决此问题:
hadoop fs -text [0-9]_fileName.txt [0-9][0-9]_fileName.txt \
[0-9][0-9[0-9]_fileName.txt | hadoop fs -put - targetFilename.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)