尝试在 Ubuntu 上使用 cloudera 发行版 CDH3 试验 Hadoop 和 Streaming。
hdfs:// 中已准备好有效数据以供处理。
用 Python 编写了小型流映射器。
当我使用以下命令启动仅映射器作业时:
hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-streaming*.jar -file /usr/src/mystuff/mapper.py -mapper /usr/src/mystuff/mapper.py -input /incoming/STBFlow/* -output testOP
hadoop 决定使用集群上的 66 个映射器来处理数据。在 HDFS 上创建了 testOP 目录。创建了 job_conf.xml 文件。但端口 50030 处的作业跟踪器 UI 从未显示作业脱离“待处理”状态,也没有发生任何其他事情。CPU 使用率保持为零。(作业是虽然创建了)
如果我给它一个文件(而不是整个目录)作为输入,结果相同(除了 Hadoop 决定它需要 2 个映射器而不是 66 个)。
我也尝试使用“dumbo”Python 实用程序并使用它来启动作业:结果相同:永久待定。
所以我缺少一些基本的东西:有人能帮我找到我应该寻找的东西吗?集群在 Amazon EC2 上。可能是防火墙问题:在集群安全组中逐个明确启用端口。
答案1
对不起,我是个白痴。
作业永远处于“待定”状态,因为尽管集群中的 datanode 进程正在运行,但 taskTracker 进程却没有运行。
它们失败了,因为由于设置错误,它们运行的帐户没有对本地 mapred 缓存目录的写入权限,所以它们在启动时全部终止。因此,作业跟踪器没有节点来分配作业。
一旦纠正了这个问题,任务就可以正常运行。