

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

# を使用した Apache Hadoop データベースへの接続 AWS Schema Conversion Tool
<a name="CHAP_Source.Hadoop"></a>

 AWS SCT コマンドラインインターフェイス (CLI) を使用して、Apache Hadoop から Amazon EMR に移行できます。 は、移行中のデータの一時ストレージとして Amazon S3 バケット AWS SCT を使用します。

AWS SCT は、ソース Apache Hadoop バージョン 2.2.0 以降として をサポートします。また、 は Apache Hive バージョン 0.13.0 以降 AWS SCT をサポートしています。

AWS SCT は、Amazon EMR バージョン 6.3.0 以降をターゲットとしてサポートしています。また、 は Apache Hadoop バージョン 2.6.0 以降、および Apache Hive バージョン 0.13.0 以降をターゲットとして AWS SCT サポートしています。

**Topics**
+ [Apache Hadoop をソースとして使用する場合の前提条件](#CHAP_Source.Hadoop.Prerequisites)
+ [ソースとして Hive を使用する権限](#CHAP_Source.Hadoop.Permissions)
+ [ソースとして HDFS を使用する権限](#CHAP_Source.Hadoop.PermissionsHDFS)
+ [HDFS をターゲットとして使用するためのアクセス権限](#CHAP_Source.Hadoop.PermissionsHDFSTarget)
+ [ソースとしての Apache Hadoop への接続](#CHAP_Source.Hadoop.Connecting)
+ [Hive と HDFS のソースサービスへの接続](#CHAP_Source.Hadoop.Hive)
+ [Amazon EMR にターゲットとして接続する](#CHAP_Source.Hadoop.Target)

## Apache Hadoop をソースとして使用する場合の前提条件
<a name="CHAP_Source.Hadoop.Prerequisites"></a>

 AWS SCT CLI を使用して Apache Hadoop に接続するには、次の前提条件が必要です。
+ 移行中にデータを保存する Amazon S3 バケットを作成します。その後、データを Amazon EMR HDFS にコピーするか、Amazon S3 を Hadoop ワークロードのデータリポジトリとして使用できます。詳細については、「*Amazon S3 ユーザーガイド*」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。
+ `AmazonS3FullAccess` ポリシーを使用して AWS Identity and Access Management (IAM) ロールを作成します。 AWS SCT はこの IAM ロールを使用して Amazon S3 バケットにアクセスします。
+  AWS シークレットキーと AWS シークレットアクセスキーを書き留めます。 AWS アクセスキーの詳細については、*IAM ユーザーガイド*の[「アクセスキーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)」を参照してください。
+ ターゲット Amazon EMR クラスターを作成して設定します。詳細については、『*Amazon EMR 管理ガイド*』の「[Amazon EMR の使用開始](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)」を参照してください。
+ `distcp` ユーティリティをソース Apache Hadoop クラスターにインストールします。また、ターゲットの Amazon EMR クラスターに `s3-dist-cp` ユーティリティをインストールします。データベースユーザーがこれらのユーティリティを実行する権限を持っていることを確認してください。
+ ソース Hadoop クラスター内の `core-site.xml` ファイルを s3a プロトコルを使用するように設定します。これを行うには、`fs.s3a.aws.credentials.provider` パラメータを次のいずれかの値に設定します。
  + `org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider`
  + `org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider`
  + `org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider`
  + `org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider`

  次のコード例を `core-site.xml` ファイルに追加できます。

  ```
  <property>
    <name>fs.s3a.aws.credentials.provider</name>
    <value>org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider</value>
  </property>
  ```

  前の例は、前述のオプションリストにある 4 つのオプションのうち 1 つを示しています。`core-site.xml` ファイルで `fs.s3a.aws.credentials.provider`パラメータを設定しない場合、 は自動的にプロバイダー AWS SCT を選択します。

## ソースとして Hive を使用する権限
<a name="CHAP_Source.Hadoop.Permissions"></a>

Hive ソースユーザーに必要な権限は次のとおりです。
+ ソースデータフォルダとソース Amazon S3 バケットへの `READ` アクセス
+ 中間およびターゲットの Amazon S3 バケットへの `READ+WRITE` アクセス

移行速度を上げるために、ACID トランザクションソーステーブルのコンパクションを実行することをお勧めします。

Amazon EMR Hive のターゲットユーザーに必要なアクセス権限は次のとおりです。
+ Amazon S3 バケットへの `READ` アクセス
+ 中間 Amazon S3 バケットへの `READ+WRITE` アクセス
+ ターゲット HDFS フォルダへの `READ+WRITE` アクセス

## ソースとして HDFS を使用する権限
<a name="CHAP_Source.Hadoop.PermissionsHDFS"></a>

HDFS をソースとして使用するのに必要な権限は次のとおりです。
+ NameNode 用の `EXECUTE`
+ 移行プロジェクトに含める `EXECUTE+READ` のすべてのソースフォルダとファイル用
+ Amazon S3 への移行前に Spark ジョブを実行し、ファイルを保存するための NameNode 内の `tmp` ディレクトリの `READ+WRITE` 用

HDFS では、すべての操作にトラバーサルアクセス権限が必要です。トラバーサルアクセスには、最後のパスコンポーネントを除いて、パスの既存のすべてのコンポーネントに対する `EXECUTE` アクセス権限が必要です。たとえば、`/foo/bar/baz` にアクセスする操作を行う場合、ユーザーには、`EXECUTE`、`/`、`/foo`、`/foo/bar` に対するアクセス権限が必要です。

次のコード例は、ソースフォルダとファイルへの `EXECUTE+READ` アクセス権限、および `tmp` ディレクトリへの `READ+WRITE` アクセス権限を付与する方法を示しています。

```
hadoop fs –chmod –R 744 /user/hdfs-data
hadoop fs –chmod –R 766 /tmp
```

## HDFS をターゲットとして使用するためのアクセス権限
<a name="CHAP_Source.Hadoop.PermissionsHDFSTarget"></a>

Amazon EMR HDFS のターゲットユーザーに必要なアクセス権限は次のとおりです。
+ ターゲット Amazon EMR クラスターの NameNode 用の `EXECUTE`
+ 移行後にデータを保存するターゲット HDFS フォルダ用の `READ+WRITE`

## ソースとしての Apache Hadoop への接続
<a name="CHAP_Source.Hadoop.Connecting"></a>

 AWS SCT バージョン 1.0.670 以降では、ソースとして Apache Hadoop を使用できます。Hadoop クラスターを Amazon EMR に移行できるのは、 AWS SCT コマンドラインインターフェイス (CLI) のみです。開始する前に、 AWS SCTのコマンドラインインターフェイスに慣れておきかしょう。詳細については、「[の CLI リファレンス AWS Schema Conversion Tool](CHAP_Reference.md)」を参照してください。

**CLI で Apache Hadoop AWS SCT に接続するには**

1. 新しい CLI AWS SCT スクリプトを作成するか、既存のシナリオテンプレートを編集します。例えば、`HadoopMigrationTemplate.scts` テンプレートをダウンロードして編集できます。詳細については、「[CLI シナリオの取得](CHAP_Reference.md#CHAP_Reference.Scenario)」を参照してください。

1. ドライバーの場所やログフォルダなどの AWS SCT アプリケーション設定を構成します。

   必要な JDBC ドライバーをダウンロードし、ファイルを保存する場所を指定します。詳細については、「[用の JDBC ドライバーのインストール AWS Schema Conversion Tool](CHAP_Installing.JDBCDrivers.md)」を参照してください。

   次のコード例では、Apache Hive ドライバーにパスを追加する方法を示します。このコード例を実行すると、 はログファイルを `c:\sct`フォルダに AWS SCT 保存します。

   ```
   SetGlobalSettings
       -save: 'true'
       -settings: '{
           "hive_driver_file": "c:\\sct\\HiveJDBC42.jar",
           "log_folder": "c:\\sct",
           "console_log_folder": "c:\\sct"
       }'
   /
   ```

   Windows では、この例と以下の例を使用できます。

1. 新しい AWS SCT プロジェクトを作成します。

   次のコード例では、`c:\sct` フォルダに `hadoop_emr` プロジェクトを作成します。

   ```
   CreateProject
       -name: 'hadoop_emr'
       -directory: 'c:\sct'
   /
   ```

1. ソース Hadoop クラスターをプロジェクトに追加します。

   `AddSourceCluster` コマンドを使用して、ソース Hadoop クラスターに接続します。`name`、`host`、`port`、`user` の必須パラメータには必ず値を指定してください。その他のパラメータは省略可能です。

   次のコード例では、ソース Hadoop クラスターを追加します。この例では、`HADOOP_SOURCE` をソースクラスターの名前として設定しています。このオブジェクト名を使用して Hive と HDFS サービスをプロジェクトに追加し、マッピングルールを作成します。

   ```
   AddSourceCluster
       -name: 'HADOOP_SOURCE'
       -vendor: 'HADOOP'
       -host: 'hadoop_address'
       -port: '22'
       -user: 'hadoop_user'
       -password: 'hadoop_password'
       -useSSL: 'true'
       -privateKeyPath: 'c:\path\name.pem'
       -passPhrase: 'hadoop_passphrase'
   /
   ```

   前の例では、*hadoop\$1address* を Hadoop クラスターの IP アドレスに置き換えてください。必要に応じて port オプションの値を設定します。次に、*hadoop\$1user* と *hadoop\$1password* を Hadoop ユーザーの名前とこのユーザーのパスワードに置き換えます。*path\$1name* には、ソース Hadoop クラスターの PEM ファイルの名前とパスを入力します。

1. CLI スクリプトを保存します。次に、Hive と HDFS サービスの接続情報を追加します。

## Hive と HDFS のソースサービスへの接続
<a name="CHAP_Source.Hadoop.Hive"></a>

CLI を使用して、ソース Hive および HDFS AWS SCT サービスに接続できます。Apache Hive に接続するには、Hive JDBC ドライバーバージョン 2.3.4 以降を使用してください。詳細については、「[用の JDBC ドライバーのインストール AWS Schema Conversion Tool](CHAP_Installing.JDBCDrivers.md)」を参照してください。

AWS SCT はクラスター`hadoop`ユーザーを使用して Apache Hive に接続します。これを行うには、`AddSourceClusterHive` および `AddSourceClusterHDFS` コマンドを使用します。これを行うには、次のいずれかのアプローチを使用できます。
+ 新しい SSH トンネルを作成します。

  `createTunnel` に「**true**」と入力します。`host` には、ソース Hive または HDFS サービスの内部 IP アドレスを入力します。`port` には、Hive または HDFS サービスのサービスポートを入力します。

  次に、`user` および `password` の Hive または HDFS の認証情報を入力します。SSH トンネルの詳細については、『Amazon EMR 管理ガイド』の「[ローカルポート転送を使用したプライマリノードへの SSH トンネルのセットアップ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel-local.html)」を参照してください。
+ 既存の SSH トンネルを使用する。

  `host` に「**localhost**」と入力します。`port` には、SSH トンネルパラメータからローカルポートを入力します。
+ Hive および HDFS サービスに直接接続します。

  `host` には、ソース Hive または HDFS サービスの IP アドレスまたはホスト名を入力します。`port` には、Hive または HDFS サービスのサービスポートを入力します。次に、`user` および `password` の Hive または HDFS の認証情報を入力します。

**CLI で Hive と HDFS AWS SCT に接続するには**

1. ソース Hadoop クラスターの接続情報を含む CLI スクリプトを開きます。前のステップで定義した Hadoop クラスターの名前を使用してください。

1. ソース Hive サービスをプロジェクトに追加します。

   `AddSourceClusterHive` コマンドを使用してソース Hive サービスを接続します。`user`、`password`、`cluster`、`name`、`port` の必須パラメータには必ず値を指定してください。その他のパラメータは省略可能です。

   次のコード例では、 が Hive サービスと連携 AWS SCT するためのトンネルを作成します。このソース Hive サービスは AWS SCTと同じ PC 上で動作します。この例では、前の例の `HADOOP_SOURCE` ソースクラスターを使用しています。

   ```
   AddSourceClusterHive
       -cluster: 'HADOOP_SOURCE'
       -name: 'HIVE_SOURCE'
       -host: 'localhost'
       -port: '10005'
       -user: 'hive_user'
       -password: 'hive_password'
       -createTunnel: 'true'
       -localPort: '10005'
       -remoteHost: 'hive_remote_address'
       -remotePort: 'hive_port'
   /
   ```

   次のコード例は、トンネルなしで Hive サービスに接続します。

   ```
   AddSourceClusterHive
       -cluster: 'HADOOP_SOURCE'
       -name: 'HIVE_SOURCE'
       -host: 'hive_address'
       -port: 'hive_port'
       -user: 'hive_user'
       -password: 'hive_password'
   /
   ```

   前述の例では、*hive\$1user* と *hive\$1password* を Hive ユーザーの名前とこのユーザーのパスワードに置き換えます。

   次に、*hive\$1address* と *hive\$1port* をソース Hadoop クラスターNameNode IP アドレスとポートに置き換えます。

   *hive\$1remote\$1address* には、ソースの Hive サービスのデフォルト値 `127.0.0.1` またはNameNode IP アドレスを使用できます。

1. ソース HDFS サービスをプロジェクトに追加します。

   `AddSourceClusterHDFS` コマンドを使用してソース HDFS サービスを接続します。`user`、`password`、`cluster`、`name`、`port` の必須パラメータには必ず値を指定してください。その他のパラメータは省略可能です。

   ソース HDFS サービスからデータを移行するために必要なアクセス権限がユーザーにあることを確認します。詳細については、「[ソースとして Hive を使用する権限](#CHAP_Source.Hadoop.Permissions)」を参照してください。

   次のコード例では、 が Apache HDFS サービスと連携 AWS SCT するためのトンネルを作成します。この例では、前に作成した `HADOOP_SOURCE` ソースクラスターを使用しています。

   ```
   AddSourceClusterHDFS
       -cluster: 'HADOOP_SOURCE'
       -name: 'HDFS_SOURCE'
       -host: 'localhost'
       -port: '9005'
       -user: 'hdfs_user'
       -password: 'hdfs_password'
       -createTunnel: 'true'
       -localPort: '9005'
       -remoteHost: 'hdfs_remote_address'
       -remotePort: 'hdfs_port'
   /
   ```

   次のコードはトンネルなしで Apache HDFS サービスに接続します。

   ```
   AddSourceClusterHDFS
       -cluster: 'HADOOP_SOURCE'
       -name: 'HDFS_SOURCE'
       -host: 'hdfs_address'
       -port: 'hdfs_port'
       -user: 'hdfs_user'
       -password: 'hdfs_password'
   /
   ```

   前述の例では、*hdfs\$1user* と *hdfs\$1password* を HDFS ユーザーの名前とこのユーザーのパスワードに置き換えます。

   次に、*hdfs\$1address* と *hdfs\$1port* をソース Hadoop クラスターNameNode IP アドレスとポートに置き換えます。

   *hdfs\$1remote\$1address* には、ソースの Hive サービスのデフォルト値 `127.0.0.1` またはNameNode IP アドレスを使用できます。

1. CLI スクリプトを保存します。次に、ターゲット Amazon EMR クラスターの接続情報と移行コマンドを追加します。

## Amazon EMR にターゲットとして接続する
<a name="CHAP_Source.Hadoop.Target"></a>

CLI を使用して、ターゲット Amazon EMR AWS SCT クラスターに接続できます。そのためには、インバウンドトラフィックを承認し、SSH を使用します。この場合、 AWS SCT には Amazon EMR クラスターを操作するために必要なすべてのアクセス許可があります。詳細については、『Amazon EMR 管理ガイド』の「[接続する前に](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-ssh-prereqs.html)」と「[SSH を使用してプライマリノードに接続する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)」を参照してください。

AWS SCT はクラスター`hadoop`ユーザーを使用して Amazon EMR Hive に接続します。Amazon EMR Hive に接続するには、Hive JDBC ドライバーバージョン 2.6.2.1002 以降を使用してください。詳細については、「[用の JDBC ドライバーのインストール AWS Schema Conversion Tool](CHAP_Installing.JDBCDrivers.md)」を参照してください。

**CLI で Amazon EMR AWS SCT に接続するには**

1. ソース Hadoop クラスターの接続情報を含む CLI スクリプトを開きます。ターゲットの Amazon EMR 認証情報をこのファイルに追加します。

1. ターゲットの Amazon EMR クラスターをプロジェクトに追加します。

   次のコード例では、ターゲットの Amazon EMR クラスターを追加します。この例では、`HADOOP_TARGET` をターゲットクラスターの名前として設定します。このオブジェクト名を使用して、Hive と HDFS サービス、および Amazon S3、バケットフォルダをプロジェクトに追加し、マッピングルールを作成します。

   ```
   AddTargetCluster
   	-name: 'HADOOP_TARGET'
   	-vendor: 'AMAZON_EMR'
   	-host: 'ec2-44-44-55-66.eu-west-1.EXAMPLE.amazonaws.com'
   	-port: '22'
   	-user: 'emr_user'
   	-password: 'emr_password'
   	-useSSL: 'true'
   	-privateKeyPath: 'c:\path\name.pem'
   	-passPhrase: '1234567890abcdef0!'
   	-s3Name: 'S3_TARGET'
   	-accessKey: 'AKIAIOSFODNN7EXAMPLE'
   	-secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
   	-region: 'eu-west-1'
   	-s3Path: 'doc-example-bucket/example-folder'
   /
   ```

   前の例では、 AWS リソース名と Amazon EMR 接続情報を入力します。これには、Amazon EMR クラスターの IP アドレス、 AWS アクセスキー、 AWS シークレットアクセスキー、Amazon S3 バケットが含まれます。必要に応じて、ポート変数の値を設定します。次に、*emr\$1user* と *emr\$1password* を Amazon EMR ユーザーの名前とこのユーザーのパスワードに置き換えます。*path\$1 n name* には、ターゲット Amazon EMR クラスターの PEM ファイルの名前とパスを入力します。詳細については、「[EMR クラスターアクセス用の PEM ファイルのダウンロード](https://docs.aws.amazon.com/whitepapers/latest/teaching-big-data-skills-with-amazon-emr/download-pem-file-for-emr-cluster-access.html)」を参照してください。

1. ターゲット Amazon S3 バケットをプロジェクトに追加します。

   次のコード例では、ターゲットの Amazon S3 バケットを追加します。この例では、前に作成した `HADOOP_TARGET` クラスターを使用しています。

   ```
   AddTargetClusterS3
   	-cluster: 'HADOOP_TARGET'
   	-Name: 'S3_TARGET'
   	-accessKey: 'AKIAIOSFODNN7EXAMPLE'
   	-secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
   	-region: 'eu-west-1'
   	-s3Path: 'doc-example-bucket/example-folder'
   /
   ```

   前の例で、 AWS アクセスキー、 AWS シークレットアクセスキー、Amazon S3 バケットを入力します。

1. ターゲットの Hive サービスをプロジェクトに追加します。

   次のコード例では、 がターゲット Hive サービスと連携 AWS SCT するためのトンネルを作成します。この例では、前に作成した `HADOOP_TARGET` ターゲットクラスターを使用しています。

   ```
   AddTargetClusterHive
       -cluster: 'HADOOP_TARGET'
       -name: 'HIVE_TARGET'
       -host: 'localhost'
       -port: '10006'
       -user: 'hive_user'
       -password: 'hive_password'
       -createTunnel: 'true'
       -localPort: '10006'
       -remoteHost: 'hive_address'
       -remotePort: 'hive_port'
   /
   ```

   前述の例では、*hive\$1user* と *hive\$1password* を Hive ユーザーの名前とこのユーザーのパスワードに置き換えます。

   次に、*hive\$1address* をデフォルト値 `127.0.0.1` またはターゲットの Hive サービスのNameNode IP アドレスに置き換えます。次に、*hive\$1port* を対象の Hive サービスのポートに置き換えます。

1. ターゲット HDFS サービスをプロジェクトに追加します。

   次のコード例では、 が Apache HDFS サービスと連携 AWS SCT するためのトンネルを作成します。この例では、前に作成した `HADOOP_TARGET` ターゲットクラスターを使用しています。

   ```
   AddTargetClusterHDFS
       -cluster: 'HADOOP_TARGET'
       -name: 'HDFS_TARGET'
       -host: 'localhost'
       -port: '8025'
       -user: 'hdfs_user'
       -password: 'hdfs_password'
       -createTunnel: 'true'
       -localPort: '8025'
       -remoteHost: 'hdfs_address'
       -remotePort: 'hdfs_port'
   /
   ```

   前述の例では、*hdfs\$1user* と *hdfs\$1password* を HDFS ユーザーの名前とこのユーザーのパスワードに置き換えます。

   次に、*hdfs\$1address* と *hdfs\$1port* を、ターゲット HDFS サービスのプライベート IP アドレスとNameNode ポートに置き換えます。

1. CLI スクリプトを保存します。次に、マッピングルールと移行コマンドを追加します。詳細については、「[Hadoop ワークロードの移行](big-data-hadoop.md)」を参照してください。