Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
如何在 AWS Glue ETL 工作中使用外部 Python 程式庫?
我想在 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 主控台。
- 在導覽窗格中,選擇工作。
- 選取您想要在其中新增 Python 模組的工作。
- 選擇動作,然後選擇編輯工作。
- 展開安全組態、指令碼程式庫和工作參數 (選用) 區段。
- 在工作參數下,執行下列動作:
對於索引鍵,輸入 --additional-python-modules。
對於值,請輸入您要新增之模組的以逗號分隔清單。 - 選擇 Save (儲存)。
例如,假設您想新增兩個新模組,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 從 wheel 為 Spark ETL 工作負載建立 Python 模組。
如需每個 AWS Glue 版本中預設包含的 Python 模組清單,請參閱 AWS Glue 中已提供的 Python 模組。
安裝 C 語言 Python 模組
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
AWS Glue 還支援使用 C 編寫的程式庫和擴充功能,並具有 --additional-python-modules 參數。但是,部分 Python 模組 (例如 spacy 和 grpc) 需要根使用者權限才可安裝。AWS Glue 不會在套件安裝期間提供根使用者存取權。若要解決此問題,請將二進位檔案預先編譯成與 AWS Glue 相容的 wheel,然後安裝該 wheel。
若要以 C 語言編譯程式庫,編譯器必須與目標作業系統及處理器架構相容。如果程式庫是根據不同的作業系統或處理器架構編譯,則 wheel 並未安裝在 AWS Glue 中。因為 AWS Glue 為受管服務,所以不會提供叢集存取權來開發這些相依項。
若要預先編譯需要 root 權限的 C 語言 Python 模組,請完成下列步驟:
-
啟動具有足夠磁碟區空間可供程式庫使用的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體 (Amazon Linux 2 AMI)。
-
在 EC2 執行個體上安裝 Docker,設定非 sudo 存取權,然後啟動 Docker。若要這麼做,請執行下列命令:
安裝 Docker:
sudo yum install docker -y
設定 sudo 存取權:
sudo su
啟動 Docker:
sudo service docker start
-
為模組建立一個 Dockerfile 檔案。例如,若要安裝 grpcio 模組,請建立名為 dockerfile_grpcio 的檔案,然後將下列內容複製到檔案中:
FROM amazonlinux:2 \# Install required repositories and tools RUN yum update -y RUN yum install shadow-utils.x86\_64 -y \# Install Java 8 (corrected package name) RUN yum install -y java-1.8.0-openjdk.x86\_64 \# Install Python 3.7 WORKDIR /opt RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel wget tar make \# Install Python 3.7 RUN wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz RUN tar xzf Python-3.7.12.tgz WORKDIR /opt/Python-3.7.12 RUN ./configure --enable-optimizations RUN make altinstall RUN ln -sf /usr/local/bin/python3.7 /usr/bin/python3 RUN ln -sf /usr/local/bin/pip3.7 /usr/bin/pip3 \# Verify Python version RUN python3 --version RUN pip3 --version \# Install other dependencies RUN yum install -y doxygen autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++ RUN yum install -y python3-devel \# Install Python packages RUN pip3 install --upgrade pip RUN pip3 install wheel RUN pip3 install cython numpy scipy RUN pip3 install cmake scikit-build \# Create wheel directory and install grpcio WORKDIR /root RUN mkdir wheel\_dir RUN pip3 install Cython RUN pip3 install grpcio RUN pip3 wheel grpcio -w wheel\_dir
-
執行 docker 組建以建置您的 Dockerfile:
docker build -f dockerfile\_grpcio .
-
重新啟動 Docker 常駐程式:
sudo service docker restart
當 docker 建置命令完成後,您會收到包含您的 Docker 映像檔 ID 的成功訊息。例如 「成功建置 1111222233334444」。記下要在下一步中使用的 Docker 映像檔 ID。
-
從 Docker 容器中擷取 .whl wheel 檔案。若要這麼做,請執行下列命令:
取得 Docker 映像檔 ID:
docker image ls
執行容器,但使用您的 Docker 映像檔 ID 替換 1111222233334444:
docker run -dit 111122223334444
驗證 wheel 檔案的位置並擷取 wheel 檔案的名稱,但是用您的容器 ID 取代 5555666677778888:
docker exec -t -i 5555666677778888 ls /root/wheel\_dir/
將 wheel 從 Docker 容器複製到 Amazon EC2:
docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .
**注意:**請使用產生成的 wheel 檔案名稱取代 doc-example-wheel
-
若要將 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/
**注意:**請使用 Python 套件檔案的名稱取代 grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl。
-
開啟 AWS Glue 主控台。
-
對於 AWS Glue ETL 工作,請在 Job parameters (工作參數) 下輸入下列項目:
對於索引鍵,輸入 --additional-python-modules。
對於值,請輸入 s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl。
相關資訊
相關內容
- 已提問 2 年前lg...