사용자 위장 - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사용자 위장

Jupyter Notebook 내에서 실행되는 Spark 작업은 Amazon EMR에서 실행되는 동안 여러 애플리케이션을 통과합니다. 예를 들어, 사용자가 Jupyter 내에서 실행하는 코드 PySpark 3개를 Sparkmagic이 수신하면 Sparkmagic은 HTTP POST 요청을 사용하여 해당 코드를 Livy에 제출하고, Livy는 YARN을 사용하여 클러스터에서 실행할 Spark 작업을 생성합니다.

기본적으로 이런 방식으로 제출된 YARN 작업은 최초로 작업을 시작한 사용자와 상관없이 사용자 livy로서 실행됩니다. 사용자 가장을 설정함으로써 노트북 사용자의 사용자 ID 또한 YARN 작업과 관련된 사용자가 되도록 설정할 수 있습니다. 작업을 사용자 shirley와 연결된 diegolivy 모두로 시작한다기보다는, 각 사용자가 시작하는 작업이 각각 shirleydiego와 연결되는 것입니다. 이렇게 하면 Jupyter 사용량을 감사하고 조직 내에서 애플리케이션을 관리할 수 있습니다.

이러한 구성은 Sparkmagic의 Livy에 대한 호출이 인증되지 않는 경우에만 지원됩니다. 하둡 애플리케이션과 Livy 사이에 인증 또는 프록시 설정 계층을 제공하는 애플리케이션(Apache Knox Gateway 등)은 지원되지 않습니다. 이 섹션의 사용자 사칭 구성 단계에서는 JupyterHub 및 Livy가 동일한 마스터 노드에서 실행되고 있다고 가정합니다. 애플리케이션에 별도의 클러스터가 있는 경우 Livy 마스터 노드에 HDFS 디렉터리가 생성되도록 3단계: 사용자를 위한 HDFS 홈 디렉터리 생성을 수정할 필요가 있습니다.

1단계: Livy 구성

다음 예와 같이 클러스터를 생성하여 Livy 사용자 가장을 활성화할 때 livy-confcore-site 구성 분류를 사용합니다. 구성 분류를 JSON으로 저장한 다음 클러스터를 생성할 때 참조하거나 구성 분류 인라인을 지정합니다. 자세한 정보는 애플리케이션 구성을 참조하세요.

[ { "Classification": "livy-conf", "Properties": { "livy.impersonation.enabled": "true" } }, { "Classification": "core-site", "Properties": { "hadoop.proxyuser.livy.groups": "*", "hadoop.proxyuser.livy.hosts": "*" } } ]

2단계: 사용자 추가

PAM 또는 LDAP를 사용하여 JupyterHub 사용자를 추가합니다. 자세한 내용은 PAM 인증 사용LDAP 인증 사용 섹션을 참조하세요.

3단계: 사용자를 위한 HDFS 홈 디렉터리 생성

마스터 노드에 연결하여 사용자를 생성했습니다. 아직 마스터 노드에 연결된 상태에서 아래 콘텐츠를 복사하여 스크립트 파일에 저장합니다. 스크립트는 마스터 노드의 각 JupyterHub 사용자에 대해 HDFS 홈 디렉터리를 생성합니다. 스크립트는 사용자가 기본 관리자 사용자 ID, jovyan을 사용하는 것으로 가정합니다.

#!/bin/bash CURL="curl --silent -k" HOST=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname) admin_token() { local user=jovyan local pwd=jupyter local token=$($CURL https://$HOST:9443/hub/api/authorizations/token \ -d "{\"username\":\"$user\", \"password\":\"$pwd\"}" | jq ".token") if [[ $token != null ]]; then token=$(echo $token | sed 's/"//g') else echo "Unable to get Jupyter API Token." exit 1 fi echo $token } # Get Jupyter Admin token token=$(admin_token) # Get list of Jupyter users users=$(curl -XGET -s -k https://$HOST:9443/hub/api/users \ -H "Authorization: token $token" | jq '.[].name' | sed 's/"//g') # Create HDFS home dir for user in ${users[@]}; do echo "Create hdfs home dir for $user" hadoop fs -mkdir /user/$user hadoop fs -chmod 777 /user/$user done