他のパッケージまたはファイル・ダウンロード用のライブラリー・セットの作成
condaリポジトリーまたはpipリポジトリー以外のソースから取り出すライブラリー・セットにライブラリーを追加してインスタンスをカスタマイズする場合は、スクリプト・ベースのカスタマイズを使用する必要があります。
JAR ファイルまたは PY ファイルのセットのみを使用する場合は、Spark アプリケーションのサブミット・ペイロードで "application_details" > "conf" > "spark.submit.pyFiles" 引数または "application_details" > "jars" 引数を使用し、このメソッドが機能しない場合にのみライブラリー・セットを作成する必要があります。
詳しくは、 Spark アプリケーションの実行依頼 を参照してください。
スクリプト・ベースのカスタマイズでは、Pythonスクリプトを作成することができます。その時は、IBM Analytics Engineによって予期されるモジュール命名規則を使用します。 また、スクリプトへの実行可能エントリー・ポイントとして機能するPython関数を実装する必要があります。 このスクリプトでは、ライブラリーをダウンロードして事前指定されたディレクトリー ( /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>)
に配置するための独自のロジックを追加することができます。これにより、それらのライブラリーはライブラリー・セットの一部となり、後でアプリケーションで使用するために保管されます。
スクリプト・ベースのカスタマイズを使用したライブラリー・セットの作成
スクリプト・ベースのカスタマイズを使用してライブラリー・セットを作成するには、以下のステップを実行します:
-
Pythonファイルを作成し
customization_script.pyという名前を付けます。Analytics Engineのカスタマイズ・コンポーネントは、この名前のPythonモジュールを探します。 -
customization_script.pyで、customize(<install_path>, <params>)という関数を実装します。ここで、<install_path>は、ライブラリーのダウンロード先として事前に指定された場所、つまり/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>です。 このパスは変更できません。<params>は、カスタマイズ・スクリプトに必要なパラメーターのリストです。 -
customization_script.pyファイルをIBM Cloud Object Storage またはGitHubに保管します。 -
customization_script.pyファイルの場所を、"application_details" > "conf" > "spark.submit.pyFiles"パラメーターを使用して、カスタマイズSparkアプリケーションに渡します。Sparkアプリケーションのサブミット・ペイロードの
"arguments"セクションには、"library_set"セクションが詳細に含まれている必要があります。これは以下のサンプル・ペイロードで"action"と"name"で示されています。ペイロードの例:
{ "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" } } }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...")
スクリプト・ベースのカスタマイズを使用して作成されたライブラリー・セットの使用
スクリプトを使用して作成したライブラリー・セットを使用する場合は、Sparkアプリケーションからライブラリー・セットにアクセスできるように、ライブラリーのパスを特定の環境変数に含める必要があります。
例えば、カスタム・ライブラリーが.soファイルである場合は、"EXTRA_LD_LIBRARY_PATH"をSparkアプリケーション実行依頼呼び出しの"env"セクションに、値/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>を指定して追加する必要があります。
これにより、"EXTRA_LD_LIBRARY_PATH"が"LD_LIBRARY_PATH"の前に付加され、これが検索対象の.soファイルへの最初のパスであることが確認されます。
カスタム・ライブラリーが JAR ファイルであり、Spark クラスパスでアクセスできるようにする必要がある場合は、JAR ファイルが必要な場所に応じて、ドライバー/実行プログラムの追加クラスパスに JAR ファイルを指定する必要があります。 例えば、ドライバー・クラスパスの前に追加するには、以下のプロパティーを追加します。ここで、ライブラリー・セット名は java_library です。
"spark.driver.extraClassPath":"/home/spark/shared/user-libs/java_library/custom/*"
カスタム・ライブラリーが証明書ファイル (例えば、自己署名 ICD Postgres 証明書) である場合は、以下の方法で接続 URL にそれを指定できます。
sslrootcert=/home/spark/shared/user-libs/customize_integration_custom_lib/custom/postgres.cert`
詳しくは、 Using IBM Cloud Databases for PostgreSQL as external metastore を参照してください。
カスタム・ライブラリーが構成ファイルである場合は、Spark ドライバーおよび実行プログラムで自動的に使用可能になります。
マルチファイル・ダウンロードを使用したカスタマイズ・スクリプトの例
パラメーター、および前のセクションで説明したスクリプトは、単なるサンプルです。 ディレクトリーまたは複数のファイルをダウンロードしたり、異なるソースからダウンロードしたりするなど、必要に応じて追加のロジックを実装できます。
例えば、 Cloud Object Storage上のディレクトリーから複数のファイルをダウンロードするには、 サンプル・スクリプト を参照してください。