本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Docker 以搭配 Amazon EMR叢集使用
Amazon EMR 6.x 支援 Hadoop 3,允許 直接在 Amazon EMR叢集上或在 Docker 容器內YARN NodeManager 啟動容器。Docker 容器提供執行應用程式程式碼的自訂執行環境。自訂執行環境與 YARN NodeManager 和其他應用程式的執行環境隔離。
Docker 容器可以包含由應用程式使用的程式庫,也可以提供不同版本的原生工具和程式庫,如 R 和 Python。您可以使用熟悉的 Docker 工具來為您的應用程式定義程式庫和執行時間依存項目。
Amazon EMR 6.x 叢集預設為允許YARN應用程式使用 Docker 容器執行,例如 Spark。若要自訂容器組態,請在 /etc/hadoop/conf
目錄中編輯可用的 yarn-site.xml
和 container-executor.cfg
檔案裡定義的 Docker 支援選項。如需有關每個組態選項及其使用方式的詳細資訊,請參閱使用 Docker 容器啟動應用程式
您可以選擇在提交任務時使用 Docker。使用下列變數來指定 Docker 執行時間和 Docker 影像。
YARN_CONTAINER_RUNTIME_TYPE=docker
YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={
DOCKER_IMAGE_NAME
}
當您使用 Docker 容器執行YARN應用程式時, 會YARN下載您在提交任務時指定的 Docker 映像。若要YARN讓 解析此 Docker 映像,必須使用 Docker 登錄檔進行設定。Docker 登錄檔的組態選項,取決於您使用公有子網路或私有子網路來部署叢集。
Docker 登錄檔
Docker 登錄檔是 Docker 影像的儲存和分配系統。對於 Amazon,EMR我們建議您使用 Amazon ECR,這是完全受管的 Docker 容器登錄檔,可讓您建立自己的自訂映像,並以高可用性和可擴展的架構託管這些映像。
部署考量
Docker 登錄檔需要從叢集中的每個主機進行網路存取。這是因為當您YARN的應用程式在叢集上執行時,每個主機都會從 Docker 登錄檔下載映像。這些網路連線需求可能會限制 Docker 登錄檔的選擇,取決於您是否將 Amazon EMR叢集部署到公有或私有子網路。
公有子網路
在公有子網路中部署EMR叢集時,執行的節點YARN NodeManager 可以直接存取網際網路上可用的任何登錄檔。
私有子網路
在私有子網路中部署EMR叢集時,執行的節點YARN NodeManager 無法直接存取網際網路。Docker 映像可以在 Amazon 中託管ECR,並透過 存取 AWS PrivateLink。
如需如何在ECR私有子網路案例中使用 AWS PrivateLink 允許存取 Amazon 的詳細資訊,請參閱AWS PrivateLink 設定 Amazon ECS和 Amazon ECR
設定 Docker 登錄檔
若要將 Docker 登錄檔與 Amazon 搭配使用EMR,您必須設定 Docker 信任您要用來解析 Docker 映像的特定登錄檔。預設信任登錄檔是本機 (私有) 和 centos。若要使用其他公有儲存庫或 Amazon ECR,您可以使用/etc/hadoop/conf/container-executor.cfg
EMR分類container-executor
金鑰API來覆寫 中的docker.trusted.registries
設定。
下列範例示範如何設定叢集,以信任名為 的公有儲存庫your-public-repo
和ECR登錄端點 123456789123.dkr.ecr.us-east-1.amazonaws.com
。如果您使用 ECR,請將此端點取代為您的特定ECR端點。
[ { "Classification": "container-executor", "Configurations": [ { "Classification": "docker", "Properties": { "docker.trusted.registries": "local,centos,
your-public-repo
,123456789123.dkr.ecr.us-east-1.amazonaws.com", "docker.privileged-containers.registries": "local,centos,your-public-repo,123456789123.dkr.ecr.us-east-1.amazonaws.com" } } ] } ]
若要使用 AWS Command Line Interface (AWS CLI) 使用此組態啟動 Amazon EMR 6.0.0 叢集,請使用上述 ontainer-executor JSON組態container-executor.json
的內容建立名為 的檔案。然後,使用下列命令來啟動叢集。
export KEYPAIR=<
Name of your Amazon EC2 key-pair
> export SUBNET_ID=<ID of the subnet to which to deploy the cluster
> export INSTANCE_TYPE=<Name of the instance type to use
> export REGION=<Region to which to deploy the cluster
> aws emr create-cluster \ --name "EMR-6.0.0" \ --region $REGION \ --release-label emr-6.0.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole \ --ec2-attributes KeyName=$KEYPAIR,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=$SUBNET_ID \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=$INSTANCE_TYPE InstanceGroupType=CORE,InstanceCount=2,InstanceType=$INSTANCE_TYPE \ --configuration file://container-executor.json
設定 YARN以存取 Amazon ECR on 6.0.0 EMR 及更早版本
如果您是 Amazon 的新手ECR,請遵循 Amazon 入門ECR中的指示,並驗證您是否可從 Amazon EMR叢集中的ECR每個執行個體存取 Amazon。
在 EMR 6.0.0 及更早版本上,若要ECR使用 Docker 命令存取 Amazon,您必須先產生憑證。若要驗證 YARN是否可以從 Amazon 存取映像ECR,請使用容器環境變數YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG
,將參考傳遞至您產生的憑證。
在其中一個核心節點上執行下列命令,以取得ECR帳戶的登入列。
aws ecr get-login --region us-east-1 --no-include-email
此get-login
命令會產生正確的 Docker CLI命令,以執行 來建立憑證。複製並從 get-login
中執行輸出。
sudo docker login -u AWS -p <
password
> https://<account-id
>.dkr.ecr.us-east-1.amazonaws.com
此命令會在 /root/.docker
資料夾中產生一個 config.json
檔案。將此檔案複製到 ,HDFS以便提交至叢集的任務可以使用它向 Amazon 進行身分驗證ECR。
執行以下命令以將 config.json
檔案複製到您的主目錄。
mkdir -p ~/.docker sudo cp /root/.docker/config.json ~/.docker/config.json sudo chmod 644 ~/.docker/config.json
執行下列命令,將 config.json 放入 中,HDFS以便叢集上執行的任務可以使用。
hadoop fs -put ~/.docker/config.json /user/hadoop/
YARN 可以ECR作為 Docker 映像登錄檔存取,並在任務執行期間提取容器。
設定 Docker 登錄檔和 後YARN,您可以使用 Docker 容器執行YARN應用程式。如需詳細資訊,請參閱使用 Amazon 6.0.0 EMR 搭配 Docker 執行 Spark 應用程式。
在 EMR 6.1.0 和更新版本中,您不需要手動設定對 Amazon 的身分驗證ECR。如果在container-executor
分類金鑰中偵測到 Amazon ECR登錄檔,Amazon ECR自動身分驗證功能會啟用,並在您提交具有ECR映像的 Spark 任務時YARN處理身分驗證程序。您可以透過在 yarn-site 中檢查 yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
來確認是否已啟用自動身分驗證。true
如果 docker.trusted.registries
包含ECR登錄檔 ,則會啟用自動身分驗證,並將YARN身分驗證設定設為 URL。
對 Amazon 使用自動身分驗證的先決條件 ECR
EMR 6.1.0 版或更新版本
ECR 組態中包含的登錄檔與叢集位於相同的區域
IAM 具有取得授權權杖和提取任何映像許可的角色
如需詳細資訊,請參閱使用 Amazon 設定ECR。
如何啟用自動身分驗證
請依照 設定 Docker 登錄檔 將 Amazon ECR登錄檔設定為信任的登錄檔,並確認 Amazon ECR儲存庫和叢集位於相同區域。
若要在信任的ECR登錄檔中未設定登錄檔時啟用此功能,請使用組態分類來yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
設定為 true
。
如何停用自動身分驗證
根據預設,如果在信任的ECR登錄檔中未偵測到 Amazon 登錄檔,則自動身分驗證會停用。
若要停用自動身分驗證,即使 Amazon ECR登錄檔已在信任的登錄檔中設定,請使用組態分類來yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
設定為 false
。
如何檢查叢集上是否已啟用自動身分驗證
在主節點上,使用 vi
等文字編輯器檢視檔案內容:vi /etc/hadoop/conf.empty/yarn-site.xml
。檢查 yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
的值。