Amazon EMR からのデータのロード - Amazon Redshift

Amazon EMR からのデータのロード

COPY コマンドを使用することで、クラスターの Hadoop Distributed File System (HDFS) に、固定幅ファイル、文字区切りファイル、CSV ファイル、または JSON 形式ファイルでテキストファイルを書き込むように設定された Amazon EMR クラスターから、データを並列にロードできます。

Amazon EMR からデータをロードするプロセス

このセクションでは、Amazon EMR クラスターからデータをロードする手順について説明します。以下のセクションでは、各ステップで必要な操作の詳細を説明します。

ステップ 1: IAM のアクセス許可を設定する

Amazon EMR クラスターを作成して Amazon Redshift の COPY コマンドを実行するユーザーには、そのための許可が必要です。

IAM のアクセス許可を設定するには
  1. Amazon EMR クラスターを作成するユーザーに以下のアクセス許可を追加します。

    ec2:DescribeSecurityGroups ec2:RevokeSecurityGroupIngress ec2:AuthorizeSecurityGroupIngress redshift:DescribeClusters
  2. COPY コマンドを実行する IAM ロールまたはユーザーに以下のアクセス許可を追加します。

    elasticmapreduce:ListInstances
  3. Amazon EMR クラスターの IAM ロールに次のアクセス許可を追加します。

    redshift:DescribeClusters

ステップ 2: Amazon EMR クラスターを作成する

COPY コマンドでは、Amazon EMR の Hadoop Distributed File System (HDFS) のファイルからデータをロードします。Amazon EMR クラスターを作成する場合には、クラスターの HDFS にデータファイルを出力するようにクラスターを設定する必要があります。

Amazon EMR クラスターを作成するには
  1. Amazon Redshift クラスターと同じ AWS リージョンに Amazon EMR クラスターを作成します。

    Amazon Redshift クラスターが VPC にある場合、Amazon EMR クラスターも同じ VPC グループにある必要があります。Amazon Redshift クラスターで EC2-Classic モードを使用する (つまり、そのクラスターが VPC にない) 場合は、Amazon EMR クラスターでも EC2 Classic モードを使用する必要があります。詳細については、「Amazon Redshift 管理ガイド」の「仮想プライベートクラウド (VPC) でクラスターを管理する」を参照してください。

  2. クラスターの HDFS にデータファイルを出力するようにクラスターを設定します。HDFS ファイル名にアスタリスク (*) と疑問符 (?) は使用できません。

    重要

    ファイル名にアスタリスク (*) と疑問符 (?) は使用できません。

  3. COPY コマンドの実行中もクラスターを継続して使用できるように、Amazon EMR クラスター設定の [Auto-terminate] (自動終了) オプションで [No] (いいえ) を指定します。

    重要

    COPY が完了する前にデータ ファイルのいずれかが変更または削除されると、予期しない結果を招いたり、COPY 操作が失敗したりする可能性があります。

  4. クラスター ID およびメインの公開 DNS (クラスターをホストする Amazon EC2 インスタンスのエンドポイント) を書き留めておいてください。この情報は、後のステップで使用します。

ステップ 3: Amazon Redshift クラスターの公開キーおよびクラスターノード IP アドレスを取得する

ホストのセキュリティグループに各クラスターノードの IP アドレスを設定し、その IP アドレスで Amazon Redshift クラスターからアクセスできるようにします。

コンソールを使用して Amazon Redshift クラスター公開キーとクラスターのクラスターノード IP アドレスを取得する方法は、以下のとおりです。
  1. Amazon Redshift マネジメントコンソールにアクセスします。

  2. ナビゲーションペインで [Clusters] (クラスター) リンクを選択します。

  3. リストからクラスターを選択します。

  4. [SSH 取り込み設定] グループを探します。

    [クラスターパブリックキー] と [ノード IP アドレス] の内容を書き留めておきます。この 2 つは、後のステップで使用します。

    クラスターのパブリックキーとノードの IP アドレスを示す SSH 取り込み設定グループのスクリーンショット。

    このプライベート IP アドレスは、ステップ 3 で Amazon Redshift からの接続を許可するように Amazon EC2 ホストを設定するために使用します。

Amazon Redshift CLI を使用してクラスター公開キーとクラスターノード の IP アドレスを取得するには、describe-clusters コマンドを実行します。例:

aws redshift describe-clusters --cluster-identifier <cluster-identifier>

応答には、以下のような ClusterPublicKey 値とプライベートおよびパブリック IP アドレスのリストが含まれます。

{ "Clusters": [ { "VpcSecurityGroups": [], "ClusterStatus": "available", "ClusterNodes": [ { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "LEADER", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-0", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-1", "PublicIPAddress": "10.nnn.nnn.nnn" } ], "AutomatedSnapshotRetentionPeriod": 1, "PreferredMaintenanceWindow": "wed:05:30-wed:06:00", "AvailabilityZone": "us-east-1a", "NodeType": "dc2.large", "ClusterPublicKey": "ssh-rsa AAAABexamplepublickey...Y3TAl Amazon-Redshift", ... ... }

Amazon Redshift API を使用してクラスターの公開キーとクラスターノード IP アドレスを取得するには、DescribeClusters アクションを使用します。詳細については、Amazon Redshift CLI ガイドdescribe-clusters または Amazon Redshift API ガイドの DescribeClusters を参照してください。

ステップ 4: 各 Amazon EC2 ホストの承認されたキーファイルに Amazon Redshift クラスターの公開キーを追加する

Amazon EMR クラスターノードすべてについて、各ホストの承認されたキーファイルにクラスターの公開キーを追加し、ホストが Amazon Redshift を認識して SSH 接続を許可できるようにします。

Amazon Redshift クラスターの公開キーをホストの認可されたキーファイルに追加するには
  1. SSH 接続を使用してホストにアクセスします。

    SSH を使用したインスタンスへの接続については、Amazon EC2 ユーザーガイドインスタンスへの接続を参照してください。

  2. コンソールまたは CLI 応答のテキストから Amazon Redshift の公開キーをコピーします。

  3. パブリックキーの内容をコピーして、ホストの /home/<ssh_username>/.ssh/authorized_keys ファイルに貼り付けます。プレフィックス "ssh-rsa" やサフィックス "Amazon-Redshift" も含めた完全な文字列を入力してください。次に例を示します。

    ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift

ステップ 5: Amazon Redshift クラスターの IP アドレスすべてを許可するようにホストを設定する

ホストインスタンスへのインバウンドトラフィックを許可するには、セキュリティグループを編集して、Amazon Redshift クラスターノードごとに 1 つのインバウンドルールを追加します。[タイプ] として、ポート 22 での TCP プロトコルを使用した SSH を選択します。[Source] (ソース) としては、ステップ 3: Amazon Redshift クラスターの公開キーおよびクラスターノード IP アドレスを取得する で取得した Amazon Redshift クラスターノードのプライベート IP アドレスを入力します。Amazon EC2 セキュリティグループへのルール追加の詳細については、Amazon EC2 ユーザーガイドからインスタンスのインバウンドトラフィックの認可を参照してください。

ステップ 6: COPY コマンドを実行してデータをロードする

COPY コマンドを実行して Amazon EMR クラスターに接続し、Amazon Redshift テーブルにデータをロードします。Amazon EMR クラスターは、COPY コマンドが完了するまで稼動している必要があります。例えば、クラスターに対して自動終了は設定しないようにしてください。

重要

COPY が完了する前にデータ ファイルのいずれかが変更または削除されると、予期しない結果を招いたり、COPY 操作が失敗したりする可能性があります。

COPY コマンドでは、Amazon EMR クラスター ID と、HDFS のファイルパスおよびファイル名を指定します。

COPY sales FROM 'emr://myemrclusterid/myoutput/part*' CREDENTIALS IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

ファイル名の引数にはワイルドカード文字としてアスタリスク (*) および疑問符 (?) を使用できます。たとえば、part* であれば、part-0000part-0001 などのファイルがロードされます。COPY コマンドでフォルダー名のみを指定した場合には、フォルダー内のすべてのファイルがロードされます。

重要

ワイルドカード文字を使用する場合や、フォルダー名のみを指定する場合には、フォルダーを確認して不要なファイルがロードされることのないようにしてください。不要なファイルがロードされると、COPY コマンドが失敗します。例えば、一部のプロセスでは出力フォルダにログファイルが書き込まれることがあります。