Amazon EMR
Amazon EMR リリースガイド

以前の Amazon EMR の AMI バージョンの HBase アプリケーションの仕様。

サポートされる HBase バージョン

HBase バージョン AMI のバージョン AWS CLI 設定パラメータ HBase バージョンの詳細
0.94.18 3.1.0 以降

--ami-version 3.1

--ami-version 3.2

--ami-version 3.3

--applications Name=HBase

  • バグの修正と機能強化。

0.94.7 3.0-3.0.4

--ami-version 3.0

--applications Name=HBase

0.92 2.2 以降

--ami-version 2.2 or later

--applications Name=HBase

HBase クラスターの前提条件

Amazon EMR AMI バージョン 2.x および 3.x を使用して作成されたクラスターは、HBase の次の要件を満たす必要があります。

  • AWS CLI (オプション)—コマンドラインを使用して HBase を操作するには、最新バージョンの AWS CLI をダウンロードしてインストールします。詳細については、AWS Command Line Interface ユーザーガイドの「AWS コマンドラインインターフェイスのインストール」を参照してください。

  • 2 つ以上のインスタンス (オプション)—クラスターのマスターノードでは HBase マスターサーバーと ZooKeeper、タスクノードでは HBase リージョンサーバーが実行されます。最大のパフォーマンスを確保するには、HBase クラスターが 2 つ以上の EC2 インスタンスを実行する必要がありますが、評価目的の場合は HBase を単一ノードで実行できます。

  • 長時間稼働クラスター—HBase は長時間稼働クラスター上でのみ実行されます。デフォルトでは、CLI および Amazon EMR コンソールは長時間稼働クラスターを作成します。

  • Amazon EC2 キーペア (推奨)—マスターノードと接続し、HBase シェルコマンドを実行するために Secure Shell (SSH) ネットワークプロトコルを使用するには、クラスターを作成するときに Amazon EC2 キーペアを使用する必要があります。

  • 正しい AMI および Hadoop バージョン—HBase クラスターは、現在 Hadoop 20.205 以降でのみサポートされています。

  • Ganglia (オプション)—HBase パフォーマンスメトリクスを監視するには、クラスターの作成時に Ganglia をインストールします。

  • ログ用 Amazon S3 バケット (オプション)—HBase 用ログはマスターノードで使用できます。これらのログを Amazon S3 にコピーするには、クラスターの作成時にログファイルを受け取るための S3 バケットを指定します。

HBase を含むクラスターの作成

次の表に、コンソールを使用して Amazon EMR AMI リリースバージョンを使用して HBase を使用してクラスターを作成する際に使用できるオプションを示します。

フィールド Action
Restore from backup HBase クラスターに、Amazon S3 に保存されているデータを事前にロードするかどうかを指定します。
Backup location Amazon S3 で復元するバックアップがある場所の URI を指定します。
Backup version [Backup Location] で指定した場所にある、使用するバックアップのバージョン名を指定します(オプション)。このフィールドに何も指定しない場合、Amazon EMR は [Backup Location (バックアップ場所)] にある最新のバックアップを新しい HBase クラスターに設定します。
Schedule Regular Backups 自動増分バックアップをスケジュールするかどうかを指定します。最初は完全バックアップによって、以降の差分バックアップのベースラインとなるバックアップが作成されます。
Consistent backup バックアップの整合性を確保するかどうかを指定します。バックアップの整合性とは、バックアップ処理の初期段階であるノード同期中に、書き込みオペレーションを一時停止することです。つまり、一時停止された書き込みオペレーションはすべてキューに置かれ、同期が完了したら再開されます。
Backup frequency スケジュールされたバックアップの頻度 (日/時間/分単位)。
Backup location バックアップが保存される Amazon S3 の URI。差分バックアップの正確性を確保するために、バックアップは、HBase クラスターごとにそれぞれ異なる場所に格納する必要があります。
Backup start time 最初のバックアップの時間を指定します。これを now に設定した場合、クラスターが実行されると直ちに最初のバックアップが行われます。または、日付と時刻を ISO 形式で入力します。たとえば、2012-06-15T20:00Z を入力すると、2012 年 6 月 15 日午後 8 時 (UTC) に設定されます。

次の AWS CLI コマンドの例では、HBase などのアプリケーションでクラスターを起動します。

注記

読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected

Hive クラスターと HBase クラスターの間の接続が確立されたら(前述の手順を参照)、Hive に外部テーブルを作成することで、HBase クラスターに格納されているデータにアクセスできます。

次の例では、Hive プロンプトからの実行時に、inputTable という HBase テーブルに格納されているデータを参照する外部テーブルを作成しています。その後、Hive ステートメントで inputTable を参照し、HBase クラスターに格納されているデータに対してクエリを実行したり、そのデータを変更したりできます。

注記

以下の例では、AMI 2.3.3 で protobuf-java-2.4.0a.jar を使用しますが、サンプルをご自分のバージョンに合わせてお使いください。お持ちの Protocol Buffers の JAR のバージョンをチェックするには、Hive コマンドプロンプトでコマンドを実行します: ! ls /home/hadoop/lib;.

add jar lib/emr-metrics-1.0.jar ; add jar lib/protobuf-java-2.4.0a.jar ; set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com ; create external table inputTable (key string, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1") tblproperties ("hbase.table.name" = "t1"); select count(*) from inputTable ;

HBase 設定のカスタマイズ

デフォルトの設定はほとんどのアプリケーションで動作しますが、HBase 設定を変更する柔軟性も確保されています。これを行うには、次の 2 つのブートストラップアクションスクリプトのいずれかを実行します。

  • configure-hbase-daemons—マスター、regionserver、および zookeeper デーモンのプロパティを設定します。これらのプロパティには、HBase デーモンの開始時に Java Virtual Machine(JVM)に渡すヒープサイズおよびオプションが含まれます。これらのプロパティは、ブートストラップアクションの引数として設定します。このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbase-user-env.sh 設定ファイルが変更されます。

  • configure-hbase—HBase マスターノードのバインド先ポート、CLI クライアントがアクションを再試行する最大回数など、HBase サイト固有の設定を指定します。これらはブートストラップアクションの引数として 1 つずつ設定するか、Amazon S3 で XML 設定ファイルの場所を指定します。このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbase-site.xml 設定ファイルが変更されます。

注記

これらのスクリプトを実行できるのは、他のブートストラップアクションの場合と同様、クラスターの作成時のみです。このスクリプトを使用して、現在実行中の HBase クラスターの設定を変更することはできません。

configure-hbase または configure-hbase-daemons ブートストラップアクションを実行すると、指定した値によってデフォルトの値が上書きされます。明示的に設定しなかった値には、デフォルト値が設定されます。

これらのブートストラップアクションでの HBase の設定操作は、Amazon EMR でブートストラップアクションを使用して Hadoop 設定と Hadoop デーモンのプロパティを設定するのと似ています。異なるのは、HBase にはプロセスごとのメモリオプションがないという点です。メモリオプションは、--daemon-opts 引数を使用して設定されます。daemon は、設定するデーモンの名前に置き換えてください。

HBase デーモンを設定する

Amazon EMR には、HBase デーモンの設定変更に使用できるブートストラップアクション s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons が用意されています。region は、HBase クラスターを起動するリージョンです。

AWS CLI を使用して HBase デーモンを設定するには、クラスターを起動して 1 つ以上の HBase デーモンを設定するときに、ブートストラップアクション configure-hbase-daemons を追加します。以下のプロパティを設定できます。

プロパティ 説明
hbase-master-opts JVM によるマスターデーモンの実行方法をコントロールするオプション。設定されている場合は、これらによってデフォルトの HBASE_MASTER_OPTS 変数が上書きされます。
regionserver-opts JVM によるリージョンサーバーデーモンの実行方法をコントロールするオプション。設定されている場合は、これらによってデフォルトの HBASE_REGIONSERVER_OPTS 変数が上書きされます。
zookeeper-opts JVM による zookeeper デーモンの実行方法をコントロールするオプション。設定されている場合は、これらによってデフォルトの HBASE_ZOOKEEPER_OPTS 変数が上書きされます。

これらのオプションの詳細については、HBase ドキュメントの「hbase-env.sh」を参照してください。

zookeeper-opts および hbase-master-opts の値を設定するためのブートストラップアクションを次の例に示します。

注記

読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-daemons,\ Args=["--hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-master-opts=-Xmx2048m","--hbase-regionserver-opts=-Xmx4096m"]

HBase サイト設定を指定する

Amazon EMR は、HBase の設定を変更するために使用できるブートストラップアクション s3://elasticmapreduce/bootstrap-actions/configure-hbase を提供します。設定値はブートストラップアクションで引数として 1 つずつ設定するか、Amazon S3 で XML 設定ファイルの場所を指定します。少しの設定を行えばいいだけの場合は、設定値を 1 つずつ設定する方が便利です。追加する変更が多数ある場合、または再利用できるよう設定を保存したい場合は、XML ファイルを使用して設定することをお勧めします。

注記

Amazon S3 バケット名には、s3://region.elasticmapreduce/bootstrap-actions/configure-hbase のようにリージョンプレフィックスを付けることができます (region は、HBase クラスターを起動するリージョン)。

このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbase-site.xml 設定ファイルが変更されます。ブートストラップアクションは、HBase クラスターの起動時にのみ実行できます。

設定可能な HBase サイト設定の詳細については、HBase ドキュメントでデフォルト設定の項を参照してください。

HBase クラスターの起動時に configure-hbase ブートストラップアクションを設定し、hbase-site.xml で変更する値を指定します。

AWS CLI を使用して個別の HBase のサイト設定を指定するには

  • hbase.hregion.max.filesize 設定を変更するには、次のコマンドを入力し、myKey を Amazon EC2 キーペアの名前に置き換えます。

    注記

    読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

    aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","hbase.hregion.max.filesize=52428800"]

AWS CLI を使用して XML ファイルで HBase サイト設定を指定するには

  1. カスタムバージョンの hbase-site.xml を作成します。カスタムファイルは有効な XML である必要があります。エラーが発生する可能性を少なくするには、/home/hadoop/conf/hbase-site.xml の Amazon EMR HBase マスターノードにある hbase-site.xml のデフォルトのコピーから開始し、そのファイルのコピーを編集します。ファイルをゼロから作成する必要はありません。新しいファイルに新しい名前を付けるか、hbase-site.xml をそのまま使用します。

  2. カスタム hbase-site.xml ファイルを Amazon S3 バケットにアップロードします。クラスターを起動する AWS アカウントがファイルにアクセスできるように、このバケットには権限が設定されています。さらに、クラスターを起動する AWS アカウントが Amazon S3 バケットを所有している場合は、アクセス権が付与されます。

  3. HBase クラスターの起動時に configure-hbase ブートストラップアクションを設定し、カスタム hbase-site.xml ファイルの場所を含めます。次の例では、HBase サイト設定の値を、s3://mybucket/my-hbase-site.xml で指定した値に設定しています。次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換え、mybucket; を Amazon S3 バケットの名前に置き換えます。

    注記

    読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

    aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["--site-config-file","s3://mybucket/config.xml"]

    複数のオプションを指定して HBase オペレーションをカスタマイズする場合は、次の例に示すように、各キーと値のペアの前に -s オプションスイッチを追加する必要があります。

    --bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","zookeeper.session.timeout=60000"]

プロキシセットと SSH 接続が開いている場合、HBase UI を表示するには、ブラウザウィンドウで http://master-public-dns-name:60010/master-status を開きます。master-public-dns-name は、HBase クラスターのマスターノードのパブリック DNS アドレスです。

現在の HBase ログを表示するには、SSH を使用してマスターノードに接続し、mnt/var/log/hbase ディレクトリに移動します。これらのログは、クラスターの起動時に Amazon S3 へのログを有効にしない限り、クラスター終了後に使用できなくなります。

HBase をバックアップおよび復元する

Amazon EMR には、手動で、または自動化されたスケジュールに従って、HBase データを Amazon S3 にバックアップする機能が用意されています。完全バックアップと増分バックアップの両方を実行できます。HBase データのバックアップバージョンを作成した後、そのバージョンを HBase クラスターに復元できます。復元は現在実行中の HBase クラスターに対して行うことができます。また、バックアップされたデータが設定されたクラスターを新しく作成することもできます。

バックアップ処理中も、HBase は書き込みコマンドを実行し続けます。これにより、バックアップ中もクラスターを使用し続けることができますが、バックアップ中のデータと、並行して実行されている書き込みオペレーションとの間に不整合が発生するリスクがあります。発生する可能性がある不整合について理解するには、HBase では、書き込みオペレーションがクラスター内のノード全体に分散されるという点を考慮する必要があります。特定のノードがポーリングされた後、書き込みオペレーションが発生すると、そのデータはバックアップアーカイブに保存されません。HBase クラスターへの以前の書き込み(既にポーリングされたノードに送信された書き込み)がバックアップアーカイブに含まれない可能性がある一方で、それより後の書き込み(ポーリングされる前のノードに送信された書き込み)がアーカイブに保存されることもあります。

整合性のあるバックアップが必要な場合は、バックアップ処理の初期段階であるノード同期中に、HBase への書き込みを一時停止する必要があります。これを行うには、バックアップをリクエストするときに --consistent パラメータを指定します。このパラメータが指定されている場合は、この期間中の書き込みがキューに入れられ、同期が完了するとすぐに実行されます。定期バックアップをスケジュールすることもできます。これにより徐々に発生する不整合が解決されます。あるバックアップパスで逃したデータが、次のパスでバックアップされるからです。

HBase データをバックアップするときに、クラスターごとにさまざまなバックアップディレクトリを指定する必要があります。これを簡単に行うには、クラスター識別子を、バックアップディレクトリに指定されたパスの一部として使用します。たとえば、s3://mybucket/backups/j-3AEXXXXXX16F2 と指定します。これにより、以降のすべての差分バックアップが適切な HBase クラスターを参照するようになります。

不要になった古いバックアップファイルを削除する準備ができたら、まず HBase データの完全バックアップを行うことをお勧めします。これによりすべてのデータが保存されます。このデータは、その後の差分バックアップのベースとして使用できます。完全バックアップが完了した後、バックアップの場所に移動し、古いバックアップファイルを手動で削除できます。

HBase バックアップ処理では、一時ファイルの格納スペースに特定の制限がある S3DistCp をコピー操作に使用します。

コンソールを使用して HBase をバックアップおよび復元する

コンソールを使用すると、新しいクラスターを起動して、以前の HBase バックアップのデータを入力することができます。また、HBase データの定期差分バックアップをスケジュールすることもできます。追加のバックアップおよび復元機能、たとえば、既に実行中のクラスターにデータを復元したり、手動バックアップを行ったり、自動完全バックアップをスケジュールしたりする機能は、CLI で使用できます。

コンソールを使用して、アーカイブされた HBase データを新しいクラスターに指定するには

  1. Amazon EMR コンソール (https://console.aws.amazon.com/elasticmapreduce/) を開きます。

  2. [Create cluster] を選択します。

  3. [Software Configuration] セクションの [Additional Applications] で、[HBase] と [Configure and add] を選択します。

  4. [Add Application] ダイアログボックスで、[Restore From Backup] チェックボックスをオンにします。

  5. [Backup Location] (バックアップの場所) で、新しい HBase クラスターにロードするバックアップの場所を指定します。ここには、Amazon S3 URL を s3://myawsbucket/backups/ という形式で指定する必要があります。

  6. [Backup Version] では、値を設定して、ロードするバックアップバージョンの名前を指定するオプションがあります。[Backup Version (バックアップバージョン)] に値を設定しない場合、Amazon EMR は指定した場所にある最新のバックアップをロードします。

  7. [Add] を選択して、必要に応じたオプションによるクラスターの作成に進みます。

コンソールを使用して HBase データの自動バックアップをスケジュールするには

  1. [Software Configuration] セクションの [Additional Applications] で、[HBase] と [Configure and add] を選択します。

  2. [Schedule Regular Backups] を選択します。

  3. バックアップの整合性を確保するかどうかを指定します。バックアップの整合性とは、バックアップ処理の初期段階であるノード同期中に、書き込みオペレーションを一時停止することです。つまり、一時停止された書き込みオペレーションはすべてキューに置かれ、同期が完了したら再開されます。

  4. バックアップの頻度を設定します。それには、[Backup Frequency] に数値を入力し、[Days]、[Hours]、または [Minutes] を選択します。最初に実行される自動バックアップは完全バックアップです。その後、指定したスケジュールに基づき、差分バックアップが Amazon EMR によって保存されます。

  5. バックアップを格納する Amazon S3 における場所を指定します。差分バックアップが適切に判断されるように、HBase クラスターはそれぞれ Amazon S3 内の個別の場所にバックアップする必要があります。

  6. [Backup Start Time] で、バックアップを最初に行うタイミングの値を指定します。これを now に設定した場合、クラスターが実行されると直ちに最初のバックアップが行われます。または、日付と時刻を ISO 形式で入力します。たとえば、「2013-09-26T20:00Z」と入力すると、開始時間が 2013 年 9 月 26 日午後 8 時 (UTC) に設定されます。

  7. [Add] を選択します。

  8. 必要に応じて他のオプションを指定し、クラスターの作成を進めます。

CloudWatch で HBase を監視する

Amazon EMR は、HBase バックアップのモニタリングに使用できる 3 つのメトリクスを CloudWatch に報告します。これらのメトリクスは CloudWatch に 5 分間隔でプッシュされ、料金はかかりません。

メトリクス 説明
HBaseBackupFailed

前回のバックアップに失敗したかどうか。デフォルトでは 0 に設定されており、前回のバックアップが失敗した場合は 1 に更新されます。このメトリクスは、HBase クラスターについてのみ報告されます。

ユースケース: HBase バックアップを監視する

単位: Count

HBaseMostRecentBackupDuration

前回のバックアップが完了するのにかかった時間。このメトリクスは、前回完了したバックアップが成功したか失敗したかに関係なく設定され、このメトリクスは、バックアップの進行中に、バックアップが開始してからの分数を返します。このメトリクスは、HBase クラスターについてのみ報告されます。

ユースケース: HBase バックアップを監視する

単位: Minutes

HBaseTimeSinceLastSuccessfulBackup

クラスターで前回成功した HBase バックアップが開始してから経過した分数。このメトリクスは、HBase クラスターについてのみ報告されます。

ユースケース: HBase バックアップを監視する

単位: Minutes

HBase の Ganglia の設定

configure-hbase-for-ganglia ブートストラップアクションを使用して、HBase に対して Ganglia を設定できます。このブートストラップアクションは、Ganglia にメトリクスを発行するように HBase を設定します。

クラスターを起動するときは、HBase と Ganglia を設定する必要があります。Ganglia のレポートを、実行中のクラスターに追加することはできません。

Ganglia では、/mnt/var/log/ganglia/rrds のサーバーにもログファイルを格納します。ログファイルが Amazon S3 バケットに保存されるようにクラスターを設定した場合は、Ganglia ログファイルも同様に同じ場所に保存されます。

HBase の Ganglia でクラスターを起動するには、次の例に示すように、[configure-hbase-for-ganglia] ブートストラップアクションを使用します。

注記

読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-for-ganglia

Ganglia を設定してクラスターを起動した後は、マスターノードで実行中のグラフィカルインターフェイスを使用して、Ganglia のグラフやレポートにアクセスできます。