eclipse开发mapreduce程序遇到的环境问题
公司是在windows servers 2008上用eclipse进行开发,hadoop集群也是由多台linux服务器组成的真实集群。由于我要开发的程序涉及到hadoop、hbase、solr,理所当然的引入了相关的核心jar包到工程里面,代码也没显示任何异常。但是在运行代码的时候却报了各种错误,之前在自己电脑虚拟机上开发mapreduce程序是没有问题的,现将解决方法记录一下。
异常1:
Exception in thread "main" java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses. at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:119) at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:81) at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:74) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1188) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1184) 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:1478) at org.apache.hadoop.mapreduce.Job.connect(Job.java:1183) at org.apache.hadoop.mapreduce.Job.submit(Job.java:1212) at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1236)
解决办法:
MR程序初始化的时候需要加载“ClientProtocolProvider.class”,查了下有两个jar包包含这个的子类“hadoop-mapreduce-client-common-2.0.0-cdh4.2.1.jar”、“hadoop-mapreduce-client-jobclient-2.0.0-cdh4.2.1.jar”,将这两个jar包引入项目中,问题得以解决。
异常2:
Exception in thread "main" java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) at org.apache.hadoop.util.Shell.runCommand(Shell.java:201) at org.apache.hadoop.util.Shell.run(Shell.java:183) at org.apache.hadoop.fs.FileUtil$CygPathCommand.<init>(FileUtil.java:413) at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:439) at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:466) at org.apache.hadoop.fs.RawLocalFileSystem.execCommand(RawLocalFileSystem.java:559) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:551) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:355) at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:212)
解决办法:
尽管连接的hadoop平台是在linux上面,但是我们的eclipse调试环境是在windows server 2008,我们需要安装一个linux模拟器“cygwin”来支持程序的运行。
在windows server 2008开发服务器上安装好cygwin,然后在环境变量中添加cygwin的bin目录,比如“D:\Program\cygwin\bin”,问题得以解决。