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:

  1. Erstellen Sie eine Python -Datei namens customization_script.py. Die Anpassungskomponente von Analytics Enginesucht nach einem Python -Modul mit diesem Namen.

  2. Implementieren Sie in customization_script.py eine Funktion mit dem Namen customize(<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.

  3. Speichern Sie die Datei customization_script.py in IBM Cloud Object Storage oder in GitHub.

  4. Ü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.