Bibliotheksgruppe für andere Pakete oder Dateidownload erstellen
Wenn Sie Ihre Instanz anpassen möchten, indem Sie einer Bibliotheksgruppe Bibliotheken hinzufügen, die Sie aus anderen Quellen als den conda -oder pip -Repositorys abrufen, sollten Sie die scriptbasierte Anpassung verwenden.
Wenn Sie nur eine Gruppe von JAR-Dateien oder PY-Dateien verwenden, sollten Sie die Argumente "application_details" > "conf" > "spark.submit.pyFiles" oder "application_details" > "jars" in Ihren Spark-Anwendungsübergabenutzdaten verwenden und nur dann eine Bibliotheksgruppe erstellen, wenn diese Methode für Sie nicht funktioniert. Weitere Informationen finden Sie unter Spark-Anwendung übergeben.
Bei der scriptbasierten Anpassung erstellen Sie ein Script Python unter Verwendung der von IBM Analytics Engineerwarteten Modulnamenskonvention. Außerdem müssen Sie eine Python -Funktion implementieren, die als ausführbarer Einstiegspunkt für
Ihr Script fungiert. In diesem Script können Sie Ihre eigene Logik zum Herunterladen der Bibliotheken hinzufügen und diese in ein vorbestimmtes Verzeichnis ( /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>)
stellen, damit sie Teil der Bibliotheksgruppe werden und zur späteren Verwendung in Ihrer Anwendung gespeichert werden.
Bibliotheksgruppe mit scriptbasierter Anpassung erstellen
Gehen Sie wie folgt vor, um eine Bibliotheksgruppe mithilfe einer scriptbasierten Anpassung zu erstellen:
-
Erstellen Sie eine Python -Datei namens
customization_script.py. Die Anpassungskomponente von Analytics Enginesucht nach einem Python -Modul mit diesem Namen. -
Implementieren Sie in
customization_script.pyeine Funktion mit dem Namencustomize(<install_path>, <params>), wobei<install_path>die vorab festgelegte Position ist, an die die Bibliotheken heruntergeladen werden, nämlich/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Sie können diesen Pfad nicht ändern.<params>ist eine Liste der für das Anpassungsscript erforderlichen Parameter. -
Speichern Sie die Datei
customization_script.pyin IBM Cloud Object Storage oder in GitHub. -
Übergeben Sie die Position der Datei
customization_script.pyüber den Parameter"application_details" > "conf" > "spark.submit.pyFiles"an die Spark-Anpassungsanwendung.Der Abschnitt
"arguments"in den Übergabenutzdaten der Spark-Anwendung muss einen Abschnitt"library_set"mit Details wie"action"und"name"enthalten, wie in den folgenden Beispielnutzdaten gezeigt.Beispiel für die Nutzdaten:
{ "application_details": { "application": "/opt/ibm/customization-scripts/customize_instance_app.py", "arguments": ["{\"library_set\":{\"action\":\"add\",\"name\":\"customize_integration_custom_lib\",\"script\":{\"source\":\"py_files\",\"params\":[\"https://s3.direct.<CHANGEME_REGION>.cloud-object-storage.appdomain.cloud\",\"<CHANGEME_BUCKET_NAME>\",\"libcalc.so\",\"<CHANGEME_ACCESS_KEY>\",\"<CHANGEME_SECRET_KEY>\"]}}}"], "conf": { "spark.hadoop.fs.cos.dev-cos.endpoint":"https://s3.direct.<CHANGEME_REGION>.cloud-object-storage.appdomain.cloud", "spark.hadoop.fs.cos.dev-cos.access.key":"<CHANGEME_ACCESS_KEY>", "spark.hadoop.fs.cos.dev-cos.secret.key":"<CHANGEME_SECRET_KEY>", "spark.submit.pyFiles":"cos://<CHANGEME_BUCKET_NAME>.dev-cos/customization_script.py" } } }Beispiel für customization_script.py:
import cos_utils import os import sys def customize(install_path, params): print ("inside base install_misc_package(), override this to implement your own implementation.") for param in params: print(param) endpoint = params[0] bucket_name = params[1] log_config_file = params[2] access_key = params[3] secret_key = params[4] cos = cos_utils.get_cos_object(access_key, secret_key, endpoint) retCode = cos_utils.download_file(log_config_file, cos, bucket_name, "{}/{}".format(install_path, log_config_file)) if (retCode != 0): print("non-zero return code while downloading file {}".format(str(retCode))) sys.exit(retCode) else: print("Successfully downloaded file...")
Mit scriptbasierter Anpassung erstellte Bibliotheksgruppe verwenden
Wenn Sie eine Bibliotheksgruppe verwenden, die Sie mithilfe eines Scripts erstellt haben, müssen Sie den Pfad der Bibliothek in bestimmte Umgebungsvariablen einschließen, damit Ihre Spark-Anwendung auf die Bibliotheksgruppe zugreifen kann.
Wenn Ihre angepasste Bibliothek beispielsweise eine .so -Datei ist, müssen Sie "EXTRA_LD_LIBRARY_PATH" zum Abschnitt "env" des Übergabeaufrufs der Spark-Anwendung mit dem Wert /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>hinzufügen.
Dadurch wird "EXTRA_LD_LIBRARY_PATH" "LD_LIBRARY_PATH" vorangestellt, womit sichergestellt wird, dass dies der erste Pfad zu der .so -Datei ist, die durchsucht wird.
Wenn Ihre angepasste Bibliothek eine JAR-Datei ist und Sie sie im Spark-Klassenpfad zugänglich machen müssen, müssen Sie die JAR-Datei im zusätzlichen Klassenpfad für Treiber/Executor angeben, je nachdem, wo Sie die JAR-Datei benötigen. Um sie
beispielsweise vor dem Treiberklassenpfad hinzuzufügen, fügen Sie die folgende Eigenschaft hinzu, wobei der Bibliotheksgruppenname java_library lautet:
"spark.driver.extraClassPath":"/home/spark/shared/user-libs/java_library/custom/*"
Wenn Ihre angepasste Bibliothek eine Zertifikatsdatei ist, beispielsweise ein selbst signiertes ICD- Postgres-Zertifikat, können Sie es wie folgt in der Verbindungs-URL angeben:
sslrootcert=/home/spark/shared/user-libs/customize_integration_custom_lib/custom/postgres.cert`
Details finden Sie unter IBM Cloud Databases for PostgreSQL als externen Metaspeicher verwenden.
Wenn Ihre angepasste Bibliothek eine Konfigurationsdatei ist, wird sie den Spark-Treibern und Executors automatisch zur Verfügung gestellt.
Beispiel für ein Anpassungsscript mit einem Multi-File-Download
Die Parameter und das im vorherigen Abschnitt erwähnte Script sind nur ein Beispiel. Sie können bei Bedarf zusätzliche Logik implementieren, z. B. zum Herunterladen eines Verzeichnisses oder mehrerer Dateien oder zum Herunterladen aus unterschiedlichen Quellen usw.
Wenn Sie beispielsweise mehrere Dateien aus einem Verzeichnis in Cloud Object Storageherunterladen möchten, lesen Sie die Informationen unter Beispielscript.