知识点
相关文章
更多最近更新
更多mapred streaming 脚本输出运行状态导致的奇怪问题
2019-03-28 13:41|来源: 网络
今天在调试mapred streaming脚本时,发生了非常奇怪的问题:mapred脚本在被tasktracker调用后总是会随机的失败,错误信息如下:
从错误信息中,我们可以知道:错误并不是mapred脚本错误导致的,而是在tasktracker初始化mapred脚本时tasktracker发生了内部错误
虽然理论上这条语句不应该会导致上述奇怪的问题发生,但是还是死马当活马医试试看,屏蔽掉mapred脚本中的这条代码,重新运行mapred脚本,奇迹发生了,一切正常,没有任何错误发生;重新再加上redis操作的代码,再次运行mapred脚本,还是没有错误发生。看来,问题的元凶就是这条向jobtracker汇报状态的代码:
上述错误 应该是tasktracker中的一个小bug,不知道是否有人提交了这个bug?马上我们的集群就要升级到hadoop1.0.3,到时候在hadoop1.0上再测试测试
- java.lang.RuntimeException: java.lang.NullPointerException
- at org.apache.Hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:325)
- at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545)
- at org.apache.hadoop.streaming.PipeReducer.reduce(PipeReducer.java:95)
- at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:518)
- at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:419)
- at org.apache.hadoop.mapred.Child$4.run(Child.java:259)
- at java.security.AccessController.doPrivileged(Native Method)
- at javax.security.auth.Subject.doAs(Subject.java:396)
- at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
- at org.apache.hadoop.mapred.Child.main(Child.java:253)
- Caused by: java.lang.NullPointerException
- at org.apache.hadoop.streaming.PipeMapRed$MRErrorThread.setStatus(PipeMapRed.java:522)
- at org.apache.hadoop.streaming.PipeMapRed$MRErrorThread.run(PipeMapRed.java:454)
最初以为是集群服务器某些系统资源不够导致的错误,但是查看集群其他正在运行的任务后,确并没有发现和上面同样的问题,其他正在运行的任务完全没有抛出上面的错误。现在可以肯定是我的mapred脚本的问题,考虑到我再mapred脚本中使用的redis,而我的redis接口包是我自己在redis-py的基础上修改而来(redis-py不支持python2.4版本),怀疑是不是redis-py的包引发上述问题,于是屏蔽掉代码中使用redis模块的代码,再次运行mapred,结果还是发生了同样的问题。
没办法,只好再仔细对比正常的mapred脚本和我现在又问题的mapred脚本之间的差异,发现和正常的mapred脚本相比,现在的代码多出了一句向jobtarcker汇报mapred脚本运行状态的代码:
- sys.stderr.write("reporter:status:output\n")
- sys.stderr.write("reporter:status:output\n")
相关问答
更多-
Hadoop MapRed默认配置(Hadoop MapRed default config)[2022-08-19]
如果保持mapred-site.xml和yarn-site.xml不变,默认情况下将使用MapRed V1(经典)。 If you leave mapred-site.xml and yarn-site.xml untouched, MapRed V1 (classic) will be used by default. -
好吧,那令人尴尬......我的第一个问题,我自己回答。 我通过重命名hadoop conf文件以强制默认设置(这意味着本地作业跟踪器)来发现问题。 这项工作运行正常,它让我有空间解决问题所在,看起来集群周围的沟通并不像需要的那样完整。 Well, thats embarrassing... my first question and I answer it myself. I found the problem by renaming the hadoop conf file to force defau ...
-
问题不在于你选择的API。 稳定版本(mapred。*)和不断发展的(mapreduce。*)API都得到完全支持,并且框架本身携带两种测试,以确保跨版本无回归/破坏。 问题是这条线: conf.setReducerClass(Reducer.class); 您将Reducer界面设置为Reducer,而您应该设置Reducer界面的实现。 将其更改为: conf.setReducerClass(Reduce.class); 将解决它。 The problem is not your choice of ...
-
你有没有安装最新的pymongo_hadoop连接器? 你正在运行的其他软件的版本是什么? Have you got the latest pymongo_hadoop connector installed? What versions of the other software are you running?
-
这只是一个猜测,但是那些关于在YARN中配置JobTracker的教程都是由不知道YARN是什么的人编写的,或者他们设置它以防你有一天决定停止使用YARN。 你是对的:YARN中不存在JobTracker和TaskTracker。 您可以根据需要添加属性,但会忽略它们。 替换JobTracker和TaskTracker的每个组件的新属性都添加了YARN,例如yarn.resourcemanager.address以替换mapred.jobtracker.address 。 如果您在YARN下运行Hadoop ...
-
Hadoop继续在/ tmp目录中编写mapred中间输出(Hadoop keeps on writing mapred intermediate outuput in /tmp directory)[2023-11-16]
尝试覆盖tasktracker节点mapred-site.xml文件中的以下属性并重新启动它。mapred.local.dir/name> /home/hdfs/tmp_data mapred.lo ... -
我通过以下方式解决了这个问题 以前无论我做什么,如果我增加地图,减速机,资源管理器和容器存储器,它使用的比我配置的更多。 然后我终于改为cloudera默认java。 我使用的是1.8.0_60。 我在Manager中明确设置了它。 因此,当我将此参数以及其他更改的参数更改为CM默认设置时,它开始工作 I fixed the issue by doing below Previously whatever i do, if i increase map, reducer, resource manager ...
-
我相信设置mapred.job.tracker=local与您的错误无关,因为local是默认值。 此config参数定义MapReduce作业跟踪器运行的主机和端口。 如果将其设置为“本地”,则作业将作为单个映射在进程中运行并减少任务。 请参考这里 。 I believe setting mapred.job.tracker=local has nothing to do with your error as local is the default value. This config paramete ...
-
如何在Hadoop Streaming中使用“typedbytes”或“rawbytes”?(How to use “typedbytes” or “rawbytes” in Hadoop Streaming?)[2022-11-22]
好吧,我发现了一个有效的组合,但这很奇怪。 根据文档或模仿typedbytes.py ,在本地文件系统中准备有效的typedbytes文件。 使用 hadoop jar path/to/streaming.jar loadtb path/on/HDFS.sequencefile < local/typedbytes.tb 将typedbytes包装在SequenceFile中并将其放入HDFS中,只需一步即可完成。 使用 hadoop jar path/to/streaming.jar -inputfor ... -
使用Hadoop Streaming的大象鸟输入格式时出错(Error using elephant-bird input format with Hadoop Streaming)[2022-04-04]
为了兼容性,Hadoop支持两种在Java中编写map / reduce任务的方法:通过org.apache.hadoop.mapred包中的接口创建“old”,使用org.apache.hadoop.mapred的抽象类创建“new” org.apache.hadoop.mapreduce包。 你需要知道这一点,即使你正在使用流式api,因为流本身是使用旧方法编写的,所以当你想用外部库改变流机制的一些内部时,你应该确定这个库是用旧学校的方式写的。 这正是你发生的事情。 在常见的情况下,你会写一个包装器,但 ...