Invoke Hadoop WebHDFS APIs in .NET Core

Raymond Tang Raymond Tang 0 4422 1.65 index 2/26/2018

Background

Apache doesn't provide native official .NET APIs for Hadoop HDFS. The HTTP REST API supports the complete FileSystem/FileContext interface for HDFS.

Thus, we could use these web APIs to perform HDFS operations in other programming language like C#.

WebHDFS APIs reference

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

Examples

List files

The following code snippet retrieve the file list in the root directory in my local Hadoop node.:

static void Main(string[] args)          {              WebHdfsListStatusApi();              Console.ReadLine();          }

static void WebHdfsListStatusApi()          {

var protocal = "http";              var host = "127.0.0.1";              var port = 9870;              var hdfsFilePath = "\";              var operation = "LISTSTATUS";              var url = $"{protocal}://{host}:{port}/webhdfs/v1/{hdfsFilePath}?op={operation}";              var request = (HttpWebRequest)WebRequest.Create(url);              var response = (HttpWebResponse)request.GetResponse();              using (StreamReader reader = new StreamReader(response.GetResponseStream()))              {                  var result = reader.ReadToEnd();                  Console.WriteLine(result);              }          }

The output looks like the following screenshot:

https://api.kontext.tech/resource/2f9a8828-f896-5f46-8cbd-017b2bb6991d

The following is the output in Postman:

https://api.kontext.tech/resource/4c158e2a-f9b2-51c1-822e-eb98f7c901fe

Get file content

Similarly you can also get the content of a file through OPEN operation:

static void Main(string[] args)          {              WebHdfsGetFileContent();              Console.ReadLine();          }

static void WebHdfsGetFileContent()          {

var protocal = "http";              var host = "127.0.0.1";              var port = 9870;              var hdfsFilePath = "\Sales.csv";              var operation = "OPEN";              var url = $"{protocal}://{host}:{port}/webhdfs/v1/{hdfsFilePath}?op={operation}";              var request = (HttpWebRequest)WebRequest.Create(url);              var response = (HttpWebResponse)request.GetResponse();              using (StreamReader reader = new StreamReader(response.GetResponseStream()))              {                  var result = reader.ReadToEnd();                  Console.WriteLine(result);              }          }

The following screenshot is the sample output:

https://api.kontext.tech/resource/d6cdc3b7-8250-58c3-953b-42dd98becf36

hadoop hdfs lite-log

Join the Discussion

View or add your thoughts below

Comments