다른 패키지 또는 파일 다운로드를 위한 라이브러리 세트 작성

conda 또는 pip 저장소를 통하는 방법 이외에 다른 소스에서 페치하는 라이브러리 세트에 라이브러리를 추가하여 인스턴스를 사용자 정의하려면 스크립트 기반 사용자 정의를 사용해야 합니다.

JAR 파일 또는 PY 파일 세트만 사용하는 경우 Spark 애플리케이션 제출 페이로드에서 "application_details" > "conf" > "spark.submit.pyFiles" 또는 "application_details" > "jars" 인수를 사용해야 하며 이 방법이 작동하지 않는 경우에만 라이브러리 세트를 작성해야 합니다. 자세한 정보는 Spark 애플리케이션 제출 을 참조하십시오.

스크립트 기반 사용자 정의에서는 IBM Analytics Engine에서 예상하는 모듈 이름 지정 규칙을 사용하여 Python 스크립트를 작성합니다. 또한 스크립트에 대한 실행 가능한 시작점으로 작용하는 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 파일인 경우 /home/spark/shared/user-libs/<libraryset_name>/custom/<subdir_if_applicable> 값을 사용하여 Spark 애플리케이션 제출 호출의 "env" 섹션에 "EXTRA_LD_LIBRARY_PATH"을(를) 추가해야 합니다. 이는 "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`

세부사항은 IBM Cloud Databases for PostgreSQL 을 외부 메타스토어로 사용 을 참조하십시오.

사용자 정의 라이브러리가 구성 파일인 경우 Spark 드라이버 및 실행 프로그램에서 자동으로 사용할 수 있습니다.

다중 파일 다운로드가 있는 사용자 정의 스크립트의 예

이전 절에서 언급한 매개변수 및 스크립트는 샘플일 뿐입니다. 디렉토리 또는 여러 파일을 다운로드하거나 다른 소스에서 다운로드하는 등 필요한 경우 추가 로직을 구현할 수 있습니다.

예를 들어, Cloud Object Storage의 디렉토리에서 여러 파일을 다운로드하려면 샘플 스크립트 를 참조하십시오.