Hadoop MapReduce案例word count本地环境运行时遇到的一些问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ichimaru_Gin_/article/details/79005095

问题一

加载不到主类

原因:我一开始创建的是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


展开阅读全文

没有更多推荐了,返回首页