AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

AWS Glue ETL 작업에서 외부 Python 라이브러리를 사용하려면 어떻게 해야 합니까?

4분 분량
0

AWS Glue 추출, 전환, 로드(ETL) 작업에서 외부 Python 라이브러리를 사용하려고 합니다.

간략한 설명

AWS Glue 버전 2.0, 3.0 및 4.0을 사용하는 경우 작업 수준에서 추가 Python 모듈 또는 다른 모듈 버전을 설치할 수 있습니다. 새 모듈을 추가하거나 기존 모듈의 버전을 변경하려면**--additional-python-modules** 작업 파라미터 키를 사용하십시오. 키 값은 쉼표로 구분된 Python 모듈 이름의 목록입니다. 이 파라미터를 사용하면 AWS Glue ETL 작업에서 Python 패키지 설치 프로그램(pip3)을 통해 추가 모듈을 설치합니다.

--additional-python-modules 파라미터를 사용하여 C 기반 언어로 작성된 Python 라이브러리를 설치할 수도 있습니다.

해결 방법

Python 모듈 설치 또는 업데이트

AWS Glue 작업을 위한 추가 Python 모듈을 설치하려면 다음 단계를 완료하십시오.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 Jobs를 선택합니다.
  3. Python 모듈을 추가하려는 작업을 선택합니다.
  4. 작업을 선택한 다음, 작업 편집을 선택합니다.
  5. 보안 구성, 스크립트 라이브러리 및 작업 파라미터(선택 사항) 섹션을 확장합니다.
  6. 작업 파라미터에서 다음을 수행합니다.
    --additional-python-modules를 입력합니다.
    에 추가하려는 모듈의 쉼표로 구분된 목록을 입력합니다.
  7. 저장을 선택합니다.

예를 들어 PyMySQL 버전 1.0.2와 자연어 툴킷(NLTK) 버전 3.6.2라는 두 개의 새 모듈을 추가하려고 한다고 가정해 보겠습니다. 인터넷에서 PyMySQL 모듈을 설치하고 Amazon Simple Storage Service(Amazon S3) 버킷에서 NLTK 모듈을 설치합니다. 이 경우 --additional-python-modules 파라미터 키의 값은 pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl입니다.

일부 모듈은 다른 모듈에 종속됩니다. 이러한 모듈을 설치하거나 업데이트하는 경우 해당 모듈의 기반이 되는 다른 모듈도 다운로드해야 합니다. 따라서 모듈을 설치하거나 업데이트하려면 인터넷에 연결되어 있어야 합니다. 인터넷에 액세스할 수 없는 경우 AWS Glue 2.0을 사용하여 Spark ETL 워크로드용 휠에서 Python 모듈 구축을 참조하십시오.

각 AWS Glue 버전에 기본적으로 포함되는 Python 모듈 목록은 AWS Glue에 이미 제공된 Python 모듈을 참조하십시오.

C 기반 Python 모듈 설치

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AWS Glue는 --additional-python-modules 파라미터를 사용하여 C로 작성된 라이브러리 및 확장을 설치하는 것도 지원합니다. 그러나 spacygrpc와 같은 일부 Python 모듈을 설치하려면 루트 권한이 필요합니다. AWS Glue는 패키지 설치 중에 루트 액세스를 제공하지 않습니다. 이 문제를 해결하려면 바이너리를 AWS Glue와 호환되는 휠로 사전 컴파일하고 해당 휠을 설치해야 합니다.

C 기반 언어로 라이브러리를 컴파일하려면 컴파일러가 대상 운영 체제 및 프로세서 아키텍처와 호환되어야 합니다. 라이브러리가 다른 운영 체제 또는 프로세서 아키텍처에서 컴파일된 경우 휠이 AWS Glue에 설치되지 않습니다. AWS Glue는 관리형 서비스이므로 클러스터 액세스를 사용하여 이러한 종속 요소를 개발할 수 없습니다.

루트 권한이 필요한 C 기반 Python 모듈을 미리 컴파일하려면 다음 단계를 완료하십시오.

  1. 라이브러리를 위한 충분한 볼륨 공간을 갖춘 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스를 시작합니다.

  2. EC2 인스턴스에 Docker를 설치하고 비 sudo 액세스를 설정한 다음 Docker를 시작합니다. 이렇게 하려면 다음 명령을 실행하십시오.

    Docker 설치:

    sudo yum install docker -y

    비 sudo 액세스 설정:

    sudo usermod -a -G docker ec2-user

    Docker 시작:

    sudo service docker start
  3. 모듈에 대한 Dockerfile 파일을 생성합니다. 예를 들어 grpcio 모듈을 설치하려면 dockerfile_grpcio라는 파일을 생성하고 다음 내용을 파일에 복사합니다.

    \# Base for AWS Glue
    FROM amazonlinux
    RUN yum update -y
    RUN yum install shadow-utils.x86\_64 -y
    RUN yum install -y java-1.8.0-openjdk.x86\_64
    RUN yum install -y python3
    RUN yum install -y cython doxygen numpy scipy gcc autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++
    # Additional components needed for grpcio
    WORKDIR /root
    RUN yum install python3-devel -y
    RUN yum install python-devel -y
    RUN pip3 install wheel
    # Install grpcio and related modules
    RUN pip3 install Cython
    RUN pip3 install cmake scikit-build
    RUN pip3 install grpcio
    # Create a directory for the wheel
    RUN mkdir wheel\_dir
    # Create the wheel
    RUN pip3 wheel grpcio -w wheel\_dir
  4. docker build를 실행하여 Dockerfile 빌드:

    docker build -f dockerfile\_grpcio .
  5. Docker 데몬을 다시 시작:

    sudo service docker restart

    docker build 명령이 완료되면 Docker 이미지 ID가 포함된 성공 메시지가 표시됩니다. 예를 들어 "Successfully built 1111222233334444"입니다. 다음 단계에서 사용할 Docker 이미지 ID를 기록해 둡니다.

  6. Docker 컨테이너에서 .whl 휠 파일을 추출합니다. 이렇게 하려면 다음 명령을 실행하십시오.

    도커 이미지 ID 가져오기:

    docker image ls

    컨테이너를 실행하되 1111222233334444를 도커 이미지 ID로 바꿉니다.

    docker run -dit 111122223334444

    휠 파일의 위치를 확인하고 휠 파일의 이름을 검색하되 5555666677778888을 컨테이너 ID로 바꿉니다.

    docker exec -t -i 5555666677778888 ls /root/wheel\_dir/

    Docker 컨테이너에서 Amazon EC2로 휠 복사:

    docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .

    참고: doc-example-wheel을 생성된 휠 파일의 이름으로 바꾸십시오.

  7. 휠을 Amazon S3에 업로드하려면 다음 명령을 실행합니다.

    aws s3 cp doc-example-wheel s3://path/to/wheel/
    aws s3 cp grpcio-1.32.0-cp37-cp37m-linux\_x86\_64.whl s3://aws-glue-add-modules/grpcio/

    참고: grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl을 Python 패키지 파일의 이름으로 바꾸십시오.

  8. AWS Glue 콘솔을 엽니다.

  9. AWS Glue ETL 작업의 경우 작업 파라미터 아래에 다음을 입력합니다.
    --additional-python-modules를 입력합니다.
    s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl을 입력합니다.

관련 정보

AWS Glue와 함께 Python 라이브러리 사용

AWS 공식
AWS 공식업데이트됨 한 달 전