他のパッケージまたはファイル・ダウンロード用のライブラリー・セットの作成

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>) に配置するための独自のロジックを追加することができます。これにより、それらのライブラリーはライブラリー・セットの一部となり、後でアプリケーションで使用するために保管されます。

スクリプト・ベースのカスタマイズを使用したライブラリー・セットの作成

スクリプト・ベースのカスタマイズを使用してライブラリー・セットを作成するには、以下のステップを実行します:

  1. Pythonファイルを作成しcustomization_script.pyという名前を付けます。Analytics Engineのカスタマイズ・コンポーネントは、この名前のPythonモジュールを探します。

  2. customization_script.py で、 customize(<install_path>, <params>) という関数を実装します。ここで、 <install_path> は、ライブラリーのダウンロード先として事前に指定された場所、つまり /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable> です。 このパスは変更できません。 <params> は、カスタマイズ・スクリプトに必要なパラメーターのリストです。

  3. customization_script.pyファイルをIBM Cloud Object Storage またはGitHubに保管します。

  4. 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上のディレクトリーから複数のファイルをダウンロードするには、 サンプル・スクリプト を参照してください。