.NET use WebHDFS API 簡易版

由於之前在 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