Gestion ClientSSH

Classe pour client SSH.

Created on Sat Apr 11 06:41:28 2020

@author: Cyrile Delestre

class dstk.ssh._ssh.ClientSSH(hostname: Optional[str] = None, username: Optional[str] = None, ssh_key: Optional[str] = None, timeout: int = 30, verbose: bool = False)[source]

Bases: object

Classe de connextion SSH permettant d’envoyer, exécuter et récupérer des données sur un serveur distant (typiquement les bastions). La classe a pour optique de faciliter le lancement de scipts Pig directement d’une machine locale.

Parameters:
hostnameOptional[str]

nom du hostname du serveur distant. Si cette valeur n’est pas renseigné alors un promp pour demander le serveur souvrira dans le terminal.

usernameOptional[str]

nom de l’utilisateur pour identification. Si cette valeur n’est pas renseigné alors uin prompt pour demander l’identifiant de l’utilisateur souvrira dans le terminal.

ssh_keyOptional[str]

chemin vers la clef SSH privé. Si non reseigné un prompt s’ouvrira pour demande le mot de passe associé au username.

timeoutint

timeout des commande SSH. ATTENTION : Une commande Pig peut être long. Si pendant l’exécution le timeout est atteint et qu’il y a d’autre instruction dans le script il y aura une erreur Python. Mais la procédure Pig continura en fond sur la cellule Hadoop, sauf si le terminal avec la session Python ce ferme.

verbosebool

affiche le retour de la commande SSH.

See also

download_file

Notes

La procédure standars pour lancer un scipt Pig est :

1 : Envoyer le Pig sur un des bastions

2 : Envoyer les données nécéssaire pour l’exécution du Pig sur Bastion

3 : Envoyer les données sur HDFS

4 : Exécuter le scipt Pig

5 : Récupérer les résultat sous Bastion

6 : Les renvoyer en local

7 : Supprimer les données de Bastion

ou une alternative à l’étape 6 et 7 :

5 bis : Envoyer sur staging

6 bis : Récupérer les données directement depuis HDFS via le staging

Il existe dans la classe des procédures aggregant certaines de ces étapes.

Si aucun ssh_key n’est renseigné alors un mot de passe sera demandé. Dans un terminal bash ce mot de passe sera masqué, mais ce ne sera pas le cas dans un terminal iPython (incompatible avec le masquage des inputs).

Examples

L’exemple suiviant consiste à mettre l’ensemble des fichiers jar et script sur un serveur distant afin de permettre l’exécusion d’un script pig. La commande pig serait équivalente à :

pig -useHCatalog -f script.pig -p param_1="param_1" -p param_2=42 -p param_3="param_3"
>>> from dstk.ssh import ClientSSH
>>> 
>>> # conf_ssh dictionnaire contenant les paramètres de connexions SSH
>>> ssh = ClientSSH(**conf_ssh, verbose=False, timeout=10800)
>>> 
>>> # SCP d'un fichier vers un serveur distant
>>> ssh.cp(local_path_file, server_path_file)
>>> 
>>> # SCP de plusieur script Pig vers un serveur distant
>>> for script in all_script_path:
>>>     ssh.cp(f"{local_path_script}{script}", server_path_file)
>>> 
>>> # SCP d'un repertoir local ver un serveur distant
>>> ssh.cp(local_path_folder, server_path_folder, recursive=True)
>>> 
>>> # Upload sur la cellule Hadoop d'un fichier nécessaire à l'exécution 
>>> # d'un script Pig
>>> ssh.hadoop_put(f"{server_path}/data_input.csv")
>>> 
>>> # Exécution d'un script Pig qui utilise HCatalog pour une table Hive
>>> ssh.pig(
>>>     f"{server_path}/script.pig",
>>>     params=dict(
>>>         param_1='param_1',
>>>         param_2=42,
>>>         param_3='param_3'
>>>     ),
>>>     opt=['useHCatalog']
>>> )
>>> 
>>> # Déconnexion au serveur
>>> ssh.logout()
after()[source]

Permet de rendre interprétable dans Python les retours des prompts ce produisant après le timeout.

before()[source]

Permet de rendre interprétable dans Python les retours des prompts ce produisant avec le timeout.

check_cmd()[source]

Permet de récupérer le sortie d’une commande.

cp(file_path_local: str, file_path_server: Optional[str] = None, recursive: bool = False, if_exist: bool = True, verbose: Optional[bool] = None)[source]

Méthode SCP (Secure CoPy) d’une machine local vers un serveur distant.

Parameters:
file_path_localstr

chemin vers un fichier ou un répertoire local.

file_path_serverOptional[str]

chemin vers un répertoire sur le serveur distant.

recursivebool

si file_path_local pointe vers un répertoire, permet de copié récursivement les fichiers et répertoires contenu dans le répertoire vers le serveur distant.

if_existbool

permet de tester si le répertoire sur le serveur distant existe, s’il n’éxiste pas le crée.

verboseOptional[bool]

affiche le retour de commandes.

exe_cmd(cmd: str, verbose: Optional[bool] = None)[source]

Méthode d’éxécution d’une commande sur le serveur distant.

Parameters:
cmdstr

cammande (shell, bach, etc.) à exécuter.

verboseOptional[bool]

affiche le retour de la commande. Si None utilise le paramétrage par défaut de la classe ClientSSH.

Examples

La commande suivant retourne les fichiers contenue dans le repertoire courant : >>> from dstk.ssh import ClientSSH >>> >>> # conf_ssh dictionnaire contenant les paramètres de connexions SSH >>> ssh = ClientSSH(**conf_ssh, verbose=False, timeout=10800) >>> ssh.exe_cmd(‘ls’, verbose=True)

get_url_staging(path_staging: str, file_name: Optional[str] = None, content_length: bool = True)[source]

Méthode permettant de récuper l’URL d’un fichier (ou repertoire si le fichier est segmenté) sur le staging de la cellule Hadoop.

Parameters:
path_stagingstr

chemin vers le répertoire du staging.

file_nameOptional[str]

nom du fichier que l’on souhaite récupérer (attention si None descend l’ensemble de répertoire).

content_lengthbool

Permet d’intégrer la taille du fichier dans l’URL permettant d’avoir une bare de progression du téléchargement de la donnée via download_file.

See also

download_file

Notes

Cette méthode est à utiliser avec le fonction download_file() qui, a partir de l’URL généré, télécharger la donnée depuis la cellule Hadoop directement vers l’ordinateur local.

hadoop_getmerge(path_file_hadoop: str, path_file_server: Optional[str] = None, check_is_directory: bool = False, verbose: Optional[bool] = None)[source]

Permet de faire un getmerge de la cellule Hadoop vers un répertoire du serveur distant.

Parameters:
path_file_hadoopstr

chemin vers le répertoire Hadoop où sont stockés tous les segments d’un même fichier. Fonctionne également si le chemin pointe vers un simple fichier.

path_file_serverOptional[str]

chemin vers le fichier du serveur distant vers le quel seront fusionné tous les sergments.

check_is_directorybool

check si le chemin entré est un répertoire ou un fichier (par défaut False). Pour une exécution plus rapide sans passer par ce test finir le path_file_or_folder_hadoop par “/*” si on pointe vers un répertoire évitant ainsi ce test.

verboseOptional[bool]

affiche le retour de commandes.

See also

get_url_staging, download_file

Notes

Il est déconseillé généralement de passer par cette méthode de récupération de donnée si le fichier en trop volumineux pouvant saturer très rapidement l’espace disque du serveur distant. Pour les gros fichier il est conseiller de stocker sur le répertoire staging de la cellule et de passer par get_url_staging qui permet de créer le chemin URL du fichier et d’utiliser download_file(). Celà permet de passer de Hadoop vers un machine local sans passer par le serveur distant.

hadoop_put(path_file_server: str, path_file_hadoop: Optional[str] = None, verbose: Optional[bool] = None, if_exist: bool = True)[source]

Permet de mettre un fichier du serveur distant vers la cellule Hadoop.

Parameters:
path_file_serverstr

chemin du fichier sur le serveur distant.

path_file_hadoopOptional[str]

chemin de destination sur la cellule Hadoop.

verboseOptional[bool]

affiche le retour de commandes.

if_existbool

créé le répertoire sur la cellule Hadoop sur ce dernier n’éxiste pas.

logout()[source]

Déconnexion du client SSH.

pig(path_script: str, params: Dict[str, str] = {}, opt: List[str] = [])[source]

Méthode d’exécution d’un script Pig.

Parameters:
path_sciptstr

chemin sur le serveur distant du scipt Pig à exécuter

paramsDict[str, str]

dictionnaire de l’ensemble des paramètres à envoyer au srcipt Pig.

optList[str]

list d’option Pig.

Examples

L’exemple suivant est equivalent à lancer manuellement sur le serveur distant la commande :

pig -useHCatalog -f script.pig -p param_1="param_1" -p param_2=42 -p param_3="param_3"
>>> from dstk.ssh import ClientSSH
>>> 
>>> # conf_ssh dictionnaire contenant les paramètres de connexions SSH
>>> ssh = ClientSSH(**conf_ssh, verbose=False, timeout=10800)
>>> ssh.pig(
>>>     "script.pig",
>>>     params=dict(
>>>         param_1='param_1',
>>>         param_2=42,
>>>         param_3='param_3',
>>>     ),
>>>     opt=['useHCatalog']
>>> )
test_connexion()[source]

Méthode permettant de tester la connexion SSH. Retourne la commande ‘uptime’. Si la connexion est correctement établie retourne sur le terminal le uptime du serveur, sinon retourne une erreur.