目前,我的应用程序在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打开/读取/写入文件。
感谢, 阿尼尔。
答案 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。
克隆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
编辑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#见上文
构建/安装
导出HADOOP_HOME = XXX cd HDFS-over-Webdav ant -Dhadoop.dir = $ HADOOP_HOME cp bin / * $ HADOOP_HOME / bin cp conf / * $ HADOOP_HOME / conf
启动WebDav服务器
cd $ HADOOP_HOME ./bin/start-webdav.sh #logs $ HADOOP_HOME / logs
访问
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
此致
杰夫