我有一个20节点的Hadoop集群,每个节点有8GB内存和8核处理器。当我有一个300-600减速器的长期工作时,我有时会随机得到以下错误:
Exception in thread "main" java.io.IOException: Exception reading file:/var/tmp/jim/hadoop-jim/mapred/local/taskTracker/jim/jobcache/job_201305231647_0005/jobToken
at org.apache.hadoop.security.Credentials.readTokenStorageFile(Credentials.java:135)
at org.apache.hadoop.mapreduce.security.TokenCache.loadTokens(TokenCache.java:165)
at org.apache.hadoop.mapred.Child.main(Child.java:92)
Caused by: java.io.IOException: failure to login
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:501)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:463)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:1519)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1420)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:187)
at org.apache.hadoop.security.Credentials.readTokenStorageFile(Credentials.java:129)
... 2 more
Caused by: javax.security.auth.login.LoginException: java.lang.NullPointerException: invalid null input: name
at com.sun.security.auth.UnixPrincipal.<init>(UnixPrincipal.java:70)
at com.sun.security.auth.module.UnixLoginModule.login(UnixLoginModule.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
我尝试切换JVM,并且打开JDK 1.7和Oracle JVM 1.6偶尔会导致相同的错误。它并不总是发生,当它发生时,在特定节点中运行的所有任务都会失败,并且该节点会被列入黑名单。但是,当我提交另一份工作时,同一节点通常运行正常。我正在我的集群节点上运行Ubuntu 12.10。
我在线搜索了这个错误,我找到的唯一帖子来自Cloudera邮件存档,其中有人在Mac上运行伪分布式Hadoop集群。除此之外,我想我是第一个遇到这个问题的人。
我不是Hadoop的新手,一般可以自己解决群集相关问题或错误配置问题,但我真的很感激有关此问题的任何反馈。