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

4분 분량
0

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. 탐색 창에서 Jobs를 선택합니다.
  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로 작성된 라이브러리 및 확장 모듈은 --additional-python-modules 옵션을 사용하여 AWS Glue 2.0에서도 지원됩니다. 그러나 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 액세스를 설정한 다음 Docker를 시작합니다.

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

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

docker build 명령이 완료되면 Docker 이미지 ID와 함께 성공 메시지가 표시됩니다. (예: “Successfully built 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 .

위 명령의 다음 값을 반드시 바꿔야 합니다.

  • 1111222233334444를 Docker 이미지 ID로 대체
  • 5555666677778888를 컨테이너 ID로 대체
  • 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을 생성된 휠 파일의 이름으로 대체
  • grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl을 Python 패키지 파일의 이름으로 대체

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 라이브러리를 사용하려면 어떻게 해야 하나요?를 참조하세요.


관련 정보

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

AWS 공식
AWS 공식업데이트됨 2년 전