如何通过代码在HDInsight群集上运行命令?

时间:2018-08-20 12:24:18

标签: python azure putty hdinsight

问题描述

我有一个 HDInsight群集的实例,我正在使用 Putty和CAPI证书与其进行连接。一旦我尝试连接,它会要求我输入一个特殊PIN码(分配给在连接过程中需要插入的卡),我需要手动输入然后登录,执行命令等。但是问题是我希望可以从本地计算机上的代码 HDInsight群集上运行命令

问题

是否有一个Python库,使我能够从代码中完成该工作? 基本上我想执行以下方案(用伪代码编写):

  1. 登录到HDInsight群集
  2. 执行即“ ls / path / to / directory”
  3. 在本地计算机上的控制台中查看以上命令的输出

非常感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

这是我整理的一个最小工作示例,在这里我可以通过python SSH进入群集,并运行一些简单的unix和beeline命令。我使用的是Python 2.7,但它也应该在3.x中也可以(只需将括号放在打印件上;))

让我知道这是否是您想要的!

import subprocess
import os
import time

clusterConnection = "sshpass -e ssh <cluster_user>@<cluster_name>-ssh.azurehdinsight.net"

env = os.environ.copy()
env['SSHPASS'] = '<cluster_pass>'

sshProc = subprocess.Popen(clusterConnection.split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, env=env)
time.sleep(3)

sshProc.stdin.write("ls /\n")
sshProc.stdin.write("echo 'Hello!'\n")
sshProc.stdin.write("beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -e 'show tables' > test.txt\n")
sshProc.stdin.write("cat test.txt\n")
sshProc.stdin.close()

for line in sshProc.stdout:
    print line