使用java程序合并hdfs中的文件

Posted

技术标签:

【中文标题】使用java程序合并hdfs中的文件【英文标题】:Merging files in hdfs using java program 【发布时间】:2018-05-09 10:16:11 【问题描述】:

我是大数据的新手,正在处理一项小任务,我需要将多个文件合并到 hdfs 中的单个文件中。我正在使用 Java 程序来完成此操作(将所有类似于 prod* 的文件合并到一个 prod.txt 文件中)。我已经寻求帮助,到目前为止我编写的代码是:

公共类 MergeFiles

public static void main(String[] args) throws FileNotFoundException 
    // TODO Auto-generated method stub

    String srcPath = "/user/demouser/first/prod*"; 
    String dstPath = "/user/demouser/second/prod.txt"; 
    Configuration conf = new Configuration(); 
    conf.set("fs.default.name","http://hostname:portnumber/");
    try 
     
        FileSystem hdfs = FileSystem.get(conf); 
        FileUtil.copyMerge(hdfs, new Path(srcPath), hdfs, new Path(dstPath), false, conf, null); 
         
    catch (IOException e) 
     

    

它不工作,我无法弄清楚如何解决这个问题。我也不明白“fs.default.name”的工作原理。请帮忙。

【问题讨论】:

如何将您的 srcPath 更改为您的文件夹名称。我也很好地使用了这个 api 请显示你的日志 该属性已被弃用。应该是fs.defaultFS,需要指向namenode 除此之外,您正在重新发明***。搜索一个叫做 filecrush 的东西。或者至少,Pig 可以在大约 3 行代码中做到这一点 【参考方案1】:

您需要一个真实的主机名和端口号来替换“http://hostname:portnumber/”,您的主机名和端口号必须可以从您的计算机访问。它应该是您的文件系统的位置。

【讨论】:

我已经有了这些......我刚刚在这里用假名替换了它。这些文件也存在于该位置。 您需要查看您正在捕获的 IOException,在这里您可以捕获它然后什么也不做 - 查看 javadoc 的 Exception 以了解更多信息,以及 google 的“java 异常处理” . HDFS 不是 HTTP 协议。这是 RPC

以上是关于使用java程序合并hdfs中的文件的主要内容,如果未能解决你的问题,请参考以下文章

HDFS 小文件处理——应用程序实现

从 Java 中的 spark 转换函数写入 HDFS 中的文件

无法通过map reduce java程序访问Hadoop hdfs文件系统

Java程序访问不了HDFS下的文件,报缺失块的异常,请高手解决一下

一旦主 NN 发生故障,自动从 Java 应用程序连接到 HDFS 辅助 NN

大数据-09-Intellij idea 开发java程序操作HDFS