问题一
加载不到主类
原因:我一开始创建的是Map/Reduce Project, 它会直接去我本地安装的hadoop里面寻找相应的jar包。但是由于我一开始将hadoop放在D:\Program Files文件夹下,应为该路径中间有个空格,所以没有找到相应的jar包。
解决方案:将hadoop移出D:\Program Files文件夹,直接放到D盘下,然后重新配置环境变量
问题二
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
解决方案:
在main函数中插入代码
BasicConfigurator.configure();
这样可以使打印日志,不报warn的错误,实际并没有解决log4j的错误
问题三
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.hdaoop.py.mpWordCount2.WordCount.main(WordCount.java:58)
原因:我的代码中有写,在程序运行的过程中需要获取初始化参数
没有给定这个参数的时候,自然会报错
解决方案:Project右键Run As-Run configuration-Arguments
问题四
Description Resource Path Location Type
Archive for required library: 'C:/Users/pangying/.m2/repository/com/google/guava/guava/11.0.2/guava-11.0.2.jar' in project 'mavenWordCount' cannot be read or is not a valid ZIP file mavenWordCount Build path Build Path Problem
原因:这个项目是我用meaven创建的,由于我中间换了IED的版本,所以出现了一些错误
解决方案:
首先, 删除对应文件夹下的jar包(最好直接删除上一级文件夹)
然后, 右键项目-meaven-update project 勾选force update…,然后点击OK即可
问题五
Exception in thread "Thread-18" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:589)
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
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)
... 1 more
解决方案:
如果是meaven项目,在pom.xml中添加
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
</dependency>
如果是普通的Java project,可以手动添加httpclient-4.3.4.jar
问题六
Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.217.128:9000/user/root/output/count.txt, expected: file:///
解决方案:
1. 将集群中hadoop的配置文件core-site.xml和hdfs-site.xml拷到eclipse项目的src文件夹下,注意要把其中的hostname换成对应的IP地址。
2. 在main方法中加入下面两行代码
conf.addResource(new Path("core-site.xml"));
conf.addResource(new Path("dfs-site.xml"));
问题七
java.io.IOException: No FileSystem for scheme: hdfs
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2421)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367)
at FileCopyToHdfs.readFromHdfs(FileCopyToHdfs.java:65)
at FileCopyToHdfs.main(FileCopyToHdfs.java:26)</pre>
解决方案: 导入hadoop-hdfs.jar
问题八
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
这个问题需要修改源码。
1. 下载对应版本的hadoop源码,加压。
2. 找到hadoop-XX-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio下NativeIO.java, 我的是2.8.2版本,要修改的代码位置在606行
public static boolean access(String path, AccessRight desiredAccess)
throws IOException {
return true;
// return access0(path, desiredAccess.accessRight());
}
即注释掉原来的代码,改为return true
3. 在eclipse的项目中建立相应路径的package,将NativeIO.java拷到该包中
参考文献:解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 等一系列问题
END