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

问题描述 投票:34回答:4

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

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

scp test.txt username@masternode:/folderName/

我已经使用密钥设置了SSH连接。因此不需要密码。

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

ssh username@masternode "hadoop dfs -put /folderName/test.txt hadoopFolderName/"

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

谢谢

换句话说,我想以一种可以的方式传送多个命令

unix ssh hadoop copying piping
4个回答
41
投票

尝试一下(未试用):

cat test.txt | ssh username@masternode "hadoop dfs -put - hadoopFoldername/test.txt"

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

tar cf - . | ssh remote "(cd /destination && tar xvf -)"

这会将本地tar的输出发送到远程tar的输入。


10
投票

您在其上生成数据的节点可以到达您的每个群集节点(名称节点和所有数据节点)。

如果您具有数据连接性,那么您只需在生成数据的计算机上执行hadoop fs -put命令(假设您也安装了hadoop二进制文件):

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/

2
投票

Hadoop提供了两个REST接口。检查HoopWebHDFS。您应该能够复制文件,而无需从非Hadoop环境使用文件将文件复制到主服务器。


0
投票

(未测试)

由于创建数据的节点可以访问Internet,所以也许您可以安装hadoop客户端节点软件,然后将其添加到群集中-正常hadoop fs -put之后,然后断开连接并删除您的临时节点-hadoop系统然后应自动在hadoop群集中复制文件块]

© www.soinside.com 2019 - 2024. All rights reserved.