Python 如何从代码在HDInsight集群上运行命令? 问题描述

Python 如何从代码在HDInsight集群上运行命令? 问题描述,python,azure,putty,azure-hdinsight,Python,Azure,Putty,Azure Hdinsight,我有一个使用Putty和CAPI证书连接的HDInsight cluster实例。一旦我尝试连接,它会要求我输入一个特殊PIN码(分配给连接过程中需要插入的卡),我需要手动输入,然后才能登录,执行命令等。但问题是,我希望能够从本地计算机的代码中在HDInsight cluster上运行命令 问题: 是否有一个Python库可以让我从代码中执行它? 基本上,我希望执行以下场景(用伪代码编写): 登录到HDInsight群集 执行,即“ls/path/to/directory” 在我的本地计算机上的

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

问题: 是否有一个Python库可以让我从代码中执行它? 基本上,我希望执行以下场景(用伪代码编写):

  • 登录到HDInsight群集
  • 执行,即“ls/path/to/directory”
  • 在我的本地计算机上的控制台中查看上面的命令输出

  • 非常感谢您的建议

    下面是一个最简单的工作示例,我可以通过python将SSH连接到集群中,并运行一些简单的unix和beeline命令。我使用了Python2.7,但它也应该可以在3.x中使用(只需在打印上加上括号;)

    让我知道这是否是你要找的!

    导入子流程
    导入操作系统
    导入时间
    clusterConnection=“sshpass-e ssh@-ssh.azurehdinsight.net”
    env=os.environ.copy()
    环境['SSHPASS']='
    sshProc=subprocess.Popen(clusterConnection.split(),stdin=subprocess.PIPE,stdout=subprocess.PIPE,env=env)
    时间。睡眠(3)
    sshProc.stdin.write(“ls/\n”)
    sshProc.stdin.write(“echo'Hello!'\n”)
    write(“beeline-u'jdbc:hive2://localhost:10001/;transportMode=http'-e'show tables'>test.txt”)
    sshProc.stdin.write(“cat test.txt\n”)
    sshProc.stdin.close()
    对于sshProc.stdout中的行:
    打印行
    
    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