当尝试根据这个http://www.thegeekstuff.com/2012/02/hadoop-pseudo-distributed-installation/网站在我的笔记本电脑上以伪分发模式安装 hadoop 0.21.0 时,我遇到了这个异常来格式化名称节点:
hadoop@host220:~/hadoop-0.21.0$ bin/hadoop namenode -format 不推荐使用:不推荐使用此脚本执行 hdfs 命令。 而是使用 hdfs 命令。 log4j:错误无法实例化类 [org.apache.hadoop.log.metrics.EventCounter]。 java.lang.ClassNotFoundException:org.apache.hadoop.log.metrics.EventCounter 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:169) 在 org.apache.log4j.helpers.Loader.loadClass(Loader.java:179) 在 org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:320) 在 org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:121) 在 org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:664) 在 org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647) 在 org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544) 在 org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440) 在 org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476) 在 org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471) 在 org.apache.log4j.LogManager.(LogManager.java:125) 在 org.apache.log4j.Logger.getLogger(Logger.java:105) 在 org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289) 在 org.apache.commons.logging.impl.Log4JLogger.(Log4JLogger.java:109) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1116) 在 org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:914) 在 org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604) 在 org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336) 在 org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310) 在 org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) 在 org.apache.hadoop.conf.Configuration.(Configuration.java:153) 在 org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:137) log4j:错误无法实例化名为“EventCounter”的附加程序。 12/10/31 10:58:42 信息 namenode.NameNode: STARTUP_MSG: /************************************************* *********** STARTUP_MSG:启动 NameNode STARTUP_MSG:主机=主机220/127.0.0.1 STARTUP_MSG:args = [-format] STARTUP_MSG:版本 = 0.21.0 STARTUP_MSG:类路径 = /etc/hadoop:/usr/lib/jvm/java-6-sun/lib/tools.jar:/home/hadoop/hadoop-0.21.0/bin/../lib/*.jar STARTUP_MSG:构建 = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.21 -r 985326;由“tomwhite”于 2010 年 8 月 17 日星期二 01:02:28 EDT 编译 ****************************************************** **********/ 12/10/31 10:58:43 INFO namenode.FSNamesystem: defaultReplication = 3 12/10/31 10:58:43 信息 namenode.FSNamesystem: maxReplication = 512 12/10/31 10:58:43 信息 namenode.FSNamesystem: minReplication = 1 12/10/31 10:58:43 信息 namenode.FSNamesystem: maxReplicationStreams = 2 12/10/31 10:58:43 信息 namenode.FSNamesystem: shouldCheckForEnoughRacks = false 12/10/31 10:58:43 INFO security.Groups:组映射 impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping;缓存超时=300000 12/10/31 10:58:43 信息 namenode.FSNamesystem: fsOwner=hadoop 12/10/31 10:58:43 INFO namenode.FSNamesystem: supergroup=supergroup 12/10/31 10:58:43 信息 namenode.FSNamesystem: isPermissionEnabled=true 12/10/31 10:58:43 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s) 12/10/31 10:58:43 INFO common.Storage: 0 秒内保存的大小为 112 的图像文件。 12/10/31 10:58:43 INFO common.Storage: 存储目录/tmp/hadoop-hadoop/dfs/name 已格式化成功。 12/10/31 10:58:43 信息 namenode.NameNode: SHUTDOWN_MSG: /************************************************* *********** SHUTDOWN_MSG:在host220/127.0.0.1关闭NameNode ****************************************************** **********/
最后它成功格式化了namenode,尽管有例外。然后我尝试使用“start-all.sh”启动 dfs 和 mapreduce,但失败了。下面是控制台输出:
hadoop@host220:~/hadoop-0.21.0$ bin/start-all.sh 此脚本已弃用。而是使用 start-dfs.sh 和 start-mapred.sh mkdir:无法创建目录`/var/run/hadoop':权限被拒绝 启动namenode,登录到/var/log/hadoop/hadoop/hadoop-hadoop-namenode-host220.out /home/hadoop/hadoop-0.21.0/bin/../bin/hadoop-daemon.sh:第127行:/var/run/hadoop/hadoop-hadoop-namenode.pid:没有这样的文件或目录 log4j:错误无法实例化类 [org.apache.hadoop.log.metrics.EventCounter]。 java.lang.ClassNotFoundException:org.apache.hadoop.log.metrics.EventCounter 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:169) 本地主机:mkdir:无法创建目录`/var/run/hadoop':权限被拒绝 localhost:启动datanode,登录到/var/log/hadoop/hadoop/hadoop-hadoop-datanode-host220.out 本地主机:/home/hadoop/hadoop-0.21.0/bin/hadoop-daemon.sh:第 127 行:/var/run/hadoop/hadoop-hadoop-datanode.pid:没有这样的文件或目录 本地主机:log4j:错误无法实例化类 [org.apache.hadoop.log.metrics.EventCounter]。 本地主机:java.lang.ClassNotFoundException:org.apache.hadoop.log.metrics.EventCounter 本地主机:在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 本地主机:在 java.security.AccessController.doPrivileged(本机方法) 本地主机:在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 本地主机:在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 本地主机:在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 本地主机:在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 本地主机:在 java.lang.Class.forName0(本机方法) 本地主机:在 java.lang.Class.forName(Class.java:169) 本地主机:mkdir:无法创建目录`/var/run/hadoop':权限被拒绝 localhost:启动secondarynamenode,登录到/var/log/hadoop/hadoop/hadoop-hadoop-secondarynamenode-host220.out 本地主机:/home/hadoop/hadoop-0.21.0/bin/hadoop-daemon.sh:第 127 行:/var/run/hadoop/hadoop-hadoop-secondarynamenode.pid:没有这样的文件或目录 本地主机:log4j:错误无法实例化类 [org.apache.hadoop.log.metrics.EventCounter]。 本地主机:java.lang.ClassNotFoundException:org.apache.hadoop.log.metrics.EventCounter 本地主机:在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 本地主机:在 java.security.AccessController.doPrivileged(本机方法) 本地主机:在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 本地主机:在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 本地主机:在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 本地主机:在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 本地主机:在 java.lang.Class.forName0(本机方法) 本地主机:在 java.lang.Class.forName(Class.java:169) mkdir:无法创建目录`/var/run/hadoop':权限被拒绝 启动jobtracker,记录到/var/log/hadoop/hadoop/hadoop-hadoop-jobtracker-host220.out /home/hadoop/hadoop-0.21.0/bin/../bin/hadoop-daemon.sh:第127行:/var/run/hadoop/hadoop-hadoop-jobtracker.pid:没有这样的文件或目录 log4j:错误无法实例化类 [org.apache.hadoop.log.metrics.EventCounter]。 java.lang.ClassNotFoundException:org.apache.hadoop.log.metrics.EventCounter 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:169) 本地主机:mkdir:无法创建目录`/var/run/hadoop':权限被拒绝 localhost:启动tasktracker,登录到/var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-host220.out 本地主机:/home/hadoop/hadoop-0.21.0/bin/hadoop-daemon.sh:第 127 行:/var/run/hadoop/hadoop-hadoop-tasktracker.pid:没有这样的文件或目录 本地主机:log4j:错误无法实例化类 [org.apache.hadoop.log.metrics.EventCounter]。 本地主机:java.lang.ClassNotFoundException:org.apache.hadoop.log.metrics.EventCounter 本地主机:在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 本地主机:在 java.security.AccessController.doPrivileged(本机方法) 本地主机:在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 本地主机:在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 本地主机:在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 本地主机:在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 本地主机:在 java.lang.Class.forName0(本机方法) 本地主机:在 java.lang.Class.forName(Class.java:169)