Как запускать команды в кластере HDInsight из кода?

Описание проблемы

У меня есть экземпляр кластера HDInsight, к которому я подключаюсь с помощью Putty и сертификата CAPI. Когда я пытаюсь подключиться, он запрашивает специальный PIN-код (назначенный карте, которую необходимо подключить во время подключения), которую мне нужно ввести вручную, после чего я могу войти в систему. , выполнять команды и т. д. Но проблема в том, что я хотел бы иметь возможность запускать команды в кластере HDInsight из кода с моей локальной машины.

Вопрос

Есть ли библиотека для Python, которая позволяет мне делать это из кода? В основном я хотел бы выполнить следующий сценарий (написанный в псевдокоде):

  1. вход в кластер HDInsight
  2. выполнить, т. е. "ls /path/to/directory"
  3. посмотрите вывод команды выше в консоли на моей локальной машине

Заранее большое спасибо за любые предложения!


person JMK    schedule 20.08.2018    source источник


Ответы (1)


Вот минимальный рабочий пример, который я собрал, где я могу подключиться по SSH к своему кластеру через python и запустить несколько простых команд 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
person Taylor Cox    schedule 02.10.2018