[PYTHON] Exécuter l'API de Cloud Pak for Data Analysis Project Job avec des variables d'environnement

Dans le projet d'analyse Cloud Pak for Data (CP4D), Notebook et Data Refinery Flow peuvent être convertis en Jobs et exécutés par lots. Ce que je veux faire cette fois, ce sont les deux points suivants.

Strictement parlant, Job semble être plus précis dans l'expression «définir les variables d'environnement et démarrer» que «passer des arguments à l'exécution». Puisqu'il commence probablement comme un pod OpenShift en interne, je suppose qu'il traite la variable d'environnement comme un OpenShift ConfigMap.

Commençons réellement Job avec l'API, donnons des variables d'environnement à ce moment-là et transmettons-les à la logique de traitement.

Créer un cahier

Créez un carnet et transformez-le en Job. En supposant que "MYENV1", "MYENV2" et "MYENV3" sont les variables d'environnement à traiter cette fois, les valeurs sont traitées dans une trame de données pandas et sorties au format CSV vers les actifs de données du projet d'analyse. Bien sûr, ces variables d'environnement ne sont pas définies par défaut, alors définissez les valeurs par défaut par défaut dans os.getenv.

import os
myenv1 = os.getenv('MYENV1', default='no MYENV1')
myenv2 = os.getenv('MYENV2', default='no MYENV2')
myenv3 = os.getenv('MYENV3', default='no MYENV3')

print(myenv1)
print(myenv2)
print(myenv3)
# -output-
# no MYENV1
# no MYENV2
# no MYENV3

Ensuite, encadrez ces trois valeurs avec des pandas,

import pandas as pd
df = pd.DataFrame({'myenv1' : [myenv1], 'myenv2' : [myenv2], 'myenv3' : [myenv3]})
df
# -output-
#	myenv1	myenv2	myenv3
# 0	no MYENV1	no MYENV2	no MYENV3

Exportez en tant qu'actif de données pour votre projet d'analyse. Ajoutez un horodatage au nom du fichier. La sortie des actifs de données vers le projet d'analyse est [cet article](https://qiita.com/ttsuzuku/items/eac3e4bedc020da93bc1#%E3%83%87%E3%83%BC%E3%82%BF%E8 % B3% 87% E7% 94% A3% E3% 81% B8% E3% 81% AE% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 81% AE% E4% BF % 9D% E5% AD% 98-% E5% 88% 86% E6% 9E% 90% E3% 83% 97% E3% 83% AD% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88).

from project_lib import Project
project = Project.access()
import datetime
now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y%m%d_%H%M%S')

project.save_data("jov_env_test_"+now+".csv", df.to_csv(),overwrite=True)

Créer un travail

Dans le menu Notebook, sélectionnez Fichier> Enregistrer les versions pour enregistrer la version. Requis lors de la création d'un Job. Cliquez ensuite sur le bouton Job en haut à droite de l'écran Notebook> Create Job. image.png Donnez un nom au travail et cliquez sur Créer. image.png

Exécuter le travail

Exécutons le Job créé sur l'écran CP4D. Tout d'abord, sans définir de variables d'environnement, cliquez simplement sur le bouton "Exécuter la tâche" pour l'exécuter. image.png

OK lorsque le travail est exécuté et qu'il devient "Terminé". image.png

En regardant les actifs de données du projet d'analyse, un fichier CSV est généré, image.png

Si vous cliquez sur le nom du fichier pour voir l'aperçu, vous pouvez voir que la valeur par défaut définie dans Notebook est stockée. image.png

Ensuite, définissez la variable d'environnement et exécutez-la. Sur l'écran Travail, cliquez sur «Modifier» sous «Variables d'environnement» et définissez les trois lignes suivantes.

MYENV1=1
MYENV2=hoge
MYENV3=10.5

C'est comme ça. image.png

Après avoir soumis les paramètres, essayez à nouveau d'exécuter le Job. Le contenu du fichier CSV résultant ressemble à ceci. image.png Puisqu'il s'agit d'une variable d'environnement, elle est traitée comme une chaîne String même si vous entrez une valeur numérique.

Exécuter le travail avec l'API

Utilisez les requêtes de python pour lancer le Job créé via l'API. Exécutez le code suivant à partir de l'environnement Python en dehors de CP4D.

Authentification

Pour obtenir le jeton, effectuez une authentification de base avec le nom d'utilisateur et le mot de passe et obtenez le accessToken. Pour l'authentification, [Exemple d'exécution avec curl dans le manuel du produit CP4D v2.5](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data/ml-authentication- Il y a local.html).

url = "https://cp4d.hostname.com"
uid = "username"
pw = "password"

import requests

#Authentication
response = requests.get(url+"/v1/preauth/validateAuth", auth=(uid,pw), verify=False).json()
token = response['accessToken']

L'option verify = False dans les demandes est une solution de contournement de vérification de certificat si CP4D utilise un certificat auto-signé.

Obtenir la liste des emplois

Obtenez la liste des tâches du projet d'analyse. En guise de préparation, découvrez à l'avance l'ID du projet d'analyse à utiliser sur CP4D. Affichez et vérifiez la variable d'environnement PROJECT_ID dans le bloc-notes de votre projet d'analyse.

Enquête sur l'ID de projet(Exécuter sur Notebook sur CP4D)


import os
os.environ['PROJECT_ID']
# -output-
# 'f3110316-687e-450a-8f17-57296c907973'

Définissez l'ID de projet ci-dessus et obtenez la liste des tâches avec l'API. L'API utilise l'API Watson Data. La référence de l'API est Jobs / Get list of jobs under a project est.

project_id = 'f3110316-687e-450a-8f17-57296c907973'
headers = {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
}

# Job list
response = requests.get(url+"/v2/jobs?project_id="+project_id, headers=headers, verify=False).json()
response
# -output-
#{'total_rows': 1,
# 'results': [{'metadata': {'name': 'job_env_test',
#    'description': '',
#    'asset_id': 'b05d1214-d684-4bd8-b1fa-cc05a8ccee81',
#    'owner_id': '1000331001',
#    'version': 0},
#   'entity': {'job': {'asset_ref': '6e0b450e-2f9e-4605-88bf-d8a5e2bda4a3',
#     'asset_ref_type': 'notebook',
#     'configuration': {'env_id': 'jupconda36-f3110316-687e-450a-8f17-57296c907973',
#      'env_type': 'notebook',
#      'env_variables': ['MYENV1=1', 'MYENV2=hoge', 'MYENV3=10.5']},
#     'last_run_initiator': '1000331001',
#     'last_run_time': '2020-05-31T22:20:18Z',
#     'last_run_status': 'Completed',
#     'last_run_status_timestamp': 1590963640135,
#     'schedule': '',
#     'last_run_id': 'ebd1c2f1-f7e7-40cc-bb45-5e12f4635a14'}}}]}

L'identifiant asset_id ci-dessus est l'ID du Job "job_env_test". Stockez-le dans une variable.

job_id = "b05d1214-d684-4bd8-b1fa-cc05a8ccee81"

Exécuter le travail

Exécutez le Job ci-dessus avec l'API. La référence API est Job Runs / Start a run for a job. Au moment de l'exécution, vous devez donner à json la valeur job_run et inclure ici également les variables d'environnement d'exécution.

jobrunpost = {
  "job_run": {
      "configuration" : {
          "env_variables" :  ["MYENV1=100","MYENV2=runbyapi","MYENV3=100.0"] 
      }
  }
}

Donnez le job_run ci-dessus comme json pour exécuter le travail. L'ID d'exécution est stocké dans l''asset_id 'de la réponse' metadata '.

# Run job
response = requests.post(url+"/v2/jobs/"+job_id+"/runs?project_id="+project_id, headers=headers, json=jobrunpost, verify=False).json()

# Job run id
job_run_id = response['metadata']['asset_id']
job_run_id
# -output-
# 'cedec57a-f9a7-45e9-9412-d7b87a04036a'

Vérifier l'état d'exécution du travail

Après l'exécution, vérifiez l'état. La référence de l'API est Job Runs / Get a specific run of a jobest.

# Job run status
response = requests.get(url+"/v2/jobs/"+job_id+"/runs/"+job_run_id+"?project_id="+project_id, headers=headers, verify=False).json()
response['entity']['job_run']['state']
# -output-
# 'Starting'

Si vous exécutez ce requests.get plusieurs fois, le résultat deviendra "Démarrage" -> "En cours d'exécution" -> "Terminé". Lorsqu'il devient «Terminé», l'exécution est terminée.

Résultat d'exécution

Revenez à l'écran CP4D et vérifiez le contenu du fichier CSV généré dans les actifs de données du projet d'analyse. image.png

Il a été confirmé que la variable d'environnement spécifiée dans job_run est correctement stockée dans les données de résultat.

(prime) Des caractères codés sur deux octets peuvent également être utilisés pour la valeur de la variable d'environnement job_run.

Job contenant des caractères codés sur deux octets_run


jobrunpost = {
  "job_run": {
      "configuration" : {
          "env_variables" :  ["MYENV1=AIUEO","MYENV2=a-I-U-E-O","MYENV3=Aio"] 
      }
  }
}

Résultat de l'exécution: image.png

Après cela, vous pouvez faire bouillir ou cuire la valeur (chaîne de caractères) de la variable d'environnement reçue dans Job's Notebook ou l'utiliser comme vous le souhaitez.

(Matériel de référence) https://github.ibm.com/GREGORM/CPDv3DeployML/blob/master/NotebookJob.ipynb Ce référentiel contenait des exemples utiles de notebooks pouvant être utilisés avec CP4D.

Recommended Posts

Exécuter l'API de Cloud Pak for Data Analysis Project Job avec des variables d'environnement
Fichier journal de sortie avec Job (Notebook) de Cloud Pak for Data
Déployez des fonctions avec Cloud Pak for Data
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données
Pratique de création d'une plateforme d'analyse de données avec BigQuery et Cloud DataFlow (traitement de données)
Analyse des données pour améliorer POG 2 ~ Analyse avec le notebook jupyter ~
Préparer un environnement de langage de programmation pour l'analyse des données
Enregistrez les données pandas dans des actifs de données au format Excel avec Cloud Pak for Data (Watson Studio)
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Nettoyer l'espace de déploiement Cloud Pak for Data
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
Défiez l'analyse des composants principaux des données textuelles avec Python
Analyse des données de mesure ①-Mémorandum de montage scipy-
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Analyse de données avec python 2
Analyse de données avec Python
Créez un environnement d'analyse de données avec Kedro + MLflow + Github Actions
Flux d'extraction de texte au format PDF avec l'API Cloud Vision
Recommandation de Jupyter Notebook, un environnement de codage pour les data scientists
Reconnaissance vocale des fichiers wav avec Google Cloud Speech API Beta
Obtenez des données de l'API d'analyse avec le client API Google pour python