windows7下java程式碼從遠端hadoop服務上下載檔案
阿新 • • 發佈:2019-01-10
1. 在windows7下無法下載遠端hdfs服務上的檔案
1. 問題原因
- hadoop官方不支援windows平臺,沒有windows版本的hadoop,想在windows上執行hadoop很麻煩
- 官方下載的hadoop安裝包中缺少兩個檔案hadoop.dll和winutils.exe,用於支援windows
2. 解決方法
- 下載hadoop安裝包並解壓縮到windows硬碟中,可以linux中的hadoop資料夾下載到windows
- 新增/bin和/sbin到環境變數HADOOP_HOME
~\hadoop-2.7.6\sbin;~\hadoop-2.7.6\bin - 下載我上傳的兩個檔案hadoop.dll和winutils.exe
- 將本檔案解壓放到~\hadoop-2.7.6\bin
- 將hadoop.dll放到C:\Windows\System32
3. 版本無所謂
- 起初我認為hadoop.dll和winutils.exe要和hadoop版本一致,後來發現這個資料夾並不會被執行,所以版本無所謂
- 如果要在windows上執行hadoop,大概還是要版本一致吧,我上傳的為2.7.4版本
2. 在idea中測試下載hdfs上的檔案
- 通過maven專案新增hadoop-client依賴庫和junit依賴庫
- 通過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();
}