尝试使用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] 删除。
我来说两句