【问题标题】:How to perform a recursive ls using maprfs Java API?如何使用 maprfs Java API 执行递归 ls?
【发布时间】:2016-03-17 15:40:38
【问题描述】:

我编写了一个应用程序,列出了 HDFS 中的所有文件,然后对它们进行了一些处理。这是我的代码中列出 HDFS 中所有文件的部分:

Configuration configuration = new Configuration();
FileSystem hdfs;
hdfs = FileSystem.get(new URI(url), configuration);
RemoteIterator<LocatedFileStatus> it = hdfs.listFiles(new Path(url+directory), true);

我想用 MapRFS 做同样的事情。作为第一次尝试,我尝试使用 Hadoop 的罐子,但它没有用。然后我尝试使用mapr(/opt/mapr/hadoop/hadoop-0.20.2/lib/hadoop-0.20.2-dev-core.jar)附带的jar,但似乎这个jar中的对象FileSystem没有一个名为listFiles的方法。你知道我是否可以使用等效的方法吗?有没有办法只使用 Hadoop jars 来做到这一点?谢谢你的回答。

【问题讨论】:

    标签: java hadoop jar hdfs mapr


    【解决方案1】:

    您的代码对于 MapR 来说“几乎”完美,并且您的依赖项也正常。

    您可能知道 MapR 不使用/拥有 NameNodes 的概念有很多很好的理由。这意味着您连接到集群的方式不同。您无需将集群 URL 放入配置或路径中。

    以下代码将起作用:

    Configuration configuration = new Configuration();
    FileSystem hdfs;
    hdfs = FileSystem.get(configuration); // no need to send any cluster it is retrieved from Configuration 
    RemoteIterator<LocatedFileStatus> it = hdfs.listFiles(new Path(directory), true);
    

    MapR 知道如何根据您在/opt/mapr/conf/mapr-clusters.conf 中的信息进行连接。这个文件指明了集群的名字和CLDB的节点列表。

    如您所见,您编写的“hadoop 代码”是正确且有效的。

    【讨论】:

    • 谢谢你的回复,但是我的依赖没问题,你的意思是我应该使用mapr的jar还是Hadoop的jar?
    猜你喜欢
    • 2018-05-31
    • 2014-03-14
    • 1970-01-01
    • 2017-08-11
    • 2019-02-04
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多