HBase on Amazon EMR の詳細なバックアップを設定する

Posted on

Amazon EMR は Management Console の操作だけで簡単に Hadoop クラスタを立ち上げることができます。自分で Hadoop クラスタを構築した人なら、この簡単さに驚くはずです。

ただし Management Console からすべての設定ができるわけではなく、一部は公式の Ruby CLI を使ったコマンドライン操作が必要です。 HBase の詳細なバックアップもそのひとつです。

Ruby CLI のインストールは公式ドキュメントを参考にしてください。

Management Console では差分バックアップしか設定できない

EMR を立ち上げるウィザードにバックアップ・スケジュールを設定する項目があるのですが、ここで設定できるのは差分バックアップだけです。最初だけフルバックアップが行われ、以降のバックアップでは変更のあったテーブルだけバックアップされます。

1 日おきにバックアップを設定した場合、1 年後には初回のフルバックアップと 364 日分の差分バックアップが S3 上に存在することになります。どれか 1 つでも失えばリストアできませんし、初回のフルバックアップを常に持ち続ける必要があります。短期的に利用するだけならこれで問題ないかもしれませんが、プロダクションでは扱いにくいです。

詳細なバックアップ設定は Ruby CLI から行う

フルバックアップと差分バックアップの組み合わせなど、詳細なバックアップ設定は Ruby CLI から行います。ドキュメントにも次の記述があります。

The console provides the ability to launch a new HBase cluster and populate it with data from a previous backup of an HBase cluster. It also gives you the ability to schedule periodic incremental backups of a new HBase cluster. Additional backup and restore functionality, such as the ability to restore data to an already running cluster, do manual backups, and schedule automated full backups is available using the Amazon EMR CLI.

たとえば 7 日おきにフルバックアップ、その間は 24 時間おきに差分バックアップ、バックアップを開始するのは午前 4 時からという設定だと、こんなパラメータになります(パラメータの詳細は Command Line Interface Options を確認してください)。

$ ./elastic-mapreduce --jobflow j-3C1XYCQG6XRES \
--hbase-schedule-backup \
--consistent \
--full-backup-time-interval 7 \
--full-backup-time-unit days \
--incremental-backup-time-interval 24 \
--incremental-backup-time-unit hours \
--start-time 2014-05-28T04:00:00+09:00 \
--backup-dir s3://path/to/backup/j-3C1XYCQG6XRES

7 日おきにフルバックアップを行えば、それより古いものは削除できるので S3 の料金を抑えられます。

バックアップジョブの実態は MapReduce

ここまで設定したバックアップ・スケジュールは、実は MapReduce で実行されています。その証拠に JobTracker を確認するとジョブが確認できます。

JobTracker の Completed Jobs

ちなみに、EMR の JobTracker は 9000 番ポートでリッスンしています。 Apache Hadoop デフォルトの 50000 番台ではないので注意してください。

まとめ

EMR は AWS の他のサービスに比べるとまだまだ CLI 操作が必要です。ドキュメントをざっと読んだ上で、Management Console でできないことを把握しておいたほうがいいです。