因为我们需要将一堆文件读入映射器,在非 Hadoop 中
环境,我用的os.walk(dir)
and file=open(path, mode)
读入
每个文件。
然而,在 Hadoop 环境中,当我读到 HadoopStreaming 转换
将文件输入到mapper的stdin并将reducer的stdout转换为文件
输出,我有几个关于如何输入文件的问题:
我们是否必须在 mapper.py 中设置来自 STDIN 的输入并让
HadoopStreaming 将 hdfs 输入目录中的文件转换为 STDIN?
如果我想分别读取每个文件并解析每一行,如何
我可以从mapper.py中的文件设置输入吗?
我之前针对非 Hadoop 环境集的 Python 代码:
对于 os.walk('非 hdfs 的路径') 中的 root、dirs、文件
……
但是,在Hadoop环境中,我需要将“非hdfs路径”更改为
我从本地复制到的 HDFS 路径,但我尝试了很多,但没有
成功,例如os.walk('/user/hadoop/in')
——这是我检查过的
通过运行 bin/hadoop dfs -ls,以及os.walk('home/hadoop/files')
- 这
是我在非Hadoop环境中的本地路径,甚至os.walk('hdfs://
host:fs_port/user/hadoop/in')
....
谁能告诉我是否可以使用 file 从文件中输入
在mapper.py中操作还是我必须从STDIN输入?
Thanks.
Hadoop 流式传输has从 STDIN 获取输入。我认为您遇到的困惑是您正在尝试编写代码来完成 Hadoop Streaming 为您做的一些事情。当我第一次开始 Hadooping 时我就是这么做的。
Hadoop 流可以读取多个文件,甚至多个压缩文件,然后一次一行地解析这些文件到映射器的 STDIN 中。这是一个有用的抽象,因为您随后将映射器编写为与文件名/位置无关。然后,您可以使用映射器和化简器进行任何稍后方便的输入。另外,您不希望您的映射器尝试抓取文件,因为您无法知道以后将有多少个映射器。如果文件被编码到映射器中,那么如果单个映射器失败,您将永远不会从该映射器中硬编码的文件中获得输出。因此,让 Hadoop 来进行文件管理,并让您的代码尽可能通用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)