我写了一个应用程序,列出了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 jar?谢谢你的回答。
答案 0 :(得分: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代码”是正确且有效的。