翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EMRクラスターで使用するように Docker を設定する
Amazon EMR 6.x は Hadoop 3 をサポートしています。これにより、 YARN NodeManager は Amazon EMRクラスターまたは Docker コンテナ内でコンテナを直接起動できます。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 のセットアップ AWS PrivateLink ECS」、および「Amazon 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 にアクセスできることを確認します。
EMR 6.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 アプリケーションを実行する」を参照してください。
6.1.0 EMR 以降では、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
の値を確認します。