由于磁盘空间不足,Hadoop fs getmerge到远程服务器/机器

时间:2014-12-23 20:27:34

标签: hadoop ssh pipe hdfs remote-access

我和其他帖子有同样的问题: hadoop getmerge to another machine 但答案对我不起作用

总结我想要做的事情:从hadoop集群中获取合并(或获取文件),而不是复制到本地计算机(由于磁盘空间不足或没有磁盘空间),而是直接将它们传输到远程计算机。我在远程机器授权密钥列表中有我的公钥,因此不需要密码验证。

我在本地计算机上的常用命令是(将文件合并并将文件作为gzip文件放到本地服务器/计算机上):

hadoop fs -getmerge folderName.on.cluster merged.files.in.that.folder.gz

我在另一篇文章中尝试过:

hadoop fs -cat folderName.on.cluster/* | ssh user@remotehost.com:/storage | "cat > mergedoutput.txt"

这对我不起作用..我遇到了这些错误..

Pseudo-terminal will not be allocated because stdin is not a terminal. ssh: Could not resolve hostname user@remotehost.com:/storage /: Name or service not known

我试着用另一种方式 ssh user@remotehost.com:/storage "hadoop fs -cat folderName.on.cluster/*" | cat > mergedoutput.txt 然后:

-bash: cat > mergedoutput.txt: command not found
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: syntax error near unexpected token `('

感谢任何帮助。我也不需要-getmerge,我也可以-get,然后只需将文件合并到远程机器上即可。另一种方法是,如果有一种方法可以在远程服务器上运行命令,直接从hadoop集群服务器复制文件。

由于

想出来 hadoop fs -cat folderName.on.cluster/* | ssh user@remotehost.com "cd storage; cat > mergedoutput.txt"

这对我有用。感谢@vefthym的帮助。

这会将hadoop集群目录中的文件合并到远程主机,而不会将其复制到本地主机YAY(它已经非常完整)。在复制文件之前,我需要更改到我需要文件的另一个目录,因此cd storage;之前的cat merged output.gz

2 个答案:

答案 0 :(得分:1)

我很高兴您发现我的问题很有用!

我认为你的问题只是在ssh中,而不是在你描述的解决方案中。它对我来说很完美。顺便说一句,在第一个命令中,你有一个额外的'|'字符。如果只输入ssh user@remotehost.com,你会得到什么?你输入名字或IP吗?如果键入名称,则该名称应存在于/etc/hosts文件中。

根据this post,我猜您使用的是cygwin并且有一些配置错误。除了the accepted solution之外,请检查您是否安装了openssh cygwin软件包,如the second best answer所示。

答案 1 :(得分:1)

hadoop fs -cat folderName.on.cluster/* | ssh user@remotehost.com "cd storage; cat > mergedoutput.txt"

这对我有用。感谢@vefthym的帮助。

这会将hadoop集群目录中的文件合并到远程主机,而不会将其复制到本地主机YAY(它已经非常完整)。在复制文件之前,我需要更改到我需要文件的另一个目录,因此cd storage;之前的cat merged output.gz