1

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

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

我在此 API 中找不到将从 stream 初始化的构造函数。所以我无法读取 hdfs 流并对其进行初始化。

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

目前 My Map 函数接收 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

}

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

欢迎提出建议、评论!

4

1 回答 1

2

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

前者记录在Apache Hadoop 文档下(CDH 用户可能会遵循此文档)

后者记录在Apache Hadoop wiki中(CDH 用户可以在这里找到相关文档)

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

于 2013-02-17T08:22:53.077 回答