Creazione di una serie di librerie per altri pacchetti o download di file
Se si desidera personalizzare la propria istanza aggiungendo librerie a una serie di librerie che si recuperano da origini diverse dai repository conda o pip, è necessario utilizzare la personalizzazione basata su script.
Se si utilizza solo una serie di file JAR o PY, è necessario utilizzare gli argomenti "application_details" > "conf" > "spark.submit.pyFiles" o "application_details" > "jars" nel payload di inoltro dell'applicazione Spark e creare una serie di librerie solo se questo metodo non funziona. Per ulteriori informazioni, vedi Inoltro di un'applicazione Spark
Con la personalizzazione basata su script, crei uno script Python utilizzando la convenzione di denominazione del modulo prevista da IBM Analytics Engine. Inoltre, devi implementare una funzione Python che funga da punto di ingresso eseguibile
per il tuo script. In questo script, è possibile aggiungere la propria logica per scaricare le librerie e collocarle in una directory predesignata, ovvero /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>,
in modo che diventino parte della serie di librerie e vengano memorizzate per un utilizzo successivo nell'applicazione.
Creazione di una serie di librerie mediante la personalizzazione basata sugli script
Eseguire questa procedura per creare una serie di librerie utilizzando la personalizzazione basata su script:
-
Crea un file Python denominato
customization_script.py. Il componente di personalizzazione di Analytics Enginecerca un modulo Python con questo nome. -
In
customization_script.py, implementare una funzione denominatacustomize(<install_path>, <params>), dove<install_path>è il percorso prestabilito in cui vengono scaricate le librerie, ovvero/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Non puoi cambiare questo percorso.<params>è un elenco dei parametri richiesti dallo script di personalizzazione. -
Archivia il file
customization_script.pyin IBM Cloud Object Storage o in GitHub. -
Passare l'ubicazione del file
customization_script.pyall'applicazione Spark di personalizzazione tramite il parametro"application_details" > "conf" > "spark.submit.pyFiles".La sezione
"arguments"nel payload di inoltro dell'applicazione Spark deve contenere una sezione"library_set"con dettagli, come"action"e"name"come mostrato nel seguente payload di esempio.Esempio di payload:
{ "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" } } }Esempio di 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...")
Utilizzo della serie di librerie creata utilizzando la personalizzazione basata sullo script
Quando si utilizza una serie di librerie creata utilizzando uno script, è necessario includere il percorso della libreria in determinate variabili di ambiente in modo che l'applicazione Spark possa accedere alla serie di librerie.
Ad esempio, se la tua libreria personalizzata è un file .so, devi aggiungere "EXTRA_LD_LIBRARY_PATH" alla sezione "env" della chiamata di inoltro dell'applicazione Spark, con il valore
/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Questo antepone "EXTRA_LD_LIBRARY_PATH" a "LD_LIBRARY_PATH", assicurando che questo sia il
primo percorso del file .so in cui viene eseguita la ricerca.
Se la libreria personalizzata è un file JAR ed è necessario che sia accessibile nel percorso di classe Spark, è necessario specificare il file JAR nel percorso di classe supplementare per il driver / executor in base a dove si richiede il file
JAR. Ad esempio, per aggiungerlo davanti al percorso classi del driver, aggiungere la seguente proprietà, dove il nome della serie di librerie è java_library:
"spark.driver.extraClassPath":"/home/spark/shared/user-libs/java_library/custom/*"
Se la libreria personalizzata è un file di certificato, ad esempio un certificato Postgres ICD autofirmato, è possibile specificarlo nell'URL di connessione nel seguente modo:
sslrootcert=/home/spark/shared/user-libs/customize_integration_custom_lib/custom/postgres.cert`
Per i dettagli, vedi Utilizzo di IBM Cloud Databases for PostgreSQL come metastore esterno.
Se la libreria personalizzata è un file di configurazione, viene resa disponibile automaticamente ai driver e agli esecutori Spark.
Esempio di script di personalizzazione con download di più file
I parametri e lo script menzionati nella sezione precedente sono solo un esempio. È possibile implementare una logica aggiuntiva se necessario, ad esempio per scaricare una directory o più file o per scaricare da un'origine diversa e così via.
Ad esempio, per scaricare più file da una directory in Cloud Object Storage, vedi Script di esempio.