在ubuntu系统下开发hadoop程序时,遇到几个问题,小结如下。
问题:内存不足,报错:There is insufficient memory for the Java Runtime Environment to continue
解决方法如下:
1、使用进程查看命令:ps -e | grep java。
然后删除过多的java进程,释放出内存资源。这种方法治标。
打开系统的限制文件:vi /etc/security/limits.conf,在文件最后添加:* - nofile 278528 保存(已经设置得够大了)
使用命令查看open files数值:vim /etc/security/limits.conf,看到open files.(这个方法没试成功,修改后查看open files 还是1024,也许需要重启系统。)
详见参考文章1.
还有说是因为java设置的最大可用内存,不够maven使用,所以出现警告(这种解释最靠谱)。
对应的解决办法是,设置/etc/profile文件中maven的opts:export MAVEN_OPTS="-Xms256m -Xmx512m"
2、测试mapreduce程序时,设置input,output文件位置如下代码。
3、输出文件output不能存在,程序自动删除output文件代码如下。
public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); // String[] otherArgs = new GenericOptionsParser(conf, // args).getRemainingArgs(); String[] otherArgs = new String[] { "input", "output" }; /* 直接设置输入参数 */ if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } /* 删除输出目录 */ Path outputPath = new Path(otherArgs[1]); outputPath.getFileSystem(conf).delete(outputPath, true); Job job = Job.getInstance(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])); //输出在本地 // FileOutputFormat.setOutputPath(job, new Path("output06")); //输出为HDFS? System.exit(job.waitForCompletion(true) ? 0 : 1); }
4、运行程序,能够在本工程目录下,看到output文件夹。
文件夹下的文件即是程序运行后的结果,如下图。
5、运行通过后,即可将程序打成jar包。
将打包后的jar放在某个位置,假设名字为×××.jar。
调用./bin/hadoop jar ×××.jar WordCount input(HDFS input文件的位置) output(HDFS输出文件的位置)
运行即可的到结果。
6、用hadoop eclipse插件刷新后,查看运行结果。
也可以将结果文件通过hadoop文件下载到本地查看,或保存。
补充说明:
我的程序在本地运行很好。
可始终在hadoop eclipse插件上,看不到hdfs上文件的更新。
如何能使用hadoop eclipse插件,调试、运行源程序,同事在插件上查看到结果,后一篇文章再解决。
参考文章
1、http://www.linuxidc.com/Linux/2013-07/86954.htm
2、http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html(hadoop官方说明)