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

최종 업데이트 날짜: 2022년 3월 11일

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

해결 방법

AWS Glue 버전 2.0을 사용하면 작업 수준에서 추가 Python 모듈 또는 다른 버전을 설치할 수 있습니다. 새 모듈을 추가하거나 기존 모듈의 버전을 변경하려면 쉼표로 구분된 Python 모듈 목록을 포함하는 값과 함께 —additional-python-modules 작업 파라미터 키를 사용합니다. 이렇게 하면 AWS Glue 2.0 ETL 작업에서 Python 패키지 설치 프로그램(pip3)을 사용하여 추가 모듈을 설치할 수 있습니다.

AWS Glue 작업에 대한 추가 Python 모듈을 설치하려면 다음을 수행합니다.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 작업을 선택합니다.
  3. Python 모듈을 추가할 작업을 선택합니다.
  4. 작업을 선택한 다음 작업 편집을 선택합니다.
  5. 보안 구성, 스크립트 라이브러리 및 작업 파라미터(선택 사항) 섹션을 확장합니다.
  6. 작업 파라미터에서 다음을 수행합니다.
    --additional-python-modules을 입력합니다.
    pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl을 입력합니다.
  7. 저장을 선택합니다.

다음 단계에서는 두 개의 서로 다른 모듈을 설치하는 예를 제공합니다.

  • 인터넷을 통한 PyMySQL
  • Amazon Simple Storage Service(Amazon S3)의 휠 파일에서 자연어 도구 키트(NLTK)

새 모듈을 설치하거나 기존 모듈을 업데이트하려면 모듈 관련 종속성을 다운로드해야 합니다. 즉, 이러한 작업 중 하나를 완료하려면 인터넷 액세스가 필요합니다. 인터넷에 액세스할 수 없는 경우 AWS Glue 2.0을 사용하여 Spark ETL 워크로드용 휠에서 Python 모듈 빌드를 참조하세요.

AWS Glue 2.0에서 이미 제공되는 추가 Python 모듈 목록은 AWS Glue 버전 2.0에서 이미 제공된 Python 모듈을 참조하세요.

C로 작성된 라이브러리 및 확장 모듈은 AWS Glue 2.0에서도 --additional-python-mudouels 옵션과 함께 지원됩니다. 그러나 spacygrpc와 같은 Python 모듈의 하위 집합에 설치하려면 루트 권한이 필요합니다. 루트 권한이 없으면 설치 중에 해당 모듈의 컴파일이 실패합니다. AWS Glue는 패키지 설치 중에 루트 액세스를 제공하지 않습니다. 해결 방법은 바이너리를 AWS Glue와 호환되는 휠로 사전 컴파일하고 해당 휠을 설치하는 것입니다.

C 기반 언어로 라이브러리를 컴파일하려면 컴파일러가 대상 운영 체제 및 프로세서 아키텍처와 호환되어야 합니다. 라이브러리가 다른 운영 체제 또는 프로세서 아키텍처에 대해 컴파일되면 휠이 AWS Glue에 설치되지 않습니다. AWS Glue는 관리형 서비스이므로 이러한 종속성을 개발하는 데 클러스터 액세스를 사용할 수 없습니다. 루트 권한이 필요한 C 기반 Python 모듈을 미리 컴파일하려면 다음을 수행하세요.

참고: 이 단계에서는 grpcio 모듈을 설치하는 예제를 제공합니다.

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

2.    인스턴스에 Docker 컨테이너를 설치하고 비 sudo 액세스를 설정한 다음 도커를 시작합니다.

sudo yum install docker -y
sudo usermod -a -G docker ec2-user
sudo service docker start

3.    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.    도커 빌드를 실행하여 Dockerfile을 구축합니다. 다음 명령을 실행하여 Docker 데몬을 다시 시작합니다.

$ sudo service docker restart
$ docker build -f dockerfile_grpcio .

도커 빌드 명령이 완료되면 Docker 이미지 ID와 함께 성공 메시지가 표시됩니다. 예를 들면, ‘1111222233334444를 성공적으로 구축했습니다.’ 입니다. 다음 단계에서 사용할 Docker 이미지 ID를 기록해 둡니다.

5.    Docker 컨테이너에서 휠 파일을 추출합니다. 다음 명령을 실행하여 .whl 파일을 추출합니다.

# Get the docker image ID
$ docker image ls

# Run the container
$ docker run -dit 111122223334444

# Verify the location of the wheel file and retrieve the name of the wheel file
$ docker exec -t -i 5555666677778888 ls /root/wheel_dir/

# Copy the wheel out of docker to EC2
$ docker cp 5555666677778888:/root/wheel_dir/doc-example-wheel .

앞의 명령을 다음 값으로 교체합니다.

  • Docker 이미지 ID가 있는 1111222233334444
  • 컨테이너 ID가 있는 5555666677778888
  • 생성된 휠 파일의 이름이 있는 doc-example-wheel

6.    다음 명령을 실행하여 휠을 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/

앞의 명령을 다음 값으로 교체합니다.

  • 생성된 휠 파일의 이름이 있는 doc-example-wheel
  • Python 패키지 파일 이름이 있는grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl

7.    AWS Glue ETL 작업의 경우 AWS Glue 콘솔의 작업 파라미터에서 다음을 수행합니다. --additional-python-modules를 입력합니다.
s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl을 입력합니다.
참고: grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl을 Python 패키지 파일 이름으로 교체해야 합니다.

중요: AWS Glue 버전 0.9 및 1.0은 C로 작성된 Python 모듈을 지원하지 않습니다. AWS Glue 0.9 및 1.0에 외부 Python 라이브러리를 설치하려면 AWS Glue 1.0 또는 0.9 ETL 작업에서 외부 Python 라이브러리를 사용하려면 어떻게 해야 합니까?를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?