将远程文件放入hadoop而不将其复制到本地磁盘

rez*_*eza 34 unix ssh hadoop copying piping

我正在编写一个shell脚本,一旦生成数据就将数据放入hadoop.我可以ssh到我的主节点,将文件复制到那里的文件夹,然后将它们放入hadoop.我正在寻找一个shell命令来摆脱将文件复制到主节点上的本地磁盘.为了更好地解释我需要什么,在下面你可以找到我到目前为止所拥有的:

1)将文件复制到主节点的本地磁盘:

scp test.txt username@masternode:/folderName/
Run Code Online (Sandbox Code Playgroud)

我已经使用密钥设置了SSH连接.因此,不需要密码来执行此操作.

2)我可以使用ssh远程执行hadoop put命令:

ssh username@masternode "hadoop dfs -put /folderName/test.txt hadoopFolderName/"
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是如何将这两个步骤组合成一个并跳过masterNode本地磁盘上的文件的本地副本.

谢谢

换句话说,我想以我能够的方式管理几个命令

sar*_*old 39

试试这个(未经测试):

cat test.txt | ssh username@masternode "hadoop dfs -put - hadoopFoldername/"
Run Code Online (Sandbox Code Playgroud)

我使用类似的技巧来复制目录:

tar cf - . | ssh remote "(cd /destination && tar xvf -)"
Run Code Online (Sandbox Code Playgroud)

这将local-的输出发送tar到remote-的输入tar.

  • 哦,太好了.使用 - 而不是/ dev/stdin解决了这个问题.所以我使用以下代码,它工作正常:cat test.txt | ssh username @ masternode"hadoop dfs -put - hadoopFolderName/test.txt" (3认同)
  • 二进制无所谓 - "ssh"不会破坏8位内容.试试`-`代替`/ dev/stdin`? (2认同)
  • 具体说明.将单个文件复制到主节点的本地驱动器,然后使用ssh remote将其放入hadoop比管道更快 ssh遥控器. (2认同)
  • 这个解决方案几乎不需要修改,只需在 hdfs 路径中添加文件名:cat test.txt | ssh 用户名@masternode“hdfs dfs -put - hadoopFoldername/test.txt” (2认同)

Chr*_*ite 10

您生成数据的节点,它能够到达每个群集节点(名称节点和所有数据节点).

如果你有数据连接,那么你可以从生成数据的机器上执行hadoop fs -put命令(假设你也安装了hadoop二进制文件):

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/
Run Code Online (Sandbox Code Playgroud)