Hadoop學習過程遇到的問題總結

問題一

問題描述:

8/01/22 16:52:16 WARN Client: Failed to connect to server: master/192.168.217.128:10020: retries get failed due to exceeded maximum allowed retries number: 10
java.net.ConnectException: Connection refused
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
	at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495)
	at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:682)
	at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:778)
	at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:410)
	at org.apache.hadoop.ipc.Client.getConnection(Client.java:1544)
	at org.apache.hadoop.ipc.Client.call(Client.java:1375)
	at org.apache.hadoop.ipc.Client.call(Client.java:1339)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:227)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116)
	at com.sun.proxy.$Proxy15.getCounters(Unknown Source)
	at org.apache.hadoop.mapreduce.v2.api.impl.pb.client.MRClientProtocolPBClientImpl.getCounters(MRClientProtocolPBClientImpl.java:166)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.mapred.ClientServiceDelegate.invoke(ClientServiceDelegate.java:325)
	at org.apache.hadoop.mapred.ClientServiceDelegate.getJobCounters(ClientServiceDelegate.java:381)
	at org.apache.hadoop.mapred.YARNRunner.getJobCounters(YARNRunner.java:606)
	at org.apache.hadoop.mapreduce.Job$8.run(Job.java:812)
	at org.apache.hadoop.mapreduce.Job$8.run(Job.java:809)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836)
	at org.apache.hadoop.mapreduce.Job.getCounters(Job.java:809)
	at org.apache.hadoop.mapreduce.Job.monitorAndPrintJob(Job.java:1434)
	at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1362)
	at org.apache.mahout.text.SequenceFilesFromDirectory.runMapReduce(SequenceFilesFromDirectory.java:177)
	at org.apache.mahout.text.SequenceFilesFromDirectory.run(SequenceFilesFromDirectory.java:90)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
	at org.apache.mahout.text.SequenceFilesFromDirectory.main(SequenceFilesFromDirectory.java:64)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
	at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
	at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:152)
	at org.apache.mahout.driver.MahoutDriver.main(MahoutDriver.java:195)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:234)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:148)

解決方案:

在mapred-site.xml配置文件中添加:

<property>  
    <name>mapreduce.jobhistory.address</name>  
    <value>${namenode hostname}:10020</value>  
</property>
在namenode上執行命令:mr-jobhistory-daemon.sh start historyserver 
這樣在namenode上會啓動JobHistoryServer服務,

參考文獻:hadoop運行mapreduce作業無法連接0.0.0.0/0.0.0.0:10020


問題二

問題描述

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/htrace/core/Tracer$Builder
	at org.apache.hadoop.fs.FsTracer.get(FsTracer.java:42)
	at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2806)
	at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:100)
	at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2849)
	at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2831)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:389)
	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:356)
	at org.apache.mahout.classifier.df.mapreduce.TestForest.testForest(TestForest.java:170)
	at org.apache.mahout.classifier.df.mapreduce.TestForest.run(TestForest.java:157)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
	at org.apache.mahout.classifier.df.mapreduce.TestForest.main(TestForest.java:505)
Caused by: java.lang.ClassNotFoundException: org.apache.htrace.core.Tracer$Builder
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

解決方案:

添加htrace-core4-4.1.0-incubating.jar (下載地址:http://mvnrepository.com/artifact/org.apache.htrace/htrace-core4/4.1.0-incubating

問題三

問題描述:

這是一個血的教訓,以至於自己在這裏停了將近三天的時間。

我在本地環境運行mahout的程序時,總是顯示找不到自己寫的一個靜態的mapper子類,所報錯誤如下:

Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.mahout.classifier.df.mapreduce.Classifier$CMapper not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2298)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:745)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:169)
Caused by: java.lang.ClassNotFoundException: Class org.apache.mahout.classifier.df.mapreduce.Classifier$CMapper not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2202)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2296)
    ... 8 more

解決方案:

如果不是在eclipse本地運行的話,可以參考http://techme.lofter.com/post/ccd6e_1e772b, 博主使用的是

((JobConf) job.getConfiguration()).setJar(jarFile.toString());
這行代碼代替job.setJarByClass()。

但我是在eclipse本地運行,我的解決方案很簡單,就是不要把,hadoop的相關配置文件放在src目錄下!!!不然eclipse會把項目提交到hadoop集羣上去執行,而此時就牽扯到類加載和打jar包的相關問題。

把這三個文件移到別的目錄下就好了


之所以是血的教訓,是因爲,我在一開始學習的時候,就看到說不要把其他的相關配置文件放到src目錄下。┭┮﹏┭┮


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章