다음을 통해 공유


Databricks 자산 번들을 사용하여 Python 휠 파일 빌드

이 페이지에서는 Databricks 자산 번들을 사용하여 Python 휠 파일을 빌드, 배포 및 실행하는 방법을 설명합니다. Databricks 자산 번들이란?.

JAR을 빌드하고 Unity 카탈로그에 업로드하는 예제 구성은 JAR 파일을 Unity 카탈로그 업로드하는번들을 참조하세요.

Requirements

템플릿을 사용하여 번들 만들기

Python용 Databricks 자산 번들 기본 번들 템플릿을 사용하여 번들을 만듭니다. 이 번들은 Python 휠 파일로 빌드할 파일과 이 Python 휠 파일을 빌드하기 위한 Azure Databricks 작업의 정의로 구성됩니다. 그런 다음 Azure Databricks 작업 영역 내의 Python 휠 작업에서 배포된 파일의 유효성을 검사, 배포 및 Python 휠 파일로 빌드합니다.

번들을 처음부터 만들려면 수동으로 번들 만들기를 참조하세요.

1단계: 번들 만들기

번들에는 배포하려는 자산과 실행하려는 워크플로에 대한 설정이 포함됩니다.

  1. 터미널 또는 명령 프롬프트를 사용하여 템플릿의 생성된 번들을 포함하는 로컬 개발 머신의 디렉터리로 전환합니다.

  2. Databricks CLI 버전을 사용하여 명령을 실행합니다 bundle init .

    databricks bundle init
    
  3. Template to use의 경우, default-python를 눌러 기본값 Enter를 그대로 둡니다.

  4. Unique name for this project의 경우 기본값 my_project를 그대로 두거나 다른 값을 입력한 다음 Enter를 누릅니다. 이것으로 번들의 루트 디렉터리 이름이 결정됩니다. 이 루트 디렉터리가 현재 작업 디렉터리에 만들어집니다.

  5. Include a job that runs a notebook에서 no을 선택하고 Enter를 누릅니다. Databricks CLI에 샘플 노트북을 번들에 추가하지 않도록 지시합니다.

  6. Include an ETL pipeline에서 no을 선택하고 Enter를 누릅니다. 그러면 Databricks CLI가 번들에 샘플 파이프라인을 정의하지 않도록 지시합니다.

  7. Include a stub (sample) Python package의 경우, yes를 눌러 기본값 Enter를 그대로 둡니다. 그러면 Databricks CLI에서 샘플 Python 휠 패키지 파일 및 관련 빌드 지침을 번들에 추가하도록 지시합니다.

  8. Use serverless에서 yes을 선택하고 Enter를 누릅니다. 그러면 Databricks CLI가 서버리스 컴퓨팅에서 실행되도록 번들을 구성하도록 지시합니다.

  9. Unity 카탈로그에 이미 존재하는 카탈로그의 이름을 Default catalog for any tables created by this project [hive_metastore]에 입력하세요.

  10. Use a personal schema for each user working on this project.에 대해 yes을 선택합니다.

2단계: 번들 탐색

템플릿이 생성한 파일을 보려면 새로 만든 번들의 루트 디렉터리로 전환하고 원하는 IDE를 사용하여 이 디렉터리를 엽니다. 특히 관심 있는 파일은 다음과 같습니다.

  • databricks.yml: 이 파일은 번들의 이름을 지정하고, 번들의 파일에 대한 참조를 포함하고, 빌드 설정을 지정 whl 하고, 카탈로그 및 스키마 변수를 정의하고, 대상 작업 영역에 대한 설정을 지정합니다.
  • resources/sample_job.job.yml: 이 파일은 Python 휠 작업의 설정을 지정합니다. 작업 설정에 대한 자세한 내용은 작업을 참조하세요.
  • src/: 이 폴더에는 Python 휠 작업이 Python 휠 파일을 빌드하는 데 사용하는 파일이 포함됩니다.
  • tests/: 이 폴더에는 샘플 단위 테스트가 포함되어 있습니다.
  • README.md: 이 파일에는 이 번들 템플릿을 시작하고 사용하는 방법에 대한 추가 정보가 포함되어 있습니다.

Note

Databricks Runtime 12.2 LTS 이하의 클러스터에 Python 휠 파일을 설치하려면 다음 최상위 매핑을 databricks.yml 파일에 추가해야 합니다.

# Applies to all tasks of type python_wheel_task.
experimental:
  python_wheel_wrapper: true

3단계: 번들 구성 유효성 검사

이제 번들 구성이 유효한지 확인합니다.

  1. 루트 디렉터리에서 Databricks CLI를 사용하여 명령을 실행합니다 bundle validate .

    databricks bundle validate
    
  2. 번들 구성 요약이 반환되면 유효성 검사는 성공입니다. 오류가 반환되면 오류를 수정한 다음 이 단계를 반복합니다.

4단계: 원격 작업 영역에 번들 배포

다음으로, 원격 Azure Databricks 작업 영역에 번들을 배포합니다. Python 휠 파일을 빌드합니다. 작업 영역 내에서 Azure Databricks 작업이 만들어지는지 확인합니다.

  1. 번들 루트에서 Databricks CLI를 사용하여 명령을 실행합니다 bundle deploy .

    databricks bundle deploy --target dev
    
  2. 로컬로 빌드된 Python 휠 파일이 배포되었는지 확인합니다.

    1. Azure Databricks 작업 영역의 사이드바에서 작업 영역을 클릭합니다.
    2. 다음 폴더로 이동하십시오: Workspace > Users ><your-username>> .bundle ><project-name>> dev > artifacts > .internal ><whl-file-name>.whl 폴더로 클릭하세요.

    Python 휠 파일은 이 폴더에 있어야 합니다.

  3. 작업이 만들어졌는지 확인합니다.

    1. Azure Databricks 작업 영역의 사이드바에서 작업 및 파이프라인을 클릭합니다.
    2. 필요에 따라 작업 필터와 내 소유 필터를 선택합니다.
    3. [dev<your-username>] sample_job를 클릭합니다.
    4. 작업 탭을 클릭합니다. python_wheel_task이 있어야 합니다.

이 단계 후에 번들을 변경한 경우 3-4단계를 반복하여 번들 구성이 여전히 유효한지 확인한 다음 프로젝트를 다시 배포합니다.

5단계: 배포된 프로젝트 실행

이제 작업 영역에서 Azure Databricks 작업의 실행을 트리거합니다.

  1. 루트 디렉터리에서 Databricks CLI를 사용하여 명령을 실행합니다 bundle run .

    databricks bundle run --target dev sample_job
    
  2. 터미널에 표시되는 Run URL의 값을 복사하고 이 값을 웹 브라우저에 붙여넣어 Azure Databricks 작업 영역을 엽니다.

  3. Azure Databricks 작업 영역에서 작업이 성공적으로 완료되고 녹색 제목 표시줄이 표시되면 작업 작업을 클릭하여 결과를 확인합니다.

Poetry 또는 setuptools를 사용하여 whl 파일을 생성하세요.

기본 Python 템플릿과 함께 databricks bundle init를 사용하면, uvpyproject.toml을 사용하여 Python 휠을 빌드하는 번들을 구성하는 방법을 보여주는 번들이 생성됩니다. 그러나 휠을 빌드하려면 대신 Poetry 또는 setuptools를 사용할 수도 있습니다.

Poetry 또는 setuptools 설치

  1. Poetry를 설치하거나 setuptools을(를) 실행하세요.

    Poetry

    • Poetry 버전 1.6 이상이 아직 설치되지 않은 경우 설치하십시오. 설치된 버전의 시를 확인하려면 명령 poetry -V 또는 poetry --version.를 실행합니다.
    • Python 버전 3.10 이상이 설치되어 있는지 확인합니다. Python 버전을 확인하려면 명령을 python -V 실행하거나 python --version.

    Setuptools

    wheelsetuptools 패키지가 아직 설치되지 않은 경우, 다음 명령을 실행하여 설치합니다.

    pip3 install --upgrade wheel setuptools
    
  2. 이 번들을 Git 공급자와 함께 저장하려는 경우 프로젝트의 루트에 파일을 추가하고 .gitignore 이 파일에 다음 항목을 추가합니다.

    Poetry

    .databricks
    dist
    

    Setuptools

    .databricks
    build
    dist
    src/my_package/my_package.egg-info
    

빌드 파일 추가

  1. 번들의 루트에서 Poetry를 사용하거나 setuptools를 사용하여 Python 휠 파일을 빌드할 경우 다음 폴더와 파일을 만드십시오.

    Poetry

    ├── src
    │     └── my_package
    │           ├── __init__.py
    │           ├── main.py
    │           └── my_module.py
    └── pyproject.toml
    

    Setuptools

    ├── src
    │     └── my_package
    │           ├── __init__.py
    │           ├── main.py
    │           └── my_module.py
    └── setup.py
    
  2. pyproject.toml 또는 setup.py 파일에 다음 코드를 추가합니다.

    Pyproject.toml

    [tool.poetry]
    name = "my_package"
    version = "0.0.1"
    description = "<my-package-description>"
    authors = ["my-author-name <my-author-name>@<my-organization>"]
    
    [tool.poetry.dependencies]
    python = "^3.10"
    
    [build-system]
    requires = ["poetry-core"]
    build-backend = "poetry.core.masonry.api"
    
    [tool.poetry.scripts]
    main = "my_package.main:main"
    
    • 조직의 기본 연락처 이름으로 대체 my-author-name 합니다.
    • 조직의 기본 전자 메일 연락처 주소로 대체 my-author-name>@<my-organization 합니다.
    • Python 휠 파일의 표시 설명으로 <my-package-description>를 대체합니다.

    Setup.py

    from setuptools import setup, find_packages
    
    import src
    
    setup(
      name = "my_package",
      version = "0.0.1",
      author = "<my-author-name>",
      url = "https://<my-url>",
      author_email = "<my-author-name>@<my-organization>",
      description = "<my-package-description>",
      packages=find_packages(where='./src'),
      package_dir={'': 'src'},
      entry_points={
        "packages": [
          "main=my_package.main:main"
        ]
      },
      install_requires=[
        "setuptools"
      ]
    )
    
    • 을 organization URL로 대체 https://<my-url> 합니다.
    • 조직의 기본 연락처 이름으로 대체 <my-author-name> 합니다.
    • 조직의 기본 전자 메일 연락처 주소로 대체 <my-author-name>@<my-organization> 합니다.
    • Python 휠 파일의 표시 설명으로 <my-package-description>를 대체합니다.

아티팩트 번들 구성 추가

  1. artifacts 매핑 구성을 databricks.yml에 추가하여 whl 아티팩트를 빌드하십시오.

    Poetry

    이 구성은 poetry build 명령을 실행하고 파일 경로가 pyproject.toml 파일과 동일한 디렉터리에 databricks.yml 있음을 나타냅니다.

    Note

    Python 휠 파일을 이미 빌드했고 이제 배포만 하려는 경우, artifacts 매핑을 생략하여 다음 번들 구성 파일을 수정하십시오. 그러면 Databricks CLI는 Python 휠 파일이 이미 빌드되었다고 가정하고 배열의 libraries 항목에 whl 지정된 파일을 자동으로 배포합니다.

    bundle:
      name: my-wheel-bundle
    
    artifacts:
      default:
        type: whl
        build: poetry build
        path: .
    
    resources:
      jobs:
        wheel-job:
          name: wheel-job
          tasks:
            - task_key: wheel-task
              new_cluster:
                spark_version: 13.3.x-scala2.12
                node_type_id: Standard_DS3_v2
                data_security_mode: USER_ISOLATION
                num_workers: 1
              python_wheel_task:
                entry_point: main
                package_name: my_package
              libraries:
                - whl: ./dist/*.whl
    
    targets:
      dev:
        workspace:
        host: <workspace-url>
    

    Setuptools

    이 구성은 setuptools 명령을 실행하고 파일 경로가 setup.py 파일과 동일한 디렉터리에 databricks.yml 있음을 나타냅니다.

    bundle:
      name: my-wheel-bundle
    
    artifacts:
      default:
        type: whl
        build: python3 setup.py bdist wheel
        path: .
    
    resources:
      jobs:
        wheel-job:
          name: wheel-job
          tasks:
            - task_key: wheel-task
              new_cluster:
                spark_version: 13.3.x-scala2.12
                node_type_id: Standard_DS3_v2
                data_security_mode: USER_ISOLATION
                num_workers: 1
              python_wheel_task:
                entry_point: main
                package_name: my_package
              libraries:
                - whl: ./dist/*.whl
    
    targets:
      dev:
        workspace:
        host: <workspace-url>