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:
objectClasse 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.
-
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
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
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.
-
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'] >>> )