关于使用C#与Hadoop FileSystem对话的问题

时间:2010-01-10 16:56:45

标签: c# mono hadoop

目前,我的应用程序在Linux上使用C#和MONO与本地文件系统(例如ext2,ext3)进行通信。基本操作是打开文件,从文件写入/读取并关闭/删除文件。为此,目前我使用C#本机API(如File.Open)对文件进行操作。

我的问题是:如果我在我的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打开/读取/写入文件。

感谢, 阿尼尔。

2 个答案:

答案 0 :(得分:1)

Hadoop支持通过fuse添加HDFS:http://wiki.apache.org/hadoop/MountableHDFS这可能是一个比包装本机C库更简单的解决方案,尽管这种方法也可以。

答案 1 :(得分:1)

您还可以使用Thrift接口到HDFS来获取C#客户端。有关详细信息,请参阅http://wiki.apache.org/hadoop/HDFS-APIs

我建议使用FUSE路由,因为正在进行大量工作来改进该接口并允许将HDFS与本机客户端一起使用。

最后,我们在内部使用WebDAV interface来访问Windows机器上的HDFS文件。这是内部维基页面:

如何配置CDH2 + WebDav。

  1. 克隆HDFS-over-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

    export HADOOP_WEBDAV_HOST = xxx.xxx.xxx.xx#外部可访问的NN主机/ IP export HADOOP_WEBDAV_PORT = 9001#选择一个端口 export HADOOP_WEBDAV_HDFS = hdfs:// localhost:9000 / #fs.default.name export HADOOP_WEBDAV_CLASSPATH = $ HDFS_WEBDAV_SRC_DIR / lib#见上文

  3. 构建/安装

    导出HADOOP_HOME = XXX cd HDFS-over-Webdav ant -Dhadoop.dir = $ HADOOP_HOME cp bin / * $ HADOOP_HOME / bin cp conf / * $ HADOOP_HOME / conf

  4. 启动WebDav服务器

    cd $ HADOOP_HOME   ./bin/start-webdav.sh   #logs $ HADOOP_HOME / logs

  5. 访问

     1. Can use user@ 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
    
  6. 此致

    杰夫