建立其他套件或檔案下載的程式庫集

如果您想要透過將程式庫新增至您從來源 (而非透過 condapip 儲存庫) 提取的程式庫集來自訂實例,則應該使用 Script 型自訂作業。

如果您只使用一組 JAR 檔或 PY 檔,則應該在 Spark 應用程式提交有效負載中使用 "application_details" > "conf" > "spark.submit.pyFiles""application_details" > "jars" 引數,並且只有在此方法不適用於您時才建立程式庫集。 如需相關資訊,請參閱 提交 Spark 應用程式

使用 Script 型自訂作業,您可以使用 IBM Analytics Engine預期的模組命名慣例來建立 Python Script。 此外,您還需要實作 Python 函數,以作為 Script 的可執行進入點。 在此 Script 中,您可以新增自己的邏輯,以下載程式庫並將它們放置在預先指定的目錄 (即 /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>) 中,以便它們成為程式庫集的一部分,並儲存在應用程式中以供稍後使用。

使用 Script 型自訂作業來建立程式庫集

執行下列步驟,以使用 Script 型自訂作業來建立程式庫集:

  1. 建立名為 customization_script.py 的 Python 檔案。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> 是自訂作業 Script 所需的參數清單。

  3. customization_script.py 檔案儲存在 IBM Cloud Object Storage 或 GitHub中。

  4. 透過 "application_details" > "conf" > "spark.submit.pyFiles" 參數,將 customization_script.py 檔案的位置傳遞至自訂作業 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...")
    

使用使用 Script 型自訂作業所建立的程式庫集

當您使用使用 Script 建立的程式庫集時,您需要在特定環境變數中包括程式庫的路徑,以便 Spark 應用程式可以存取程式庫集。

例如,如果您的自訂程式庫是 .so 檔案,則需要將 "EXTRA_LD_LIBRARY_PATH" 新增至 Spark 應用程式提交呼叫的 "env" 區段,值為 /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>。 這會在 "LD_LIBRARY_PATH" 之前附加 "EXTRA_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`

如需詳細資料,請參閱 使用 IBM Cloud Databases for PostgreSQL 作為外部 meta 儲存庫

如果您的自訂程式庫是配置檔,它會自動提供給 Spark 驅動程式和執行程式。

具有多重檔案下載的自訂作業 Script 範例

前一節所提及的參數和 Script 只是範例。 必要的話,您可以實作其他邏輯,例如下載目錄或多個檔案,或從不同來源下載等。

例如,若要從 Cloud Object Storage上的目錄下載多個檔案,請參閱 範例 Script