eclipse执行wordcount出错,求大侠指引

hello你的world 2014-02-13 05:10:57
CentOS下安装的hadoop2.2.0
win7下的eclipse-juno
配置好eclipse-hadoop插件后兴奋的开始在eclipse跑wordcount,按照前辈们资料上的各种方法都使了,无论是run as java application 还是 run on hadoop 都是这一个错:

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.
Exception in thread "main" java.lang.NullPointerException
at java.lang.ProcessBuilder.start(Unknown Source)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:404)
at org.apache.hadoop.util.Shell.run(Shell.java:379)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:678)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:661)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265)
[code=java]
[/code]
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)
at com.rzdev.hadoop.WordCount.main(WordCount.java:66)

run on hadoop时也不弹出select hadoop location的配置界面,直接就出此异常,无奈了,来个大侠收了它吧...小弟分不多,先谢了


代码(就是自带的源代码,无论怎么改conf都出上述异常):

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
// value已经是文件内容的一行
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}

public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}

public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
...全文
2749 20 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
silent1 2015-09-02
  • 打赏
  • 举报
回复
我的情况是这样的: 需要hadoop.dll,winutils.exe ,参见这个文档 http://www.cnblogs.com/huligong1234/p/4137133.html “七、windows下运行环境配置”
lefuhan 2015-07-08
  • 打赏
  • 举报
回复
各位大侠,有解决这个问题的了吗?谁给解答下。
MyTaraxacum 2015-02-12
  • 打赏
  • 举报
回复
github下载hadoop-commin-2.2.zip,官方下载的Apache hadoop 2.4.0的压缩包里,缺少windows下运行的链接库(hadoop.dll,winutils.exe,libwinutils.lib等),这个github的是大佬们编译好的64bit版的链接库包。下载直接解压缩,覆盖掉官方hadoop目录下的bin目录即可。 环境变量中配置 HADOOP_HOME hadoop-commin-2.2.zip下载地址:http://blog.csdn.net/supperman_009/article/details/39991809
young171 2015-02-12
  • 打赏
  • 举报
回复
//创建默认的配置文件(对应读取Hadoop的conf-pseudo下的相关配置项) Configuration conf = new Configuration(); conf.set("fs.default.name", "hdfs://localhost:9000"); //手动设置fs.default.name属性,因为该Eclipse版本不会弹出select hadoop location界面
leaderYU 2014-09-18
  • 打赏
  • 举报
回复
有人解决了这个问题吗?
xuhan200328 2014-09-13
  • 打赏
  • 举报
回复
这问题就windows上运行有,我也遇到了。最后我,将环境完全不变移植到Linux上就没问题了。建议在Linux下部署吧
很菜鸟 2014-05-22
  • 打赏
  • 举报
回复
引用 13 楼 mykingbull 的回复:
Hadoop 2.2 Windows下eclipse开发hadoop程序会报错,原因是因为hadoop2.2没有发布winutils.exe造成的,现编译发布出来; 把此文件放到hadoop/bin下,在环境变量中配置 HADOOP_HOME 即可。http://download.csdn.net/detail/wzrain/6773185
你好, 你说的“把此文件放到hadoop/bin下”和“在环境变量中配置 HADOOP_HOME ” 都知道是在linux虚拟机端的hadoop吗?还是windows端啊?
mykingbull 2014-05-20
  • 打赏
  • 举报
回复
Hadoop 2.2 Windows下eclipse开发hadoop程序会报错,原因是因为hadoop2.2没有发布winutils.exe造成的,现编译发布出来; 把此文件放到hadoop/bin下,在环境变量中配置 HADOOP_HOME 即可。http://download.csdn.net/detail/wzrain/6773185
aqbbsxiao2 2014-04-24
  • 打赏
  • 举报
回复
安装了cygwin,也设置了环境变量,但是不能解决这个空指针的问题啊
junrong624 2014-03-17
  • 打赏
  • 举报
回复
我也遇到这个问题了,这个解决了吗
hello你的world 2014-03-10
  • 打赏
  • 举报
回复
@heiselanbai 抱歉..#6不对 期间我停下2.2.0 去搞0.20了,现在试了试,不行 期待有大手提供建议
hello你的world 2014-03-10
  • 打赏
  • 举报
回复
我是eclipse配置win7本地的hadoop路径不对,hadoop集群配置文件中声明了使用yarn框架,则在eclipse创建MapReduce工程时的那个Configure hadoop install directory 链接要连接到: ..*\hadoop-2.2.0\share\hadoop\yarn中(如果是配置的MapReduce框架,那就是MapReduce文件夹),而我之前是只链接到了 hadoop-2.2.0这个目录(楼上的是不是呢?),虽然能自动导入jar包,但是会有上述错误. 而指定到具体的yarn/MapReduce文件夹创建完毕工程后,jar包是不会自动导入的,手动导入即可,但不会再有那个问题了. 此之后还会有异常,网上资料就很多了
heiselanbai 2014-03-07
  • 打赏
  • 举报
回复
是否要重启电脑???
heiselanbai 2014-03-07
  • 打赏
  • 举报
回复
我也遇到同样的问题,根据楼主的方法,安装了cygwin,也设置了环境变量,还是报错啊 og4j: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. Exception in thread "main" java.lang.NullPointerException at java.lang.ProcessBuilder.start(ProcessBuilder.java:441) at org.apache.hadoop.util.Shell.runCommand(Shell.java:404) at org.apache.hadoop.util.Shell.run(Shell.java:379) at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589) at org.apache.hadoop.util.Shell.execCommand(Shell.java:678) at org.apache.hadoop.util.Shell.execCommand(Shell.java:661) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435) at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277) at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286) at com.wasu.hadoop.example.WordCountTest.main(WordCountTest.java:155)
hello你的world 2014-03-05
  • 打赏
  • 举报
回复
2楼: 路径我绝对没问题, 5楼: 在win7系统里运行mapreduce程序要里面用到unix命令(底层吧,关于chmod ...的异常),在win7上安装cygwin,并配置path环境变量即可,我是这样做的 ,最后没问题了. 谢谢大家,如果另有见解请不吝赐教
mark_lost 2014-02-26
  • 打赏
  • 举报
回复
怀疑是什么路径问题,但是不知道在什么地方,#2楼的方法也是没用的
mark_lost 2014-02-26
  • 打赏
  • 举报
回复
我也是这样的,直接在任何一个linux下面用eclipse执行都是正确的,但在windows下面执行就是java.lang.NullPointerException
elleniou 2014-02-20
  • 打赏
  • 举报
回复
楼主你有答案了吗 我也遇到这个问题
crazyzhb2012 2014-02-19
  • 打赏
  • 举报
回复
表示没有碰到这样的问题,我建议你在main函数里面配置输入输出文件夹的位置。 把String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();这一行换成: String[] arg = {"hdfs://localhost:9000/user/administrator/bayes/bayestrain_input","hdfs://localhost:9000/user/administrator/bayes/bayestrain_output"}; String[] otherArgs = new GenericOptionsParser(conf, arg).getRemainingArgs(); 路径以你自己的为准,试试看
hello你的world 2014-02-17
  • 打赏
  • 举报
回复
网上都是讨论ioException,跟这个没关系么?..这个问题就这么冷么?...
发帖
Linux/Unix社区

2.2w+

社区成员

Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
帖子事件
创建了帖子
2014-02-13 05:10
社区公告
暂无公告