1. 程式人生 > >windows7下java程式碼從遠端hadoop服務上下載檔案

windows7下java程式碼從遠端hadoop服務上下載檔案

1. 在windows7下無法下載遠端hdfs服務上的檔案

1. 問題原因

  1. hadoop官方不支援windows平臺,沒有windows版本的hadoop,想在windows上執行hadoop很麻煩
  2. 官方下載的hadoop安裝包中缺少兩個檔案hadoop.dll和winutils.exe,用於支援windows

2. 解決方法

  1. 下載hadoop安裝包並解壓縮到windows硬碟中,可以linux中的hadoop資料夾下載到windows
  2. 新增/bin和/sbin到環境變數HADOOP_HOME
    ~\hadoop-2.7.6\sbin;~\hadoop-2.7.6\bin
  3. 下載我上傳的兩個檔案hadoop.dll和winutils.exe
  4. 將本檔案解壓放到~\hadoop-2.7.6\bin
  5. 將hadoop.dll放到C:\Windows\System32

3. 版本無所謂

  1. 起初我認為hadoop.dll和winutils.exe要和hadoop版本一致,後來發現這個資料夾並不會被執行,所以版本無所謂
  2. 如果要在windows上執行hadoop,大概還是要版本一致吧,我上傳的為2.7.4版本

2. 在idea中測試下載hdfs上的檔案

  1. 通過maven專案新增hadoop-client依賴庫和junit依賴庫
  2. 通過java程式碼呼叫hdfs服務並下載檔案
    @Test
    public
void demo01() throws URISyntaxException, IOException, InterruptedException { // 設定配置物件 Configuration cfg=new Configuration(); //FileSystem.get(hdfs協議形式的Url物件,本地配置物件,傳遞的使用者名稱) //hadoop的hdfs檔案系統支援多種協議,必須指定Hdfs協議否則預設使用本地檔案file:///協議 FileSystem fs = FileSystem.get(new URI("hdfs://master:9000/"
),cfg,"hadoop"); //URI網路指定識別符號,作為hdfs協議的唯一標識,定位到具體位置,user如果不寫會報寫入許可權錯誤 fs.copyToLocalFile(new Path("/minput/abc.txt"),new Path("D:/")); // 下載檔案需要本地hadoop的支援,否則會報錯 fs.close(); }