Hadoop流:映射器“包装”二进制executab

2024-09-28 22:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个管道,我目前运行在一个大型大学计算机集群上。出于发布的目的,我希望将其转换为mapreduce格式,这样任何人都可以使用像amazonwebservices(AWS)这样的hadoop集群来运行它。管道目前由一系列python脚本组成,这些脚本包装不同的二进制可执行文件,并使用python子进程和tempfile模块管理输入和输出。不幸的是,我没有编写二进制可执行文件,它们中的许多要么不接受STDIN,要么不以“可用”的方式发出STDOUT(例如,只将其发送到文件)。这些问题就是为什么我用python封装了大多数问题。在

到目前为止,我已经能够修改我的Python代码,这样我就可以在本地机器上以标准的“test format”运行一个映射器和一个reducer

$ cat data.txt | mapper.py | reducer.py

映射器按照它包装的二进制文件所需的方式格式化每行数据,并使用将文本发送到二进制文件子流程.popen(这也允许我屏蔽许多伪标准输出),然后收集我想要的STOUT,并将其格式化为适合reducer的文本行。 当我试图在本地hadoop安装上复制该命令时,会出现问题。我可以让映射器执行,但是它给出了一个错误,表明它找不到二进制可执行文件。在

File "/Users/me/Desktop/hadoop-0.21.0/./phyml.py", line 69, in main() File "/Users/me/Desktop/hadoop-0.21.0/./mapper.py", line 66, in main phyml(None) File "/Users/me/Desktop/hadoop-0.21.0/./mapper.py", line 46, in phyml ft = Popen(cli_parts, stdin=PIPE, stderr=PIPE, stdout=PIPE) File "/Library/Frameworks/Python.framework/Versions/6.1/lib/python2.6/subprocess.py", line 621, in init errread, errwrite) File "/Library/Frameworks/Python.framework/Versions/6.1/lib/python2.6/subprocess.py", line 1126, in _execute_child raise child_exception OSError: [Errno 13] Permission denied

我的hadoop命令如下所示:

^{pr2}$

正如我上面提到的,在我看来,映射器并没有意识到二进制文件——也许它没有被发送到计算节点?不幸的是,我真的不知道是什么问题。任何帮助都将不胜感激。看到一些用python编写的hadoop流映射器/还原器包装二进制可执行文件,那将是一件特别好的事情。我无法想象我是第一个尝试这么做的人!事实上,这里有另一个帖子问的基本上是同一个问题,但它还没有得到回答。。。在

Hadoop/Elastic Map Reduce with binary executable?


Tags: 文件inpyhadoop可执行文件line二进制users
2条回答

终于开始运转了

$pid = open2 (my $out, my $in, "./binary") or die "could not run open2";

经过大量的google搜索(等等),我发现了如何包含可执行的二进制文件/脚本/模块,这些文件可以被映射器/还原器访问。诀窍是先将所有文件上传到hadoop。在

$ bin/hadoop dfs -copyFromLocal /local/file/system/module.py module.py

然后,您需要将流式处理命令格式化为以下模板:

^{pr2}$

如果要链接python模块,则需要将以下代码添加到mapper/reducer脚本中:

import sys 
sys.path.append('.')
import module

如果通过子处理访问二进制文件,则命令应该如下所示:

cli = "./binary %s" % (argument)
cli_parts = shlex.split(cli)
mp = Popen(cli_parts, stdin=PIPE, stderr=PIPE, stdout=PIPE)
mp.communicate()[0]

希望这有帮助。在

相关问题 更多 >