Im Analyseprojekt Cloud Pak for Data (CP4D) können Notebook und Data Refinery Flow in Jobs konvertiert und stapelweise ausgeführt werden. Was ich diesmal machen möchte, sind die folgenden zwei Punkte.
Genau genommen scheint Job im Ausdruck "Umgebungsvariablen setzen und starten" genauer zu sein als "Argumente zur Laufzeit übergeben". Da es wahrscheinlich intern als OpenShift-Pod startet, gehe ich davon aus, dass die Umgebungsvariable als OpenShift ConfigMap behandelt wird.
Beginnen wir den Job tatsächlich mit der API, geben zu diesem Zeitpunkt Umgebungsvariablen an und übergeben ihn an die Verarbeitungslogik.
Erstellen Sie ein Notizbuch und verwandeln Sie es in einen Job. Unter der Annahme, dass diesmal "MYENV1", "MYENV2" und "MYENV3" als Umgebungsvariablen behandelt werden sollen, werden die Werte in einem Pandas-Datenrahmen verarbeitet und als CSV an die Datenbestände des Analyseprojekts ausgegeben. Natürlich sind diese Umgebungsvariablen nicht standardmäßig definiert. Legen Sie daher die Standardwerte in os.getenv als Standard fest.
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
Dann rahmen Sie diese drei Werte mit Pandas ein.
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
Exportieren Sie als Datenelement für Ihr Analyseprojekt. Fügen Sie dem Dateinamen einen Zeitstempel hinzu. Die Ausgabe von Datenbeständen an das Analyseprojekt ist [dieser Artikel](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)
Wählen Sie im Notebook-Menü Datei> Versionen speichern, um die Version zu speichern. Erforderlich beim Erstellen eines Jobs. Klicken Sie dann oben rechts im Notizbuchbildschirm auf die Schaltfläche Auftrag> Auftrag erstellen. Geben Sie dem Job einen Namen und klicken Sie auf Erstellen.
Lassen Sie uns den erstellten Job auf dem CP4D-Bildschirm ausführen. Klicken Sie zunächst einfach auf die Schaltfläche "Job ausführen" und führen Sie sie aus, ohne Umgebungsvariablen zu definieren.
OK, wenn der Job ausgeführt wird und "Vollständig" wird.
Mit Blick auf die Datenbestände des Analyseprojekts wird eine CSV-Datei generiert.
Wenn Sie auf den Dateinamen klicken, um die Vorschau anzuzeigen, können Sie sehen, dass der in Notebook festgelegte Standardwert gespeichert ist.
Legen Sie als Nächstes die Umgebungsvariable fest und führen Sie sie aus. Klicken Sie im Jobbildschirm unter "Umgebungsvariablen" auf "Bearbeiten" und legen Sie die folgenden drei Zeilen fest.
MYENV1=1
MYENV2=hoge
MYENV3=10.5
Es ist so.
Versuchen Sie nach dem Übermitteln der Einstellungen erneut, Job auszuführen. Der Inhalt der resultierenden CSV-Datei sieht folgendermaßen aus. Da es sich um eine Umgebungsvariable handelt, wird sie auch dann als Zeichenfolge behandelt, wenn Sie einen numerischen Wert eingeben.
Verwenden Sie die Anforderungen von Python, um den erstellten Job über die API zu starten. Führen Sie den folgenden Code in der Python-Umgebung außerhalb von CP4D aus.
Um das Token zu erhalten, führen Sie die Standardauthentifizierung mit dem Benutzernamen und dem Kennwort durch und rufen Sie das accessToken ab. Zur Authentifizierung [Beispiel für die Ausführung mit Curl im CP4D v2.5-Produkthandbuch](https://www.ibm.com/support/knowledgecenter/ja/SSQNUZ_2.5.0/wsj/analyze-data/ml-authentication- Es gibt 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']
Die Option verify = False in Anforderungen ist eine Problemumgehung zur Überprüfung von Zertifikaten, wenn CP4D ein selbstsigniertes Zertifikat verwendet.
Rufen Sie die Jobliste des Analyseprojekts ab. Informieren Sie sich vorab im Voraus über die ID des Analyseprojekts, das auf CP4D verwendet werden soll. Zeigen Sie die Umgebungsvariable PROJECT_ID im Notizbuch Ihres Analyseprojekts an und überprüfen Sie sie.
Untersuchung der Projekt-ID(Auf Notebook auf CP4D ausführen)
import os
os.environ['PROJECT_ID']
# -output-
# 'f3110316-687e-450a-8f17-57296c907973'
Stellen Sie die oben gefundene Projekt-ID ein und rufen Sie die Jobliste mit der API ab. Die API verwendet die Watson Data API. Die API-Referenz lautet Jobs / Liste der Jobs unter einem Projekt abrufen ist.
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'}}}]}
Die obige Asset-ID ist die ID des Jobs "job_env_test". Speichern Sie es in einer Variablen.
job_id = "b05d1214-d684-4bd8-b1fa-cc05a8ccee81"
Führen Sie den obigen Job mit der API aus. Die API-Referenz lautet Jobläufe / Start eines Jobs starten. Sie müssen json zur Laufzeit den Wert job_run geben, einschließlich der Laufzeitumgebungsvariablen hier.
jobrunpost = {
"job_run": {
"configuration" : {
"env_variables" : ["MYENV1=100","MYENV2=runbyapi","MYENV3=100.0"]
}
}
}
Geben Sie den obigen job_run in json ein, um den Job auszuführen. Die Ausführungs-ID wird in der'asset_id' der Antwort'metadata 'gespeichert.
# 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'
Überprüfen Sie nach dem Ausführen den Status. Die API-Referenz lautet Jobläufe / Bestimmte Ausführung eines Jobs abrufen ist.
# 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'
Wenn Sie diese request.get mehrmals ausführen, ändert sich das Ergebnis in "Starten" -> "Ausführen" -> "Abgeschlossen". Wenn es "Abgeschlossen" wird, ist die Ausführung abgeschlossen.
Kehren Sie zum CP4D-Bildschirm zurück und überprüfen Sie den Inhalt der CSV-Datei, die in den Datenbeständen des Analyseprojekts generiert wurde.
Es wurde bestätigt, dass die in job_run angegebene Umgebungsvariable ordnungsgemäß in den Ergebnisdaten gespeichert ist.
(Bonus) Doppelbytezeichen können auch für den Wert der Umgebungsvariablen job_run verwendet werden.
Job mit Doppelbytezeichen_run
jobrunpost = {
"job_run": {
"configuration" : {
"env_variables" : ["MYENV1=AIUEO","MYENV2=a-I-U-E-O","MYENV3=Aio"]
}
}
}
Ausführungsergebnis:
Danach können Sie den Wert (die Zeichenfolge) der in Job's Notebook empfangenen Umgebungsvariablen kochen oder backen oder nach Belieben verwenden.
(Referenzmaterial) https://github.ibm.com/GREGORM/CPDv3DeployML/blob/master/NotebookJob.ipynb Dieses Repository enthielt nützliche Beispiele für Notebooks, die mit CP4D verwendet werden können.