首页 > 解决方案 > 如何通过代码在 HDInsight 群集上运行命令?

问题描述

问题描述

我有一个HDInsight 群集实例,我使用Putty 和 CAPI Certificate与之连接。一旦我尝试连接,它会要求我输入一个特殊的 PIN 码(分配给需要在连接期间插入的卡),我需要手动输入该 PIN 码,然后我才能登录、执行命令等。但是问题是我希望有可能从我的本地机器上的代码在 HDInsight 群集上运行命令

问题

是否有一个 Python 库可以让我从代码中做到这一点?基本上我想执行以下场景(用伪代码编写):

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

非常感谢您的任何建议!

标签: pythonazureputtyazure-hdinsight

解决方案


这是我放在一起的一个最小工作示例,我可以通过 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

推荐阅读