如何在不使用getmerge的情况下将头文件作为第一行插入HDFS中的数据文件(复制到本地时的性能问题)



我正在尝试将标题.txt作为第一行插入数据.txt而不使用 getmerge。将副本合并到本地并插入到第三个文件中。但我只想要 HDFS

标题.txt

头1,头

2,头3

数据.txt

100,约翰,28

101,鳃,25

102,詹姆斯,29

我只想在 Data.txt 文件中输出,如下所示:

数据.txt

头1,头

2,头3

100,约翰,28

101,鳃,25

102,詹姆斯,29

请建议我是否可以仅在HDFS中实现?

HDFS支持concat(连接缩写)操作,其中两个文件合并为一个,而无需任何数据传输。它将完全满足您的需求。从文件系统 shell 指南文档来看,目前命令行不支持它,因此您需要在 Java 中实现这一点:

FileSystem fs = ...
Path data = new Path("Data.txt");
Path header = new Path("Header.txt");
Path dataWithHeader = new Path("DataWithHeader.txt");
fs.concat(dataWithHeader, header, data);

在此之后,Data.txtHeader.txt都不复存在,取而代之的是DataWithHeader.txt.

感谢您的回复。

我得到了其他方式,例如:

Hadoop fs cat hdfs_path/header.txt hdfs_path/data.txt |Hadoop fs -put - hdfs_path/Merged.txt

这有缺点,因为 cat 命令读取影响性能的完整数据。

最新更新