我需要从外部源(如windows box )将数据写入Hadoop (HDFS)。现在,我一直在将数据复制到namenode,并使用HDFS的put命令将其摄取到集群中。在我浏览代码时,我没有看到这样做的API。我希望有人能告诉我,我错了,有一种简单的方法可以针对HDFS编写外部客户端代码。
发布于 2009-10-07 18:27:57
安装Cygwin,在本地安装Hadoop (您只需要指向NN的二进制文件和配置--不需要实际运行服务),运行hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/
你也可以使用新的Cloudera桌面通过web UI上传文件,尽管对于大文件来说这可能不是一个好的选择。
还有一个用于HDFS的WebDAV覆盖,但我不知道它有多稳定/可靠。
发布于 2009-10-27 18:17:19
Java中有一个API。您可以通过在项目中包含Hadoop代码来使用它。一般而言,JavaDoc非常有用,但当然,您必须知道您要查找的*g * http://hadoop.apache.org/common/docs/是什么
对于您的特定问题,可以查看:http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileSystem.html (这适用于最新版本,有关不同版本,请参考其他JavaDocs!)
一个典型的调用是:Filesystem.get(new JobConf()).create(new Path("however.file"));,它返回一个可以用常规JavaIO处理的流。
发布于 2012-01-22 20:47:38
在我上一次回答大约2年后,现在有了两个新的替代方案- Hoop/HttpFS和WebHDFS。
关于Hoop,它最初是在Cloudera's blog中宣布的,可以从github repository下载。我已经设法让这个版本至少成功地与Hadoop 0.20.1进行了通信,它可能也可以与稍微老一点的版本通信。
如果你运行的是Hadoop0.23.1,在写这篇文章的时候还没有发布,那么Hoop是Hadoop的一部分,作为它自己的组件,HttpFS。这项工作是作为HDFS-2178的一部分完成的。Hoop/HttpFS不仅可以是HDFS的代理,也可以是其他Hadoop兼容文件系统的代理,比如亚马逊S3。
Hoop/HttpFS作为自己的独立服务运行。
还有WebHDFS,它作为NameNode和DataNode服务的一部分运行。它还提供了REST API,如果我理解正确的话,它与HttpFS API兼容。WebHDFS是Hadoop1.0的一部分,它的主要特性之一是提供数据局部性-当您发出读请求时,您将被重定向到数据所在的datanode上的WebHDFS组件。
选择哪个组件有点取决于您当前的设置和您的需求。如果您现在需要一个到HDFS的HTTP REST接口,并且您正在运行一个不包含WebHDFS的版本,那么从github存储库开始使用Hoop似乎是最简单的选择。如果您运行的是包含WebHDFS的版本,除非您需要WebHDFS缺少的一些Hoop特性(访问其他文件系统、带宽限制等),否则我会这么做。
https://stackoverflow.com/questions/1533330
复制相似问题