代码之家  ›  专栏  ›  技术社区  ›  Steve Severance

正在将数据写入Hadoop

  •  18
  • Steve Severance  · 技术社区  · 16 年前

    我需要从外部资源(如Windows设备)将数据写入Hadoop(HDF)。现在,我已经将数据复制到了namenode上,并使用hdfs的put命令将数据摄取到集群中。在我浏览代码时,我没有看到这样做的API。我希望有人能告诉我我错了,有一种简单的方法可以针对HDF对外部客户机进行编码。

    8 回复  |  直到 9 年前
        1
  •  11
  •   SquareCog    16 年前

    安装cygwin,在本地安装hadoop(您只需要指向nn的二进制文件和配置——不需要实际运行服务),运行 hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

    您也可以使用新的Cloudera桌面通过Web UI上载文件,尽管这对于大型文件来说可能不是一个好的选择。

    HDF也有一个WebDAV覆盖,但我不知道它有多稳定/可靠。

        2
  •  17
  •   Peter Wippermann    10 年前

    在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处理的流。

        3
  •  13
  •   Erik Forsberg    16 年前

    对于加载我需要放入HDFS的数据的问题,我选择扭转这个问题。

    而不是从他们驻留的服务器上传文件到HDFs,我编写了一个JavaMap /Ready作业,其中映射器从文件服务器(在这种情况下通过HTTPS)读取文件,然后直接写入HDFS(通过 Java API )

    从输入中读取文件列表。然后,我有一个外部脚本,它用要获取的文件列表填充一个文件,将该文件上载到HDFS(使用 Hadoop DFS-放置 ,然后使用相当数量的映射器启动映射/减少作业。

    这给了我极好的传输性能,因为多个文件是同时读/写的。

    也许不是你要找的答案,但无论如何希望能有所帮助。

        4
  •  12
  •   Erik Forsberg    14 年前

    在我最后一次回答大约2年后,现在有了两个新的替代方案——Hoop/httpfs和WebHDfs。

    关于篮球,它是在年首次宣布的。 Cloudera's blog 可以从 github repository . 我已经设法让这个版本成功地与Hadoop0.20.1对话,它也可能与稍旧的版本对话。

    如果您运行的是Hadoop0.23.1,在编写时它仍然没有被释放,那么Hoop是Hadoop的一部分,而不是它自己的组件httpfs。这项工作是作为 HDFS-2178 . Hoop/httpfs不仅可以代理HDF,还可以代理其他与Hadoop兼容的文件系统,如AmazonS3。

    Hoop/httpfs作为自己的独立服务运行。

    还有 WebHDFS 它作为namenode和datanode服务的一部分运行。它还提供了一个RESTAPI,如果我理解正确,它与httpfs API兼容。WebHDFS是Hadoop1.0的一部分,它的主要功能之一是提供数据位置—当您发出读取请求时,您将被重定向到数据所在的数据节点上的WebHDFS组件。

    要选择哪个组件取决于您当前的设置以及您需要什么。如果您现在需要一个到HDFS的HTTP REST接口,并且您运行的版本不包括WebHDFS,那么从Github存储库的Hoop开始似乎是最简单的选择。如果您运行的是包含WebHDFS的版本,除非您需要WebHDFS所缺少的一些特性(对其他文件系统的访问、带宽限制等),否则我会这样做。

        5
  •  3
  •   Eran Medan    13 年前

    现在似乎有一个专门的页面 http://wiki.apache.org/hadoop/MountableHDFS 以下内容:

    这些项目(下面列举)允许安装HDF(在大多数 作为使用mount命令的标准文件系统。 安装后,用户可以使用 标准Unix实用程序,如“ls”、“cd”、“cp”、“mkdir”、“find”, “grep”,或使用标准的posix库,如open、write、read、close 从C、C++、Python、Ruby、Perl、Java、BASH等。

    稍后它将描述这些项目

    • contrib/fuse-dfs构建在fuse、一些c glue、libhdfs和hadoop-dev.jar上。
    • FuSE J-HDFS是建立在FASE、Fieldfor Java和HADOOPDEV.JAR的基础上的。
    • hdfs fuse-谷歌代码项目与contrib/fuse-dfs非常相似。
    • webdav-作为webdav资源映射公开的hdfs-包含一个支持读/写的、与hdfs兼容的封闭源文件系统 NFS访问
    • hdfs-nfs-proxy-将hdfs导出为nfs,而不使用fuse。支持kerberos和reorder写入,以便写入hdfs 按顺序。

    我没有试过这些,但我会尽快更新答案,因为我和OP有同样的需求

        6
  •  0
  •   Josh Davis    13 年前

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

        7
  •  0
  •   Anay T    11 年前

    您可以尝试在正在执行代码的计算机上安装HDF(称为machine_x),而machine_x应该具有与HDF的Infiniband连接,请检查这一点, https://wiki.apache.org/hadoop/MountableHDFS

        8
  •  0
  •   zuko    9 年前

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

    推荐文章