昨天好不容易把集群搞起来了,今天运行一个程序却在logs里出现这样的错误,让我无比的纠结呀:在终端中显示为:
logs中的部分提示为:
2012-09-13 11:29:40,780 WARN org.apache.hadoop.security.ShellBasedUnixGroupsMapping: got exception trying to get groups for user webuser org.apache.hadoop.util.Shell$ExitCodeException: id: webuser:无此用户 at org.apache.hadoop.util.Shell.runCommand(Shell.java:255) at org.apache.hadoop.util.Shell.run(Shell.java:182) at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:375) at org.apache.hadoop.util.Shell.execCommand(Shell.java:461) at org.apache.hadoop.util.Shell.execCommand(Shell.java:444) at org.apache.hadoop.security.ShellBasedUnixGroupsMapping.getUnixGroups(ShellBasedUnixGroupsMapping.java:68) at org.apache.hadoop.security.ShellBasedUnixGroupsMapping.getGroups(ShellBasedUnixGroupsMapping.java:45) at org.apache.hadoop.security.Groups.getGroups(Groups.java:79) at org.apache.hadoop.security.UserGroupInformation.getGroupNames(UserGroupInformation.java:998) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.<init>(FSPermissionChecker.java:50) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5210) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkTraverse(FSNamesystem.java:5193) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:2019) at org.apache.hadoop.hdfs.server.namenode.NameNode.getFileInfo(NameNode.java:848) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)
我运行其他的程序完全可以的呀,为什么这个不行呢?我还重新格式化了整个集群,结果还是不行,最后居然是因为我的路径写错了,
比如:我的路径写为: hdfs://localhost:9000/user/fansy/input/data1 ,由于这个程序是我在伪分布式下编写的,当时的路径是没有问题的,但是现在是在集群中,所以路径写错了。应该改为: hdfs://192.168.0.123:9000/user/fansy/input/data1, 把localhost改为具体的Ip地址,如果在相应的路径上没有data1,那么会提示说没有文件,而不是在上文中终端中显示的那样。
今天还遇到一个问题,那就是我用10W条记录跑一个程序10分钟左右完成,用100W数据跑就要5到6Hours, 而且老是出现下面的错误:
就是不断的回去重新map,查了好多资料,比较靠谱的说法是内存溢出错误导致任务失败。所以对于大数据来说还是要写一些比较优化的程序才行。