从外面的hadoop访问hdfs

时间:2012-01-27 20:09:39

标签: hadoop mapreduce hdfs

我想使用存储在HDFS中的输入文件在hadoop之外运行一些可执行文件(但在同一个集群上)。

是否需要将这些文件本地复制到节点?或者有没有办法在hadoop之外访问HDFS?

关于如何做到这一点的任何其他建议都没问题。不幸的是,我的可执行文件无法在hadoop中运行。

谢谢!

4 个答案:

答案 0 :(得分:5)

有几种典型的方式:

  • 如果您使用Java编写程序,则可以通过HDFS Java API访问HDFS文件。您可能正在寻找open。这将为您提供一个像通用打开文件一样的流。
  • 如果您的程序通过stdin:hadoop fs -cat /path/to/file/part-r-* | myprogram.pl输入,则可以使用hadoop cat流式传输数据。您可以假设使用此命令行命令创建一个桥,例如popen。

答案 1 :(得分:3)

同时检查WebHDFS哪个made进入1.0.0版本,并且也将在23.1版本中。由于它基于rest API,因此任何语言都可以访问它,并且Hadoop也不需要安装在需要HDFS文件的节点上。也。它与orangeoctopus提到的其他选项一样快。

答案 2 :(得分:0)

最好的方法是在运行代码的框中安装“hadoop-0.20-native”软件包。 hadoop-0.20-native软件包可以访问hdfs文件系统。它可以充当hdfs代理。

答案 3 :(得分:0)

我有类似的问题,并提出了适当的问题。我需要访问集群外的HDFS / MapReduce服务。找到解决方案后我posted answer here for HDFS。最痛苦的问题恰好是用户身份验证,在我的情况下,在最简单的情况下解决了(完整的代码在我的问题中)。

如果您需要最小化依赖关系并且不想在客户端here is nice Cloudera article上安装hadoop,那么如何配置Maven为此构建JAR。我的案子100%成功。

与HDFS访问相比,远程MapReduce作业发布的主要区别只有一个配置设置(检查mapred.job.tracker变量)。