Amazon EMR 및 Amazon EMR Serverless 클러스터에 Python 라이브러리를 설치하고 문제를 해결하고 싶습니다.
해결 방법
Amazon EMR 클러스터에 Python 라이브러리 설치
Amazon EMR 클러스터에 Python 라이브러리를 설치하려면 부트스트랩 작업을 사용하세요.
Amazon EMR은 Apache BigTop 배포 메커니즘인 puppet을 사용하여 인스턴스에서 애플리케이션을 구성하고 초기화합니다. 인스턴스 컨트롤러는 모든 클러스터 인스턴스에서 실행되는 Amazon EMR 소프트웨어 구성 요소입니다. 인스턴스 컨트롤러는 인스턴스 구성을 기반으로 인스턴스를 초기화하고 프로비저닝합니다.
클러스터 시작 시 NodeProvisioner을 시작하려면 인스턴스 컨트롤러가 프로비저닝 노드 스크립트 /usr/share/aws/emr/node-provisioner/bin/provision-node를 실행합니다. 그런 다음 NodeProvisioner는 노드 및 클러스터 구성을 위한 모든 Amazon EMR 배포 애플리케이션을 프로비저닝합니다. NodeProvisioner는 각 클러스터 노드에서 다른 모든 부트스트랩 작업을 실행한 후 실행되는 최종 부트스트랩 작업입니다.
최신 Amazon EMR 클러스터의 경우, Amazon EMR이 클러스터 생성 시 지정된 애플리케이션을 설치하기 전에 부트스트랩 작업이 실행됩니다. 또한 부트스트랩 작업은 클러스터 노드가 데이터를 처리하기 전에 실행됩니다. 실행 중인 클러스터에 노드를 추가하면 해당 노드에서 부트스트랩 작업이 실행됩니다. 사용자 지정 부트스트랩 작업을 생성하고 클러스터를 생성할 때 설치할 애플리케이션을 지정할 수 있습니다.
Amazon EMR Serverless 클러스터에 Python 라이브러리 설치
Python 라이브러리를 설치하고 Spark 작업 및 노트북 내에서 해당 기능을 사용하려면 사용 사례에 따라 다음 방법 중 하나를 사용하세요.
Python 라이브러리 문제 해결
부트스트랩 작업으로 설치되는 Python 라이브러리는 Amazon EMR 기본 라이브러리로 재정의될 수 있습니다. 이 문제를 해결하려면 지연된 부트스트랩 작업 또는 2단계 부트스트랩 작업을 실행 코드로 만드세요. 또는 NODEPROVISIONSTATE SUCCESSFUL 메시지를 받은 후 패키지를 설치하세요.
다음 부트스트랩 작업은 애플리케이션 프로비저닝 단계 이후에 라이브러리를 업그레이드합니다. 이 스크립트를 백그라운드에서 실행되고 클러스터 프로비저닝이 계속되도록 종료하는 부트스트랩 스크립트로 추가합니다. 이 스크립트는 노드 프로비저닝을 계속 모니터링하고 프로비저닝 후 라이브러리를 업그레이드합니다.
NumPy 버전을 업그레이드하는 예제 스크립트:
#!/bin/bash
set -x
cat > /var/tmp/fix-bootstap.sh <<'EOF'
#!/bin/bash
set -x
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
echo "Running my post provision bootstrap"
# your code here
sudo /mnt/notebook-env/bin/pip install pandas==1.3.5
sudo /mnt/notebook-env/bin/pip install boto==2.49.0
sudo /mnt/notebook-env/bin/pip install boto3==1.25.0
exit
else
echo "Sleeping Till Node is Provisioned"
sleep 10
fi
done
EOF
chmod +x /var/tmp/fix-bootstap.sh
nohup /var/tmp/fix-bootstap.sh 2>&1 &
참고: Python 패키지를 실행하는 YARN 컨테이너는 이전 해결 방법으로 설치할 수 있는 업데이트된 패키지를 사용하지 않을 수 있습니다. 따라서 업데이트된 패키지를 설치하려고 하면 모듈을 찾을 수 없음 오류가 발생합니다. 모듈을 찾을 수 없음 오류를 방지하려면 nodemanager 서비스 상태를 폴링하세요. 그런 다음 nodemanager가 시작될 때 원하는 부트스트랩 작업을 실행합니다.