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

时间:2012-06-30 00:33:44

标签: unix ssh hadoop copying piping

我正在编写一个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本地磁盘上文件的本地副本。

感谢

换句话说,我想以一种我可以

的方式管理几个命令

4 个答案:

答案 0 :(得分:38)

试试这个(未经测试):

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

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

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

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

答案 1 :(得分:10)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

(未测试的)

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