由於之前在 Github 上找不到 .NET Hadoop WebHDFS 的library for .NET 開發使用 (有Ruby, Python.... 但沒有 .NET ) , 只好先做一個應急
但.....
因為工作上的需求,有了一些 Hadoop 的測試環境
又因為大部分開發人員都是熟悉.NET 的開發,因此存取 Hadoop HDFS 決定使用call WebHdfs api 的方式
只好K一下 hadoop hdfs api 的介面,寫了一些應急的功能
後來才發現原來nuget 上也有 ,原來是自己的關鍵字下錯,還以為微軟的Library 都是跟Hdinsight 有關係
https://www.nuget.org/packages/Microsoft.Hadoop.WebClient/
是說這個Package 的相依性,真是會讓我誤會跟Hdinsight 有關係
既然寫了,還是紀錄一下好了
SourceCode :
https://github.com/DevelopZakk/NETWebHdfs
下載後,使用前置作業
1. 需copy aHadoop.config, DevZa.config 到你的專案目錄
2. 參考 DevZa.aHdoop.Hdfs, DevZa.aHdoop.Core, DevZa.Core
3. 修改aHadoop.Config 檔案 (因為公司開發的習慣,有一些資料寫在Config 檔,而沒有在建構子提供)
nameNodes 的部分, 主要把 type = "Active" 的 ip 設定好
<nameNodes>
<add name="yourhost" ip="yourip" type="Active" />
<add name="yourhost2" ip="yourip2" type="StandBy" />
</nameNodes>
以及帳號的部分 (我相信台灣大部分的webhdfs 的Security 其實是沒有安全性的,因此大都放在隔絕的環境使用........)
<aHadoopUserInfoSecurity>
<user id="hadoop" password="hadoop" />
</aHadoopUserInfoSecurity>
下面是 Sample Code (也可以看一下Unit Test 的程式碼)
1. 取得 目錄 資訊
IHadoopHdfsService manager = new HadoopHdfsManager();
var info = manager.GetDirectoryInformation("/tmp").Result;
2. 取得檔案資訊
var manager = new HadoopHdfsManager();
var status = manager.GetWebHdfsGetFileStatus("/user/history/testfile").Result;
3. 建立目錄
IHadoopHdfsService manager = new HadoopHdfsManager();
var info = manager.GetDirectoryInformation("/tmp").Result;
info.CreateSubFolder("NewFolder");
4. 上傳本地檔案
IHadoopHdfsService manager = new HadoopHdfsManager();
var info = manager.GetDirectoryInformation("/tmp").Result;
var result = info.PutFileFromLocal(@"D:\temp\Sample.txt");
5. 下載hdfs檔案
IHadoopHdfsService manager = new HadoopHdfsManager();
var info = manager.GetDirectoryInformation("/tmp").Result;
info.DownloadFile("9F.pptx");
6. 刪除檔案或目錄
IHadoopHdfsService manager = new HadoopHdfsManager(new WebHdfsRestfulConnection("impala", ""));
var info = manager.GetDirectoryInformation("/tmp/impala/QueryAndInsert").Result;
var result = manager.RemoveSubFolderOrFile(info, "QueryAndInsertP100000", true);
目前沒有將所有api 介面實作出來
只有針對有需要的部分開發
附註:
https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html