gpt4 book ai didi

java - Hadoop 将多个部分文件组合成单个文件

转载 作者:可可西里 更新时间:2023-11-01 15:12:00 25 4
gpt4 key购买 nike

目前我有

part-00001
part-00002

我知道使用 hdfs -getmerge 是将这些文件合并为一个文件的最佳方式。但是,是否可以以编程方式做到这一点?

我试过使用 MultipleOutput ,但它不起作用。我也尝试编写自己的 CustomOutputFormat 但是由于在将它并行写入文件时有多个 reducer,它会出现 org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException 关闭数据输出流时出错。

最佳答案

您始终可以使用 FileSystem class从你的 java 代码,并可能调用 concat方法就是您所需要的。

MultipleOutput 的作用几乎相反。它没有 part-xxxxx 文件,而是生成自定义命名的文件,这通常意味着比以前更多的文件。

CustomOuputFormat 也不是一个好主意,因为在任何情况下,您将拥有与 reducer 数量一样多的输出文件。输出格式不会改变这一点。

使用单个 reducer (setNumReduceTasks(1)) 可能是一个可行的解决方案,但不必要地昂贵,因为它“杀死”了并行性(所有数据都由单个任务处理)。仅当您的数据相当小时才考虑使用它,否则请避免使用它。

另一种解决方案是在 MapReduce 作业完成后,从您的 Java 代码中简单地调用 hdfs -getmerge 作为 shell 命令。

关于java - Hadoop 将多个部分文件组合成单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35314622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com