如果这些API仅使用本地文件系统路径,如何在hadoop中使用第三方API从hdfs读取文件?

时间:2012-07-22 23:31:58

标签: hadoop hdfs

我有大型mbox文件,我正在使用第三方API(如mstor)使用hadoop解析来自mbox文件的消息。我已经在hdfs中上传了这些文件。但问题是此API仅使用本地文件系统路径,类似于下面显示的

MessageStoreApi store = new MessageStoreApi(“file location in locl file system”);

我在这个API中找不到一个从流初始化的构造函数。所以我无法读取hdfs流并初始化它。

现在我的问题是,我应该将文件从hdfs复制到本地文件系统并从本地临时文件夹初始化吗?就像我现在一直在做的那样:

目前我的地图功能接收mbox文件的路径。

Map(key=path_of_mbox_file in_hdfs, value=null){

String local_temp_file = CopyToLocalFile(path in hdfs);
MessageStoreApi store = new MessageStoreApi(“local_temp_file”);
//process file

}

或者还有其他解决方案吗?我期待一些解决方案,如果我增加块大小,以便单个文件适合一个块,不知何故,如果我可以在我的map函数中获取这些块的位置,因为大多数map函数将在同一个节点上执行存储块然后我可能不必总是下载到本地文件系统?但我不确定这是否会一直有效:)

建议,欢迎评论!

1 个答案:

答案 0 :(得分:2)

对于本地文件系统路径类访问,HDFS提供两个选项:HDFS NFS(通过NFSv3挂载)和FUSE挂载的HDFS。

前者记录在Apache Hadoop docs下(CDH用户可以follow this instead

后者记录在Apache Hadoop wiki(CDH用户可能会找到相关文档here instead

目前,NFS功能在上游比FUSE选项更加维护。