从hadoop外部访问hdfs

从hadoop外部访问hdfs,hadoop,mapreduce,hdfs,Hadoop,Mapreduce,Hdfs,我想使用存储在HDFS中的输入文件在hadoop之外(但在同一集群上)运行一些可执行文件 是否需要将这些文件本地复制到节点?或者有没有办法在hadoop之外访问HDFS 关于如何做到这一点的任何其他建议都可以。不幸的是,我的可执行文件不能在hadoop中运行 谢谢 有两种典型的方法: 如果使用Java编写程序,则可以通过访问HDFS文件。你可能正在寻找。这将为您提供一个类似于一般打开文件的流 如果您的程序通过stdin获取输入,则可以使用hadoop cat对数据进行流式处理:hadoop f

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

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

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


谢谢

有两种典型的方法:

  • 如果使用Java编写程序,则可以通过访问HDFS文件。你可能正在寻找。这将为您提供一个类似于一般打开文件的流
  • 如果您的程序通过stdin获取输入,则可以使用hadoop cat对数据进行流式处理:
    hadoop fs-cat/path/to/file/part-r-*| myprogram.pl
    。您可以假设使用这个命令行命令创建一个桥接器,该命令行命令类似于popen
还应检查1.0.0版和23.1版中的版本。由于它基于RESTAPI,任何语言都可以访问它,而且Hadoop不需要安装在需要HDFS文件的节点上。也。它与orangeoctopus提到的其他选项一样快。

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

我也有类似的问题,并提出了相应的问题。我需要访问集群之外的HDFS/MapReduce服务。在我找到解决办法后,我开始了。最痛苦的问题是用户身份验证,在我的例子中,这个问题在最简单的情况下得到了解决(完整的代码在我的问题中)

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


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

@orangeoctopus-基于代理也很有趣,但OP是关于从同一集群内访问HDFS,因此,基于代理的HOOP是一种开销,不是必需的。好吧,我遇到了一个问题,因为该命令在开始时还输出了一些信息,并将实际文件内容弄乱了。。。。第二个解决方案并不可靠。哦,回答我上面所说的。这实际上是stderr,所以您可以将其重定向到2>/dev/null