我和其他帖子有同样的问题: 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
答案 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