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 모듈을 설치하려면 다음 단계를 완료하십시오.
- AWS Glue 콘솔을 엽니다.
- 탐색 창에서 Jobs를 선택합니다.
- Python 모듈을 추가하려는 작업을 선택합니다.
- 작업을 선택한 다음, 작업 편집을 선택합니다.
- 보안 구성, 스크립트 라이브러리 및 작업 파라미터(선택 사항) 섹션을 확장합니다.
- 작업 파라미터에서 다음을 수행합니다.
키에 --additional-python-modules를 입력합니다.
값에 추가하려는 모듈의 쉼표로 구분된 목록을 입력합니다.
- 저장을 선택합니다.
예를 들어 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로 작성된 라이브러리 및 확장을 설치하는 것도 지원합니다. 그러나 spacy 및 grpc와 같은 일부 Python 모듈을 설치하려면 루트 권한이 필요합니다. AWS Glue는 패키지 설치 중에 루트 액세스를 제공하지 않습니다. 이 문제를 해결하려면 바이너리를 AWS Glue와 호환되는 휠로 사전 컴파일하고 해당 휠을 설치해야 합니다.
C 기반 언어로 라이브러리를 컴파일하려면 컴파일러가 대상 운영 체제 및 프로세서 아키텍처와 호환되어야 합니다. 라이브러리가 다른 운영 체제 또는 프로세서 아키텍처에서 컴파일된 경우 휠이 AWS Glue에 설치되지 않습니다. AWS Glue는 관리형 서비스이므로 클러스터 액세스를 사용하여 이러한 종속 요소를 개발할 수 없습니다.
루트 권한이 필요한 C 기반 Python 모듈을 미리 컴파일하려면 다음 단계를 완료하십시오.
-
라이브러리를 위한 충분한 볼륨 공간을 갖춘 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스를 시작합니다.
-
EC2 인스턴스에 Docker를 설치하고 비 sudo 액세스를 설정한 다음 Docker를 시작합니다. 이렇게 하려면 다음 명령을 실행하십시오.
Docker 설치:
sudo yum install docker -y
비 sudo 액세스 설정:
sudo usermod -a -G docker ec2-user
Docker 시작:
sudo service docker start
-
모듈에 대한 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
-
docker build를 실행하여 Dockerfile 빌드:
docker build -f dockerfile\_grpcio .
-
Docker 데몬을 다시 시작:
sudo service docker restart
docker build 명령이 완료되면 Docker 이미지 ID가 포함된 성공 메시지가 표시됩니다. 예를 들어 "Successfully built 1111222233334444"입니다. 다음 단계에서 사용할 Docker 이미지 ID를 기록해 둡니다.
-
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을 생성된 휠 파일의 이름으로 바꾸십시오.
-
휠을 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 패키지 파일의 이름으로 바꾸십시오.
-
AWS Glue 콘솔을 엽니다.
-
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 라이브러리 사용