maven hadoop 3.x HADOOP_HOME and hadoop.home.dir are unset Not implemented by the WebHdfsFileSys...

具體異常以下: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 }
相關文章
相關標籤/搜索