我有和这篇文章一样的问题:hadoop getmerge到另一台机器上,但答案对我不适用
总结一下我想做的:从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条答案
按热度按时间mnemlml81#
我很高兴你发现我的问题很有用!
我认为您的问题只是ssh,而不是您描述的解决方案。它对我很有效。顺便说一下,在第一个命令中,您有一个额外的“|”字符。如果你只是打字你会得到什么
ssh user@remotehost.com
? 您键入的是名称还是ip?如果您键入一个名称,它应该存在于/etc/hosts
文件。基于这篇文章,我猜你在使用cygwin,并且有一些错误的配置。除了公认的解决方案之外,请检查是否已安装openssh cygwin包,正如第二个最佳答案所示。
6qftjkof2#
hadoop fs -cat folderName.on.cluster/* | ssh user@remotehost.com "cd storage; cat > mergedoutput.txt"
这就是我的工作。感谢@vefthym的帮助。这会将hadoop集群上目录中的文件合并到远程主机,而不将其复制到本地主机yay(已经很满了)。在复制文件之前,我需要切换到另一个目录,我需要该文件位于其中,因此
cd storage;
之前cat merged output.gz