EMR 클러스터에 Python 라이브러리를 설치하려면 어떻게 해야 하나요?

3분 분량
0

Amazon EMR 클러스터에 외부 Python 라이브러리를 설치하고 싶습니다.

간략한 설명

부트스트랩 작업을 사용하여 Python 라이브러리를 설치할 수 있습니다.

EMR은 Apache BigTop에서 사용하는 배포 메커니즘인 puppet을 사용하여 인스턴스에서 애플리케이션을 구성하고 초기화합니다. 인스턴스 컨트롤러는 클러스터의 모든 인스턴스에서 실행되는 EMR의 소프트웨어 구성 요소입니다. 인스턴스 컨트롤러는 인스턴스 구성을 기반으로 인스턴스를 초기화하고 프로비저닝합니다.

인스턴스 컨트롤러는 /usr/share/aws/emr/node-provisioner/bin/provision-node에서 프로비저-노드 스크립트를 실행하여 클러스터 시작 시 NodeProvisioner를 시작합니다. NodeProvisioner는 노드 및 클러스터 구성을 위한 모든 EMR 배포판 애플리케이션을 프로비저닝합니다. NodeProvisioner는 클러스터의 각 노드에서 다른 모든 부트스트랩 작업을 실행한 후에 실행되는 최종 부트스트랩 작업으로 취급됩니다.

해결 방법

최신 EMR 클러스터에서는 Amazon EMR이 클러스터 생성 시 지정된 애플리케이션을 설치하기 전에 부트스트랩 작업이 실행됩니다. 부트스트랩 작업은 클러스터 노드가 데이터 처리를 시작하기 전에 실행됩니다. 실행 중인 클러스터에 노드를 추가하면 부트스트랩 작업도 동일한 방식으로 해당 노드에서 실행됩니다. 사용자 지정 부트스트랩 작업을 생성하고 클러스터를 만들 때 .설치할 애플리케이션을 지정할 수 있습니다. 자세한 내용은 부트스트랩 작업을 생성하여 추가 소프트웨어 설치를 참조하세요.

기본 라이브러리로 재정의되는 부트스트랩 작업으로 설치된 라이브러리 문제 해결

부트스트랩 작업을 사용하여 설치된 라이브러리는 Amazon EMR 기본 라이브러리로 재정의될 수 있습니다. 부트스트랩 스크립트는 클러스터 생성 전과 노드 프로비저닝 전에 실행됩니다. 따라서 라이브러리는 기본 버전으로 재정의될 수 있습니다.

이 문제를 방지하려면 지연된 부트스트랩 작업 또는 2단계 부트스트랩 작업을 실행 코드로 만드세요. 또는 NODEPROVISIONSTATE SUCCESSFUL 메시지를 받은 후 패키지를 설치하세요.

다음 부트스트랩 스크립트는 애플리케이션 프로비저닝 단계 후에 라이브러리를 업그레이드합니다. 이 스크립트를 백그라운드에서 실행된 후 종료되는 부트스트랩 스크립트로 추가하여 클러스터 프로비저닝을 계속할 수 있습니다. 이 스크립트는 노드 프로비저닝을 계속 모니터링하고 프로비저닝 후 라이브러리를 업그레이드합니다.

다음 예제 스크립트는 NumPy 버전을 업그레이드합니다.

#!/bin/bash
while true; do
NODEPROVISIONSTATE=\` sed -n '/localInstance [{]/,/[}]/{
/nodeProvisionCheckinRecord [{]/,/[}]/ {
   /status: / { p }
    /[}]/a
   }
  /[}]/a
}'  /emr/instance-controller/lib/info/job-flow-state.txt | awk ' { print \$2 }'\`
        if [ "\$NODEPROVISIONSTATE" == "SUCCESSFUL" ]; then
                     sleep 10;
                echo "Running my post provision bootstrap"
                #your code here
                #Below example lines
                #sudo python3 -m pip uninstall numpy==1.16.5 (this is default version of numpy)
                #sudo python3 -m pip install --upgrade numpy==1.20.1 (new version of numpy)
                exit;
        fi
sleep 10;
done

참고: 경우에 따라 Python 패키지를 실행하는 YARN 컨테이너는 이전 해결 방법을 사용하여 설치할 수 있는 업데이트된 패키지를 사용하지 않을 수 있습니다. 컨테이너가 업데이트된 패키지를 실행하지 않는 경우, 설치를 시도할 때 Module not found 오류가 표시됩니다. 이는 YARN NodeManager 프로세스가 컨테이너 실행을 담당하기 때문입니다. NODEPROVISIONSTATE가 성공하기 전에 NodeManager의 컨테이너가 이미 실행 중이거나 할당되었을 수 있습니다. 이 문제는 오토 스케일링이 자주 사용되는 다중 테넌트 클러스터에서 자주 나타납니다.

nodemanager 서비스의 상태를 폴링하여 모듈을 찾을 수 없음 오류를 방지할 수 있습니다. 그런 다음, nodemanager가 시작하자마자 원하는 부트스트랩 작업을 실행합니다.


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