Unix 将远程文件放入hadoop而不将其复制到本地磁盘
我正在编写一个shell脚本,以便在生成数据后立即将其放入hadoop中。我可以使用ssh连接到主节点,将文件复制到那边的文件夹中,然后将它们放入hadoop中。我正在寻找一个shell命令,以避免将文件复制到主节点上的本地磁盘。为了更好地解释我需要什么,您可以在下面找到我目前拥有的: 1) 将文件复制到主节点的本地磁盘:Unix 将远程文件放入hadoop而不将其复制到本地磁盘,unix,ssh,hadoop,copying,piping,Unix,Ssh,Hadoop,Copying,Piping,我正在编写一个shell脚本,以便在生成数据后立即将其放入hadoop中。我可以使用ssh连接到主节点,将文件复制到那边的文件夹中,然后将它们放入hadoop中。我正在寻找一个shell命令,以避免将文件复制到主节点上的本地磁盘。为了更好地解释我需要什么,您可以在下面找到我目前拥有的: 1) 将文件复制到主节点的本地磁盘: scp test.txt username@masternode:/folderName/ 我已经使用密钥设置了SSH连接。因此,无需密码即可完成此操作 2) 我可以使用s
scp test.txt username@masternode:/folderName/
我已经使用密钥设置了SSH连接。因此,无需密码即可完成此操作
2) 我可以使用ssh远程执行hadoop put命令:
ssh username@masternode "hadoop dfs -put /folderName/test.txt hadoopFolderName/"
我要寻找的是如何将这两个步骤合并为一个步骤,并跳过masterNode本地磁盘上文件的本地副本
谢谢
换句话说,我想以一种我可以尝试的方式(未经测试)传输多个命令:
我使用了类似的技巧来复制周围的目录:
tar cf - . | ssh remote "(cd /destination && tar xvf -)"
这将本地-
tar
的输出发送到远程-tar
的输入中,Hadoop提供了两个REST接口。检查并确认。您应该能够使用非Hadoop环境将文件复制到主节点,而无需将其复制到主节点。您在其中生成数据的节点是否能够到达您的每个群集节点(名称节点和所有数据节点)
如果您确实具有数据连接,那么您可以从生成数据的机器上执行hadoop fs-put命令(假设您也安装了hadoop二进制文件):
(未经测试)
由于您创建数据的节点可以访问internet,那么也许您可以安装hadoop客户端节点软件,然后将其添加到集群-在正常的hadoop fs-put之后,然后断开连接并移除临时节点-然后hadoop系统会自动复制hadoop集群中的文件块二进制文件无关紧要--
ssh
不会损坏8位内容。试着用-
代替/dev/stdin
?用-
代替/dev/stdin
怎么样?太好了。使用-而不是/dev/stdin解决了这个问题。因此,我使用了以下代码,并且工作正常:cat test.txt | sshusername@masternode“hadoop dfs-put-hadoopFolderName/test.txt”是特定的put。将单个文件复制到主节点的本地驱动器,然后使用ssh remote将其放入hadoop比管道化cat | ssh remote更快。此解决方案只需稍加修改即可工作,只需在hdfs路径中添加文件名:cat test.txt | sshusername@masternode“hdfs dfs-put-hadoopFoldername/test.txt”很不幸,我在其上创建数据的节点无法直接访问hoop群集。您知道需要的最小hadoop安装是什么吗?管道问题已经解决。但是,管道的性能要比先将文件复制到主节点的本地磁盘,然后再将其复制到Hadoop慢得多。有什么想法吗?这应该行得通:
tar cf - . | ssh remote "(cd /destination && tar xvf -)"
#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/