具体异常以下:linux
解决方案:sql
删除pom文件中的hadoop-core的依赖,缘由:hadoop-core是1.x的产物,在2.x以后已经被hadoop-common取代,我配置的时候同时使用了这两个依赖致使jar包冲突.windows
附上我测试上传用的代码缓存
1 /** 2 * 上传文件到hdfs 3 * @author tele 4 * 5 */ 6 public class Demo1 { 7 public static void main(String[] args) throws Exception { 8 Configuration conf = new Configuration(); 9 FileSystem fs = FileSystem.get(new URI("hdfs://hadoop002:9000"), conf,"tele"); 10 fs.copyFromLocalFile(new Path("f:/test.sql"),new Path("/111.sql")); 11 fs.close(); 12 System.out.println("上传完毕"); 13 } 14 }
若是下载的过程当中出现了 HADOOP_HOME and hadoop.home.dir are unset,那么就说明你没有配置windows本地的hadoop环境变量.你可能会想我是远程调用linux下的hadoop,与我本地的hadoop有什么关系?若是你的操做只对远程的hadoop生效,如上传,建立目录,文件更名(写)等那么你是不须要在windows本地配置hadoop的,可一旦涉及到下载(读),hadoop内部的缓存机制要求本地也必须有hadoop,因而也会出现HADOOP_HOME and hadoop.home.dir are unset,解决办法配置HADOOP_HOME并加入%HADOOP_HOME%\bin到PATH中,以后测试下hadoop version命令,有效的话重启你的eclipse/myeclipse,但这还不够,windows下的hadoop还须要winutils.exe,不然会报Could not locate Hadoop executable: xxxx\winutils.exe eclipse
测试下载的代码以下oop
1 static FileSystem fs; 2 static { 3 Configuration conf = new Configuration(); 4 try { 5 fs = FileSystem.get(new URI("hdfs://hadoop002:9000"), conf,"tele"); 6 } catch (IOException e) { 7 // TODO Auto-generated catch block 8 e.printStackTrace(); 9 } catch (InterruptedException e) { 10 // TODO Auto-generated catch block 11 e.printStackTrace(); 12 } catch (URISyntaxException e) { 13 // TODO Auto-generated catch block 14 e.printStackTrace(); 15 } 16 } 17 18 //下载文件 19 @Test 20 public void downLoadFile() throws Exception{ 21 //若是为null,重启myeclipse/eclipse便可 22 System.out.println(System.getenv("HADOOP_HOME")); 23 fs.copyToLocalFile(new Path("/hello2.sql"),new Path("C:/a.sql")); 24 fs.close(); 25 System.out.println("下载完毕"); 26 }