我有一个应用程序,创建每一行的文本文件,并将其转储到HDFS。这个位置反过来被用作hadoop流作业的输入目录。
预期映射器的数量将等于“输入文件拆分”,在我的例子中,这等于文件的数量。有些映射器没有被触发,我在流输出转储中看到了一个奇怪的问题:
原因:java.io.ioException:无法运行程序“/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1411140750872_0001/container_1411140750872_0001_01_000336//code/python_mapper_unix.py”:错误=26,文本文件忙
环境详细信息:40节点aws R3.xLarge aws EMR集群[此集群上没有其他作业运行]当此流jar运行时,集群上没有其他作业运行,因此外部进程不应该尝试打开“python_mapper.py”文件
以下是流式jar命令:
ssh-o stricthostkeychecking=no-i hadoop@hadoop jar/home/hadoop/contrib/streaming/hadoop-streaming.jar-files code-file CODE/congfiguration.conf-mapper CODE/python_mapper.py-input/user/hadoop/launchidlworker/input/1-output/user/hadoop/launchidlworker/output/out1-numreduceTasks 0
请尝试先使用“stop-all”停止所有守护进程,然后在重启守护进程(使用“start-all”)后重新运行MR作业,好吗?
让我们看看有没有帮助!
我有一个应用程序,创建文本文件,每一行,并转储到HDFS。这个位置又被用作hadoop流作业的输入目录。 期望映射器的数量将等于“输入文件拆分”,在我的例子中,该拆分等于文件的数量。所有映射器都没有被触发,我在流输出转储中看到了一个奇怪的问题: 原因:java.io.ioException:无法运行程序“/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/
问题内容: 我的用例如下: 我有一个仅地图的mapreduce作业,该作业需要一个输入文件,进行了大量的解析和调整,然后再写回。但是,某些行的格式可能正确也可能不正确,如果是这样,我想将原始行写入单独的文件中。 看来,执行此操作的一种方法是将文件名添加到我正在打印的行的前面,并使用multipleOutputFormat参数。例如,如果我最初有: 我可以改为: 此解决方案唯一的问题是我不希望fil
尝试使用Streaming在Hadoop上运行mapduce作业。我有两个ruby脚本wcmapper.rb和wcreducer.rb.我正尝试运行该作业,如下所示: 这将导致控制台出现以下错误消息: 查看任何任务的失败尝试可以看出: 我知道hadoop需要复制map和减少器脚本以供所有节点使用,并相信这是-file参数的目的。然而,脚本似乎没有被复制到hadoop期望找到它们的位置。控制台指示它
问题内容: 这对我来说是一个新问题:此错误表示什么? 当时有几个磁盘密集型进程正在运行,但是我之前从未见过该消息- 实际上,这是我第一次记得在尝试运行Perl脚本时遇到错误。经过几秒钟的等待,我得以运行它,此后再也没有看到这个问题,但是对此做一个解释会很好。 运行Ubuntu 9.04,文件系统为ext3。 问题答案: 我猜你遇到了这个问题。 如果您的Perl脚本(或任何其他类型的脚本)在尝试执行
在java中,我会使用: 多输入.add输入路径(conf, path, inputFormatClass, 映射器类) 以添加多个输入,并为每个输入使用不同的映射器。 现在我正在使用python在hadoop中编写一个流作业,可以做类似的工作吗?
问题内容: 下面的Mappers代码从HDFS读取文本文件正确吗?如果是这样的话: 如果不同节点中的两个映射器尝试几乎同时打开文件,会发生什么情况? 是否不需要关闭?如果是这样,如何在不关闭文件系统的情况下执行此操作? 我的代码是: 问题答案: 这将起作用,并进行一些修改-我假设您粘贴的代码被截断了: 您可以有多个映射器读取同一个文件,但是使用分布式缓存存在更多的局限性(不仅减少了承载文件块的数据