翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS PrivateLink for Amazon S3 DistCp を使用してオンプレミスの Hadoop 環境から Amazon S3 にデータを移行する
作成者: Jason Owens (AWS)、Andres Cantor (AWS)、Jeff Klopfenstein (AWS)、Bruno Rocha Oliveira (AWS)、Samuel Schmidt (AWS)
環境:本稼働 | ソース: Hadoop | ターゲット: 任意 |
R タイプ: リプラットフォーム | ワークロード: オープンソース | テクノロジー: ストレージとバックアップ、分析 |
AWS サービス: Amazon S3、Amazon EMR |
[概要]
このパターンは、 AWS PrivateLink for Amazon Simple Storage Service (Amazon S3) DistCpで Apache オープンソースツールを使用して、オンプレミスの Apache Hadoop 環境から Amazon Web Services (AWS) クラウドにほぼすべての量のデータを移行する方法を示しています。パブリックインターネットまたはプロキシソリューションを使用してデータを移行する代わりに、 を使用してAWS PrivateLink 、オンプレミスデータセンターと Amazon S3 Amazon Virtual Private Cloud (Amazon ) 間のプライベートネットワーク接続を介して Amazon S3 にデータを移行できますVPC。Amazon Route 53 でDNSエントリを使用する場合、またはオンプレミス Hadoop クラスターのすべてのノードの /etc/hosts ファイルでエントリを追加すると、自動的に正しいインターフェイスエンドポイントに移動します。
このガイドでは、 DistCp を使用してデータを AWS Cloud に移行する手順について説明します。 DistCp は最も一般的に使用されるツールですが、他の移行ツールも利用できます。例えば、AWSSnowball や AWS Snowmobile などのオフラインAWSツール、または AWS Storage Gateway や などのオンラインAWSツールを使用できますAWS DataSync。さらに、Apache NiFi などの他のオープンソースツールを使用することもできます。
前提条件と制限
前提条件
オンプレミスデータセンターとAWSクラウド間のプライベートネットワーク接続を持つアクティブなAWSアカウント
Hadoop 、 を使用してオンプレミスにインストール DistCp
Hadoop Distributed File System の移行データにアクセスできる Hadoop ユーザー (HDFS)
AWS コマンドラインインターフェイス (AWS CLI)、インストールおよび設定済み
S3 バケットにオブジェクトを入れる権限
制限
Amazon S3 AWS PrivateLink の には、仮想プライベートクラウド (VPC) の制限が適用されます。 Amazon S3 詳細については、「インターフェイスエンドポイントのプロパティと制限、AWS PrivateLink クォータ (AWS PrivateLink ドキュメント)」を参照してください。
AWS PrivateLink for Amazon S3 では、以下はサポートされていません。
アーキテクチャ
ソーステクノロジースタック
ターゲットテクノロジースタック
ターゲット アーキテクチャ
この図は、Hadoop 管理者が DistCp を使用して AWS Direct Connect などのプライベートネットワーク接続を介してオンプレミス環境から Amazon S3 インターフェイスエンドポイントを介して Amazon S3 にデータをコピーする方法を示しています。
AWS サービス
その他のツール
エピック
タスク | 説明 | 必要なスキル |
---|
for Amazon S3 AWS PrivateLink のエンドポイントを作成します。 | AWS マネジメントコンソールにサインインし、Amazon VPCコンソール を開きます。 ナビゲーションペインで [ エンドポイント] を選択し、[Create endpoint (エンドポイントの作成)] を選択します。 [Service category] (サービスカテゴリ) で、[AWS services] (のサービス) を選択します。 検索ボックスに「s3」と入力し、Enter キーを押します。 検索結果で、タイプ列の値がインターフェイス である com.amazonaws.<your-aws-region>.s3 サービス名を選択します。 の場合はVPC、 を選択しますVPC。[Subnet] (サブネット) で、サブネットを選択します。 セキュリティグループ では、443 TCP を許可するセキュリティグループを選択または作成します。 要件に基づいてタグを追加し、[エンドポイントの作成] を選択します。
| AWS 管理者 |
エンドポイントを確認し、DNSエントリを見つけます。 | Amazon VPCコンソール を開き、エンドポイント を選択し、前に作成したエンドポイントを選択します。 詳細タブで、DNS名前の最初のDNSエントリを見つけます。これはリージョンDNSエントリです。このDNS名前を使用すると、 リクエストはアベイラビリティーゾーンに固有のDNSエントリを交互に行います。 [サブネット] タブを選択します。エンドポイントの Elastic Network Interface のアドレスは、各アベイラビリティゾーンで確認できます。
| AWS 管理者 |
ファイアウォールルールとルーティング設定を確認してください。 | ファイアウォールルールが開かれていて、ネットワーク設定が正しく設定されていることを確認するには、Telnet を使用してポート 443 のエンドポイントをテストします。例: $ telnet vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com 443
Trying 10.104.88.6...
Connected to vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com.
...
$ telnet vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com 443
Trying 10.104.71.141...
Connected to vpce-<your-VPC-endpoint-ID>.s3.us-east-2.vpce.amazonaws.com.
注: リージョンエントリを使用する場合、テストに成功すると、Amazon VPCコンソールの選択したエンドポイントのサブネットタブに表示される 2 つの IP アドレスDNSが で交互に が表示されていることがわかります。 | ネットワーク管理者、AWS管理者 |
名前解決の設定を変更します。 | Hadoop が Amazon S3 インターフェイスエンドポイントにアクセスできるように名前解決を設定する必要があります。エンドポイント名自体を使用することはできません。代わりに、<your-bucket-name>.s3.<your-aws-region>.amazonaws.com または *.s3.<your-aws-region>.amazonaws.com を解決する必要があります。この命名制限の詳細については、「Introducing the Hadoop S3A client」(Hadoop ウェブサイト) を参照してください。 次の設定オプションのいずれかを選択します。 オンプレミスを使用してDNS、エンドポイントのプライベート IP アドレスを解決します。すべてのバケットまたは選択したバケットの動作をオーバーライドできます。詳細については、 ( ブログ記事) を使用して Amazon S3 への安全なハイブリッドアクセスの「Option 2: Access Amazon S3 using AWS PrivateLink AWS Domain Name System Response Policy Zones (DNS RPZ)」を参照してください。 オンプレミスを設定DNSして、 のリゾルバーインバウンドエンドポイントにトラフィックを条件付きで転送しますVPC。トラフィックは Route 53 に転送されます。詳細については、Amazon Route 53 Resolver Inbound Endpoints を使用したオンプレミスからのDNSリクエストの転送」「 (AWS ブログ記事) を使用した Amazon S3 への安全なハイブリッドアクセスAWS PrivateLink」を参照してください。 Hadoop クラスター内のすべてのノードの /etc/hosts ファイルを編集します。これはテスト用の一時的な解決策であり、本番環境にはお勧めしません。/etc/hosts ファイルを編集するには、<your-bucket-name>.s3.<your-aws-region>.amazonaws.com または s3.<your-aws-region>.amazonaws.com のエントリを追加します。/etc/hosts ファイルには、1 つのエントリに複数の IP アドレスを指定することはできません。アベイラビリティゾーンのいずれかから 1 つの IP アドレスを選択する必要があります。選択すると、単一障害点になります。
| AWS 管理者 |
Amazon S3 の認証の設定。 | Hadoop を使用して Amazon S3 への認証を行うには、一時的なロール認証情報を Hadoop 環境にエクスポートすることをお勧めします。詳細については、「Authenticating with S3」(Hadoop ウェブサイト) を参照してください。長時間実行されるジョブの場合は、ユーザーを作成し、S3 バケットにのみデータを保存する権限を持つポリシーを割り当てることができます。アクセスキーとシークレットキーは Hadoop に保存でき、 DistCp ジョブ自体と Hadoop 管理者のみがアクセスできます。シークレットの保存について詳しくは、「Storing secrets with Hadoop Credential Providers」(Hadoop ウェブサイト) を参照してください。その他の認証方法の詳細については、AWSIAM「Identity Center (AWSシングルサインオンの後継) のドキュメント」のAWS「アカウントCLIへのアクセスに使用するIAMロールの認証情報を取得する方法」を参照してください。 一時的な認証情報を使用するには、一時的な認証情報を認証情報ファイルに追加するか、以下のコマンドを実行して認証情報を環境にエクスポートします。 export AWS_SESSION_TOKEN=SECRET-SESSION-TOKEN
export AWS_ACCESS_KEY_ID=SESSION-ACCESS-KEY
export AWS_SECRET_ACCESS_KEY=SESSION-SECRET-KEY
従来のアクセスキーとシークレットキーの組み合わせを使用している場合は、以下のコマンドを実行します。 export AWS_ACCESS_KEY_ID=my.aws.key
export AWS_SECRET_ACCESS_KEY=my.secret.key
注: アクセスキーとシークレットキーの組み合わせを使用する場合は、 DistCp コマンドの認証情報プロバイダーを から "org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" に変更します"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider" 。 | AWS 管理者 |
を使用してデータを転送します DistCp。 | DistCp を使用してデータを転送するには、次のコマンドを実行します。 hadoop distcp -Dfs.s3a.aws.credentials.provider=\
"org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-Dfs.s3a.access.key="${AWS_ACCESS_KEY_ID}" \
-Dfs.s3a.secret.key="${AWS_SECRET_ACCESS_KEY}" \
-Dfs.s3a.session.token="${AWS_SESSION_TOKEN}" \
-Dfs.s3a.path.style.access=true \
-Dfs.s3a.connection.ssl.enabled=true \
-Dfs.s3a.endpoint=s3.<your-aws-region>.amazonaws.com \
hdfs:///user/root/ s3a://<your-bucket-name>
注: Amazon AWS PrivateLink Amazon S3 で DistCp コマンドを使用すると、エンドポイントのAWSリージョンが自動的に検出されることはありません。Hadoop 3.3.2 以降のバージョンでは、オプションを有効にして S3 バケットのAWSリージョンを明示的に設定することで、この問題を解決します。詳細については、S3A でオプション fs.s3a.endpoint.region を追加してAWSリージョンを設定する」を参照してください (Hadoop ウェブサイト)。 その他の S3A プロバイダーの詳細については、「General S3A Client configuration」(Hadoop ウェブサイト) を参照してください。例えば、暗号化を使用する場合、暗号化の種類に応じて、上記の一連のコマンドに次のオプションを追加できます。 -Dfs.s3a.server-side-encryption-algorithm=AES-256 [or SSE-C or SSE-KMS]
注: S3A でインターフェイスエンドポイントを使用するには、インターフェイスエンドポイントへの S3 DNS リージョン名 ( などs3.<your-aws-region>.amazonaws.com ) のエイリアスエントリを作成する必要があります。手順については、「Amazon S3 の認証の設定」セクションを参照してください。この回避策は Hadoop 3.3.2 以前のバージョンで必要です。S3A の今後のバージョンでは、この回避策は必要なくなります。 Amazon S3 の署名に問題がある場合は、Signature Version 4 (SigV4) 署名を使用するオプションを追加します。 -Dmapreduce.map.java.opts="-Dcom.amazonaws.services.s3.enableV4=true"
| 移行エンジニア、AWS管理者 |