Hadoop流-外部映射器脚本-找不到文件

用户名

尝试使用Streaming在Hadoop上运行mapreduce作业。我有两个ruby脚本wcmapper.rb和wcreducer.rb。我正在尝试按以下方式运行作业:

hadoop jar hadoop/contrib/streaming/hadoop-streaming-1.2.1.jar -file wcmapper.rb -mapper wcmapper.rb -file wcreducer.rb -reducer wcreducer.rb -input test.txt -output output

这将导致在控制台上出现以下错误消息:

13/11/26 12:54:07 INFO streaming.StreamJob:  map 0%  reduce 0%
13/11/26 12:54:36 INFO streaming.StreamJob:  map 100%  reduce 100%
13/11/26 12:54:36 INFO streaming.StreamJob: To kill this job, run:
13/11/26 12:54:36 INFO streaming.StreamJob: /home/paul/bin/hadoop-1.2.1/libexec/../bin/hadoop job  -Dmapred.job.tracker=localhost:9001 -kill job_201311261104_0009
13/11/26 12:54:36 INFO streaming.StreamJob: Tracking URL: http://localhost.localdomain:50030/jobdetails.jsp?jobid=job_201311261104_0009
13/11/26 12:54:36 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201311261104_0009_m_000000
13/11/26 12:54:36 INFO streaming.StreamJob: killJob...
Streaming Command Failed!

查看任何任务的失败尝试都显示:

java.io.IOException: Cannot run program "/var/lib/hadoop/mapred/local/taskTracker/paul/jobcache/job_201311261104_0010/attempt_201311261104_0010_m_000001_3/work/./wcmapper.rb": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)

我知道hadoop需要复制供所有节点使用的map和reducer脚本,并相信这是-file参数的目的。但是,似乎脚本没有被复制到hadoop希望找到它们的位置。控制台指示它们被打包,我认为:

packageJobJar: [wcmapper.rb, wcreducer.rb, /var/lib/hadoop/hadoop-unjar3547645655567272034/] [] /tmp/streamjob3978604690657430710.jar tmpDir=null

我也尝试了以下方法:

hadoop jar hadoop/contrib/streaming/hadoop-streaming-1.2.1.jar -files wcmapper.rb,wcreducer.rb -mapper wcmapper.rb -reducer wcreducer.rb -input test.txt -output output

但这给出了相同的错误。

谁能告诉我问题是什么?

还是在哪里可以更好地诊断问题?

非常感谢

保罗

用户名

对不起,找到了答案。

这些脚本已作为Packt“ Hadoop入门指南”的一部分下载。

他们最初将shebang设置为:

#!/usr/bin/env ruby

但这为ruby本身生成了一个文件未找到错误。检查env的详细信息后,发现它使用PATH变量来确定红宝石的位置。ruby exe位于/ usr / bin中,并且位于PATH中。但是,我将其修改为:

#!/usr/bin/ruby

并修复了原始文件未找到的错误,但在上述问题中产生了错误。

我最终尝试在控制台上自己运行Ruby脚本,结果如​​下:

[paul@lt001 bin]$ ./wcmapper.rb 
bash: ./wcmapper.rb: /usr/bin/ruby^M: bad interpreter: No such file or directory

由于该exe存在于所示目录中,因此这似乎很奇怪。

然后,我重新创建了脚本文件(通过在控制台上键入脚本文件。这解决了问题(脚本在控制台和hadoop中都运行)。我的假设是文件本身的格式(可能是^ M)是有过错。

总之,解释器认为与任务日志中列出的文件相关的“找不到文件”错误是脚本文件本身。

希望对您有所帮助。

P

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章