我需要将数据从 Windows 盒子等外部源写入 Hadoop (HDFS)。现在,我一直在将数据复制到名称节点上,并使用 HDFS 的 put 命令将其摄取到集群中。在浏览代码时,我没有看到执行此操作的 API。我希望有人能告诉我我错了,有一种简单的方法可以针对 HDFS 编写外部客户端代码。

有帮助吗?

解决方案

安装cygwin,安装Hadoop的本地(你只需要指向你NN的二进制和CONFIGS - 无需实际运行的服务),运行hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

您也可以使用新的Cloudera的桌面上传通过网络用户界面文件,尽管这可能不是巨大的文件,一个不错的选择。

还有对HDFS一个WebDAV覆盖,但我不知道这是如何稳定/可靠。

其他提示

有在Java中的API。你可以通过在你的项目Hadoop的代码中使用它。 的Javadoc一般相当有帮助,当然,你要知道,你在找什么* G * http://hadoop.apache.org/common/docs/

有关您的具体问题,来看看: HTTP://hadoop.apache。组织/普通/文档/电流/ API /组织/阿帕奇/ hadoop的/ FS / FileSystem.html (这适用于最新版本,参考其他JavaDoc中不同的版本!)

一个典型呼叫将是: Filesystem.get(new JobConf()).create(new Path("however.file")); 它返回你流,你可以定期JavaIO处理。

有关加载我需要投入HDFS数据的问题,我选择角度来看这个问题。

而不是从他们居住的服务器上的文件上传到HDFS的,我写了一个Java的Map / Reduce任务,其中映射器读取文件服务器的文件(通过HTTPS这种情况下),然后将其直接写入HDFS(通过的Java API

文件的列表是从输入读出。然后我有填充与文件获取的列表中的文件外部脚本,将文件上传到HDFS(使用的 Hadoop的DFS -put 的),然后启动地图/减少工作与体面的数映射器。

这使我优异的转印性能,因为多文件被读出/在同一时间写入。

也许不是你要找的答案,但希望有帮助无论如何: - )

关于我最后的答案2年后,现在有两个新的替代品 - 箍/ HttpFS和WebHDFS。

关于圈,这是第一次在 Cloudera的公布博客并可以从的github仓库下载。我设法让这个版本顺利交谈至少Hadoop的0.20.1,它可能可以跟年龄稍大的版本。

如果你正在运行的Hadoop 0.23.1在撰写仍然没有被释放的时候,抱箍替代的Hadoop的一部分作为自己的组成部分,HttpFS。这项工作做的 HDFS-2178 的一部分。箍/ HttpFS可以是代理不仅HDFS,也对其他的Hadoop兼容的文件系统如Amazon S3。

箍/ HttpFS运行作为它自己的独立的服务。

还有 WebHDFS 其运行作为NameNode和DataNode会服务的一部分。它还提供了一个REST API,如果我理解正确,与HttpFS API兼容。 WebHDFS是Hadoop的1.0和它的主要特征之一的部分是,它提供了数据局部性 - 。当你正在做一个读请求时,你将被重定向到对数据所在的数据节点的WebHDFS成分

哪个组件的选择取决于你的当前设置了一下,有什么需要你。如果您现在需要一个HTTP REST接口HDFS和你正在运行的版本不包括WebHDFS,与圈开始从GitHub的仓库看起来最简单的选择。如果您运行的版本,其中包括WebHDFS,除非你需要的一些功能圈有WebHDFS没有我会去那(访问其他文件系统,带宽限制等。)

似乎现在有一个专门的页面,位于 http://wiki.apache.org/hadoop/MountableHDFS:

这些项目(下面列举)允许挂载 HDFS(在大多数 Unix 的风格)作为使用 mount 命令的标准文件系统。挂载后,用户可以使用 标准的 Unix 实用程序,例如 'ls', 'cd', 'cp', 'mkdir', 'find', 'grep',或使用标准的 Posix 库,如 open、write、read、close 来自 C、C++、Python、Ruby、Perl、Java、bash 等。

稍后描述这些项目

  • contrib/fuse-dfs 是基于 fusion、一些 C 胶水、libhdfs 和 hadoop-dev.jar 构建的
  • fusion-j-hdfs 构建于 fusion、fuse for java 和 hadoop-dev.jar 之上
  • hdfs-fuse - 一个谷歌代码项目与 contrib/fuse-dfs 非常相似
  • webdav - 作为 webdav 资源公开的 hdfs mapR - 包含一个支持读/写的闭源 hdfs 兼容文件系统 NFS 访问
  • HDFS NFS 代理 - 将 HDFS 导出为 NFS,无需使用熔断器。支持Kerberos并进行重新订立写作,因此它们被依次写给HDFS。

我还没有尝试过这些,但当我有与OP相同的需求时,我会尽快更新答案

您现在还可以尝试使用了Talend,其中包括组件Hadoop的集成。

你可以试试你的机器上安装HDFS(称之为machine_X),您正在执行代码,并machine_X应该与HDFS InfiniBand连接检查了这一点,的 https://wiki.apache.org/hadoop/MountableHDFS

您也可以使用HadoopDrive( http://hadoopdrive.effisoft.eu )。这是一个Windows外壳扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top