基本上,我想要的是使用 Hadoop Java API 从本地调用到远程 Hadoop 集群。我希望 Hadoop 集群执行
它应该大致相当于“ssh user@remote 'hadoop fs -text .'”
基本上,我想要的是使用 Hadoop Java API 从本地调用到远程 Hadoop 集群。我希望 Hadoop 集群执行
它应该大致相当于“ssh user@remote 'hadoop fs -text .'”
首先,如果您想要的正是您所需要的hadoop fs -text
,那么您当然可以在本地机器上安装 hadoop 客户端,并在那里运行它,确保指定完整路径:
hadoop fs -text hdfs://remote.namenode.host:9000/my/file
但是,如果您确实有理由从 java 中执行此操作,则基本答案是这样的:
Configuration conf = new Configuration();
Path p = new Path("hdfs://remote.namenode.host:9000/foo/bar");
FileSystem fs = p.getFileSystem(conf);
InputStream in = fs.open(p);
然后,您可以随心所欲地从该输入流中读取:将其复制到标准输出或其他任何内容。
请注意,这fs -text
比原始复制要聪明一点。它检测压缩文件和序列文件并将它们“解码”为文本。这很棘手;您可以查看源代码以了解它是如何在内部完成的。