【问题标题】:How to Use third party API in hadoop to read files from hdfs if those API uses only local file system path?如果这些 API 仅使用本地文件系统路径,如何在 hadoop 中使用第三方 API 从 hdfs 读取文件?
【发布时间】:2023-03-04 21:39:01
【问题描述】:

我有大型 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

}

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

建议,欢迎cmets!

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2015-11-16
      • 2015-03-28
      相关资源
      最近更新 更多