如何从 mapreduce 中引用本地 hdfs 文件?

Posted

技术标签:

【中文标题】如何从 mapreduce 中引用本地 hdfs 文件?【英文标题】:How do I reference a local hdfs file from within mapreduce? 【发布时间】:2012-01-31 00:54:24 【问题描述】:

我想从我的 mapreduce 脚本中引用 hadoop 中 hdfs 集群上的一个文件。

是否可以不使用完整路径 (hdfs://ip/path/to/file) 而是使用本地 /path/to/file 引用来执行此操作?我正在使用java并尝试过类似的东西:

    File file = new File(stringPathToFile);

但这似乎引用了本地文件系统。

提前致谢!

【问题讨论】:

但是HDFS访问会比本地文件访问快,所以最好给个HDFS路径.. 【参考方案1】:

您必须使用Hadoop API 访问该文件。您可能正在寻找open。这将为您提供一个类似于通用打开文件的流。 File 不知道如何处理 HDFS 中的文件。

我发现了这个code example,它显示了如何做到这一点。


编辑:再次阅读您的问题后,我注意到您正在从 MapReduce 作业内部访问它。如果文件足够小(可以放在一台计算机的磁盘上),您应该强烈考虑使用DistributedCache。这会将文件推送到运行作业的每个节点,以便可以快速访问它。使用多个映射器读取 HDFS 可能会导致您的工作出现网络带宽瓶颈。

【讨论】:

以上是关于如何从 mapreduce 中引用本地 hdfs 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mapreduce 从具有 RCFile 存储格式的 HDFS 解析 Map<string,string>?

CDH4.4:从 shell 重启 HDFS 和 MapReduce

转载MapReduce编程 Intellij Idea配置MapReduce编程环境

具有最少磁盘操作的大数据 - MapReduce

MapReduce Job 如何在 HDFS 上工作?

Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解