Création d'un ensemble de bibliothèques pour d'autres packages ou téléchargement de fichiers
Si vous souhaitez personnaliser votre instance en ajoutant des bibliothèques à un ensemble de bibliothèques que vous récupérez à partir de sources autres que les référentiels conda ou pip, vous devez utiliser la personnalisation
basée sur un script.
Si vous utilisez uniquement un ensemble de fichiers JAR ou de fichiers PY, vous devez utiliser les arguments "application_details" > "conf" > "spark.submit.pyFiles" ou "application_details" > "jars" dans votre contenu de soumission d'application Spark et créer un ensemble de bibliothèques uniquement si cette méthode ne fonctionne pas pour vous. Pour plus d'informations, voir Soumission d'une application Spark
Avec la personnalisation basée sur un script, vous créez un script Python à l'aide de la convention de dénomination de module attendue par IBM Analytics Engine. Vous devez également implémenter une fonction Python qui sert de point d'entrée exécutable
à votre script. Dans ce script, vous pouvez ajouter votre propre logique pour télécharger les bibliothèques et les placer dans un répertoire prédésigné, à savoir /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>,
afin qu'elles fassent partie de l'ensemble de bibliothèques et soient stockées pour une utilisation ultérieure dans votre application.
Création d'un ensemble de bibliothèques à l'aide de la personnalisation basée sur un script
Pour créer un ensemble de bibliothèques à l'aide de la personnalisation de script, procédez comme suit:
-
Créez le fichier Python
customization_script.py. Le composant de personnalisation de Analytics Engine recherche un module Python portant ce nom. -
Dans votre
customization_script.py, implémentez une fonction appeléecustomize(<install_path>, <params>), où<install_path>est l'emplacement prédésigné dans lequel les bibliothèques sont téléchargées, à savoir/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Vous ne pouvez pas modifier ce chemin.<params>est une liste des paramètres requis par le script de personnalisation. -
Stockez le fichier
customization_script.pydans IBM Cloud Object Storage ou dans GitHub. -
Transmettez l'emplacement du fichier
customization_script.pyà l'application Spark de personnalisation via le paramètre"application_details" > "conf" > "spark.submit.pyFiles".La section
"arguments"du contenu soumission de l'application Spark doit contenir une section"library_set"avec des détails, tels que"action"et"name", comme indiqué dans l'exemple de contenu suivant.Exemple de contenu :
{ "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" } } }Exemple 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...")
Utilisation de l'ensemble de bibliothèques créé à l'aide de la personnalisation basée sur un script
Lorsque vous utilisez un ensemble de bibliothèques que vous avez créé à l'aide d'un script, vous devez inclure le chemin de la bibliothèque dans certaines variables d'environnement pour que votre application Spark puisse accéder à l'ensemble de bibliothèques.
Par exemple, si votre bibliothèque personnalisée est un fichier .so, vous devez ajouter "EXTRA_LD_LIBRARY_PATH" à la section "env" de l'appel de soumission de l'application Spark, avec
la valeur /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>. Cela ajoute "EXTRA_LD_LIBRARY_PATH" à "LD_LIBRARY_PATH", en veillant à ce qu'il
s'agit du premier chemin d'accès au fichier .so qui est recherché.
Si votre bibliothèque personnalisée est un fichier JAR et que vous avez besoin qu'il soit accessible dans le chemin d'accès aux classes Spark, vous devez spécifier le fichier JAR dans le chemin d'accès aux classes supplémentaire pour le pilote
/ programme d'exécution en fonction de l'emplacement où vous avez besoin du fichier JAR. Par exemple, pour l'ajouter devant le chemin d'accès aux classes du pilote, ajoutez la propriété suivante, où le nom de l'ensemble de bibliothèques est
java_library:
"spark.driver.extraClassPath":"/home/spark/shared/user-libs/java_library/custom/*"
Si votre bibliothèque personnalisée est un fichier de certificat, par exemple un certificat Postgres ICD autosigné, vous pouvez le spécifier dans l'URL de connexion de la manière suivante:
sslrootcert=/home/spark/shared/user-libs/customize_integration_custom_lib/custom/postgres.cert`
Pour plus de détails, voir Utilisation de IBM Cloud Databases for PostgreSQL en tant que métamagasin externe.
Si votre bibliothèque personnalisée est un fichier de configuration, elle est automatiquement mise à la disposition des pilotes et des programmes d'exécution Spark.
Exemple de script de personnalisation avec un téléchargement multifichier
Les paramètres et le script mentionnés dans la section précédente ne sont qu'un exemple. Vous pouvez implémenter une logique supplémentaire si nécessaire, par exemple pour le téléchargement d'un répertoire ou de plusieurs fichiers ou le téléchargement à partir d'une source différente, etc.
Par exemple, pour télécharger plusieurs fichiers depuis un répertoire sur Cloud Object Storage, voir Exemple de script.