我需要从外部源(如Windows框)将数据写入Hadoop(HDFS).现在我一直在将数据复制到namenode上,并使用HDFS的put命令将其摄取到集群中.在我浏览代码时,我没有看到用于执行此操作的API.我希望有人可以告诉我我错了,并且有一种简单的方法可以对外部客户端进行HDFS编码.
Pet*_*ann 17
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处理的流.
Eri*_*erg 12
在我上一次回答后大约2年,现在有两个新的替代品 - Hoop/HttpFS和WebHDFS.
关于Hoop,它首先在Cloudera的博客中宣布,可以从github存储库下载.我已经成功地让这个版本成功地与至少Hadoop 0.20.1进行了对话,它也可能与较旧的版本对话.
如果您正在运行Hadoop 0.23.1,在编写本文时仍未发布,则Hoop将成为Hadoop的一部分,作为其自己的组件HttpFS.这项工作是作为HDFS-2178的一部分完成的.Hoop/HttpFS不仅可以代理HDFS,还可以代理其他与Hadoop兼容的文件系统,如Amazon S3.
Hoop/HttpFS作为自己的独立服务运行.
还有WebHDFS作为NameNode和DataNode服务的一部分运行.它还提供了一个REST API,如果我理解正确,它与HttpFS API兼容.WebHDFS是Hadoop 1.0的一部分,其主要功能之一是它提供数据局部性 - 当您发出读取请求时,您将被重定向到数据所在的datanode上的WebHDFS组件.
选择哪个组件取决于您当前的设置以及您的需求.如果你现在需要一个到HDFS的HTTP REST接口而你正在运行一个不包含WebHDFS的版本,那么从github存储库开始使用Hoop似乎是最简单的选择.如果您正在运行包含WebHDFS的版本,我会继续这样做,除非您需要一些WebHDFS缺少的功能(访问其他文件系统,带宽限制等)
Squ*_*Cog 11
安装Cygwin,在本地安装Hadoop(你只需要指向NN的二进制文件和配置文件 - 无需实际运行服务),运行 hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/
您还可以使用新的Cloudera桌面通过Web UI上传文件,但这对于巨型文件来说可能不是一个好选择.
还有一个用于HDFS的WebDAV覆盖,但我不知道它是多么稳定/可靠.