Docker の設定 - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Docker の設定

Amazon EMR 6.x は Hadoop 3 をサポートしています。これにより、 は Amazon EMRクラスターまたは Docker コンテナ内でコンテナを直接起動YARN NodeManager できます。Docker コンテナは、アプリケーションコードを実行するカスタム実行環境を提供します。カスタム実行環境は、 YARN NodeManager およびその他のアプリケーションの実行環境から分離されます。

Docker コンテナには、アプリケーションで使用する特別なライブラリを含めることができます。また、Docker コンテナは、R や Python など、ネイティブツールやライブラリの異なるバージョンを提供できます。使い慣れた Docker ツールを使用して、アプリケーションのライブラリとランタイム依存関係を定義できます。

Amazon EMR 6.x クラスターは、デフォルトで Spark などのYARNアプリケーションが Docker コンテナを使用して実行できるように設定されています。コンテナ設定をカスタマイズするには、/etc/hadoop/conf ディレクトリの yarn-site.xml ファイルと container-executor.cfg ファイルに定義されている Docker サポートオプションを編集します。各設定オプションとその使用方法の詳細については、「Launching Applications Using Docker Containers」を参照してください。

ジョブを送信するときに Docker を使用することを選択できます。Docker ランタイムと Docker イメージを指定するには、次の変数を使用します。

  • YARN_CONTAINER_RUNTIME_TYPE=docker

  • YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={DOCKER_IMAGE_NAME}

Docker コンテナを使用してYARNアプリケーションを実行すると、 はジョブの送信時に指定した Docker イメージYARNをダウンロードします。がこの Docker イメージを解決YARNするには、Docker レジストリで設定する必要があります。Docker レジストリの設定オプションは、クラスターのデプロイにパブリックサブネットとプライベートサブネットのどちらを使用するかによって異なります。

Docker レジストリ

Docker レジストリは、Docker イメージのストレージおよびディストリビューションシステムです。Amazon EMRではECR、Amazon を使用することをお勧めします。Amazon はフルマネージド型の Docker コンテナレジストリで、独自のカスタムイメージを作成し、可用性が高くスケーラブルなアーキテクチャでホストできます。

デプロイに関する考慮事項

Docker レジストリは、クラスター内の各ホストからのネットワークアクセスを必要とします。これは、YARNアプリケーションがクラスターで実行されているときに、各ホストが Docker レジストリからイメージをダウンロードするためです。これらのネットワーク接続要件により、Amazon EMRクラスターをパブリックサブネットとプライベートサブネットのどちらにデプロイするかによって、Docker レジストリの選択が制限される場合があります。

[Public subnet] (パブリックサブネット)

EMR クラスターがパブリックサブネットにデプロイされると、実行中のノードYARN NodeManager はインターネット経由で利用可能な任意のレジストリに直接アクセスできます。

プライベートサブネット

EMR クラスターがプライベートサブネットにデプロイされている場合、実行中のノードはインターネットに直接アクセスYARN NodeManager できません。Docker イメージは Amazon でホストECRし、 からアクセスできます AWS PrivateLink。

AWS PrivateLink を使用してプライベートサブネットシナリオECRで Amazon へのアクセスを許可する方法の詳細については、「Amazon のセットアップECS」、「Amazon AWS PrivateLink ECR」を参照してください。

Docker レジストリの設定

Amazon で Docker レジストリを使用するにはEMR、Docker イメージの解決に使用する特定のレジストリを信頼するように Docker を設定する必要があります。デフォルトの信頼レジストリは、ローカル (プライベート) と centos です。他のパブリックリポジトリまたは Amazon を使用するにはECR、分類container-executorキーAPIでEMR分類/etc/hadoop/conf/container-executor.cfgを使用して docker.trusted.registriesの設定を上書きできます。

次の例は、 という名前のパブリックリポジトリとレジストリECRエンドポイント your-public-repoの両方を信頼するようにクラスターを設定する方法を示しています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

6.0.0 EMR 以前ECRで Amazon にアクセスYARNするための の設定

Amazon を初めて使用する場合はECR、「Amazon の開始方法ECR」の手順に従って、Amazon EMRクラスター内の各インスタンスECRから Amazon にアクセスできることを確認します。

6EMR.0.0 以前では、Docker コマンドECRを使用して 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 は、ジョブの実行中に Docker イメージレジストリECRとして にアクセスし、コンテナをプルできます。

Docker レジストリと を設定したらYARN、Docker コンテナを使用してYARNアプリケーションを実行できます。詳細については、「Amazon 6.0.0 を使用して Docker で Spark EMR アプリケーションを実行する」を参照してください。

6EMR.1.0 以降では、Amazon への認証を手動で設定する必要はありませんECR。container-executor 分類キーで Amazon ECRレジストリが検出されると、Amazon ECR 自動認証機能がアクティブ化され、ECRイメージを使用して Spark ジョブを送信するときに認証プロセスがYARN処理されます。yarn-site で yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled を調べると、自動認証が有効になっているかどうかを確認することができます。にECRレジストリ docker.trusted.registriesが含まれているtrue場合、自動認証が有効になり、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 の値を確認します。