通过ssh隧道将文件传入/传出HDFS

时间:2016-04-06 14:02:51

标签: hadoop ssh ssh-tunnel

有点复杂的设置:

我有以下结构

localhost --> bastion_host -> server -> hadoop_cluster

现在我可以创建一个ssh隧道,允许我从localhostserver复制文件。进入服务器后,我总是可以使用hadoop fs -put/get来传输群集中的文件。但除了server

之外的其他任何地方都看不到群集

有没有办法使用现有隧道将文件复制进出群集?

我的印象是我可以使用"

ssh -p 2345 localhost "hadoop fs -put -/user/eron/test_file3" < testing_scp.txt

其中2345是隧道的本地端口,testing_scp.txt是本地文件。

然而,我得到了

  

&#34; sh:hadoop:找不到命令&#34;

因此命令不会在server

上执行

3 个答案:

答案 0 :(得分:3)

当您使用ssh服务器时,通过执行.bashrc,.profile等来更新$ PATH。当您使用隧道时,/ usr / local / hadoop / bin未添加到您的$ PATH

它应该可以指定hadoop二进制路径:

ssh -p 2345 localhost "/usr/local/hadoop/bin/hadoop fs -put -/user/eron/test_file3" < testing_scp.txt

答案 1 :(得分:1)

ssh -p 2345 localhost "hadoop fs -put -/user/eron/test_file3" < testing_scp.txt

在使用之前使用hypen

答案 2 :(得分:1)

显然很晚了,但是由于我正在寻找相同的东西(尤其是提取内容),所以想为自己的未来记录下来:

其他将文件放入的答案可以通过

完成
ssh -p 2345 localhost \
   "/usr/local/hadoop/bin/hadoop fs -put - /user/eron/test_file3" \
   < testing_scp.txt

或者:

cat testing_scp.txt  | \ 
  ssh -p 2345 localhost "/usr/local/hadoop/bin/hadoop fs -put - /user/eron/test_file3

得到它几乎是相同的:

ssh -p 2345 localhost \
   "/usr/local/hadoop/bin/hadoop fs -cat /user/eron/test_file3" \
   > local_file.txt