建立其他套件或檔案下載的程式庫集
如果您想要透過將程式庫新增至您從來源 (而非透過 conda 或 pip 儲存庫) 提取的程式庫集來自訂實例,則應該使用 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 型自訂作業來建立程式庫集:
-
建立名為
customization_script.py的 Python 檔案。Analytics Engine的自訂作業元件會尋找具有此名稱的 Python 模組。 -
在
customization_script.py中,實作稱為customize(<install_path>, <params>)的函數,其中<install_path>是程式庫下載至其中的預先指定位置,即/home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable>。 您無法變更此路徑。<params>是自訂作業 Script 所需的參數清單。 -
將
customization_script.py檔案儲存在 IBM Cloud Object Storage 或 GitHub中。 -
透過
"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。