2010-01-10 18 views
3

目前,我的應用程序在Linux上使用C#和MONO來與本地文件系統(例如ext2,ext3)進行通信。基本操作是打開文件,從文件寫入/讀取並關閉/刪除文件。爲此,目前我使用C#本地API(如File.Open)來操作文件。關於使用C#與Hadoop FileSystem對話的問題

我的問題是:如果我在Linux機器上安裝Hadoop文件系統。然後 我需要對現有函數進行哪些更改,以便它們與hadoop文件系統進行通信以對文件執行基本操作。由於Hadoop基礎架構基於Java,所以任何C#(使用Linux上的MONO)應用程序都將使用Hadoop進行基本操作。 C#中的基本API是否可以在文件上運行(比如File.Open或File.Copy)也可以與Hadoop文件系統一起使用?

我在想這樣的事情:因爲Hadoop公開C API用於文件操作。因此,編寫一個C封裝器並從中製作一個DLL。然後在C#代碼中使用該DLL與Hadoop FileSystems進行通信。

這看起來合適嗎?或 有人可以請建議一些文件或步驟,以便我的C#程序可以從Hadoop FileSystems打開/讀取/寫入文件。

謝謝, Anil。

回答

1

Hadoop支持通過保險絲安裝HDFS:http://wiki.apache.org/hadoop/MountableHDFS這可能比包裝本地C庫更簡單,儘管這種方法也可以。

+0

這將是巨大的,如果它是唯一紐帶。但是迴應也有一個建議,爲什麼所提到的方法是正確的方法。 – 2016-04-18 20:39:02

1

您還可以使用Thrift接口訪問HDFS以獲取C#客戶端。有關更多信息,請參見http://wiki.apache.org/hadoop/HDFS-APIs

但是,我推薦使用FUSE路由,因爲正在進行重要的工作來改進該接口並允許在本地客戶端上使用HDFS。

最後,我們在內部使用了一個WebDAV interface來訪問Windows機器上的HDFS文件。以下是內部維客頁面:

如何配置CDH2 + WebDav。

  1. 克隆的HDFS-過WebDAV知識庫

    1. git clone git://github.com/huyphan/HDFS-over-Webdav.git 
    2. Set HDFS_WEBDAV_SRC_DIR to the path you cloned it to 
    
  2. 編輯的conf/hadoop-webdav.sh

    出口HADOOP_WEBDAV_HOST = xxx.xxx.xxx.xx#外部可NN主機/ IP 出口HADOOP_WEBDAV_PORT = 9001#選擇一個端口 出口HADOOP_WEBDAV_HDFS = HDFS://本地主機:9000 /#fs.default.name 出口HADOOP_WEBDAV_CLASSPATH = $ HDFS_WEBDAV_SRC_DIR/lib目錄#見上文

  3. 編譯/安裝

    出口HADOOP_HOME = XXX CD HDFS-過webdav的 螞蟻-Dhadoop.dir = $ HADOOP_HOME CP斌/ * $ HADOOP_HOME/bin中 CP的conf/* $ HADOOP_HOME/conf目錄

  4. 開始WebDAV服務器

    CD $ HADOOP_HOME ./bin/start-webdav。在$ HADOOP_HOME /日誌SH #日誌

  5. 訪問

    1. Can use [email protected] authority syntax below if you have HDFS permissions setup 
    2. XP: Add network place http://$HADOOP_WEBDAV_HOST:$HADOOP_WEBDAV_PORT/ under "My Network Places" 
    3. Vista/Win7: "Map Netowork Drive" using the above ID 
    4. Linux CLI: cadaver $HADOOP_WEBDAV_HOST:$HADOOP_WEBDAV_PORT 
    5. Linux Nautilus: Go -> Location, use above ID 
    

問候,

傑夫