如何使用maprfs java api执行递归ls?

ejk8hzay  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(360)

我编写了一个应用程序,列出了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的jar,但没有成功。然后我试着用mapr附带的jar( /opt/mapr/hadoop/hadoop-0.20.2/lib/hadoop-0.20.2-dev-core.jar )但是这个jar中的对象文件系统似乎没有一个名为 listFiles . 你知道有没有我可以用的等效方法吗?有没有只使用hadoopjar的方法?谢谢你的回答。

kx1ctssn

kx1ctssn1#

您的代码对于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代码”是正确的和有效的。

相关问题