3

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

我的问题是:如果我在我的 Linux 机器上安装 Hadoop 文件系统。然后我需要对我现有的函数做些什么改变,以便它们与 hadoop 文件系统通信以对文件执行基本操作。由于 Hadoop 基础架构基于 Java,任何 C#(在 linux 上使用 MONO)应用程序将如何使用 Hadoop 进行基本操作。C# 中用于操作文件的基本 API(likr File.Open 或 File.Copy)是否也适用于 Hadoop 文件系统?

我在想这样的事情:因为 Hadoop 公开了用于文件操作的 C API。因此,编写一个 C 包装器并用它制作一个 DLL。然后在 C# 代码中使用此 DLL 与 Hadoop FileSystems 进行通信。

这看起来对吗?或者有人可以建议一些文档或步骤,以便我的 c# 程序可以从 Hadoop FileSystems 打开/读取/写入文件。

谢谢,阿尼尔。

4

2 回答 2

1

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

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

最后,我们在内部使用了一个WebDAV 接口,用于从 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. 构建/安装

    export 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 # 登录 $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
    

问候,

杰夫

于 2010-01-11T06:14:53.320 回答
1

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

于 2010-01-10T21:52:42.997 回答