Amazon Web Services ブログ

HBase on Amazon S3を使用してリードレプリカクラスタをセットアップする

多くのお客様は、低コスト、データ耐久性、スケーラビリティなど、Amazon S3をデータストレージとしてApache HBaseを実行することの利点を活用しています。 FINRAのような顧客は、HBase on S3アーキテクチャーに移行し、ストレージをコンピュートから切り離し、S3をストレージレイヤーとして使用するという多くの運用上の利点とともに、コストを60%削減しました。 HBase on S3を使用すると、クラスタを起動して、長いスナップショット復元プロセスを経る必要がなく、S3内のデータに対してすぐにクエリを開始することができます。

Amazon EMR 5.7.0の発表により、HBase on S3の高可用性と耐久性をクラスタレベルにさらに一歩進化させることができます。S3上の同じHBaseルートディレクトリに接続できる複数のHBase読み取り専用クラスタを開始できます。これにより、リードレプリカクラスタを介して常にデータにアクセスできることを保証し、複数のアベイラビリティゾーンにわたってクラスタを実行できます。

この記事では、HBase on S3を使用したリードレプリカクラスタの設定をご案内します。

HBaseの概要

Apache HBaseは、Apache Hadoopエコシステムに属する、大規模に拡張可能な分散型大容量データストアです。 Hadoop分散ファイルシステム(HDFS)の上で実行される、オープンソースで非リレーショナルのバージョン管理されたデータベースです。これは、数十億行と数百万の列を持つテーブルに対して、ランダムで厳密に一貫性のあるリアルタイムアクセス用に構築されています。 Apache HadoopApache HiveApache Pigとの緊密な統合により、大規模な並列分析と高速データアクセスを簡単に組み合わせることができます。 HBaseのデータモデル、スループット、障害耐性は、広告技術、Web解析、金融サービス、時系列データを使用するアプリケーションなどのワークロードに適しています。

多くのNoSQL技術と同様に、HBaseのテーブル構造は、データのクエリとアクセスパターンの影響を直接的に考慮する必要があります。クエリのパフォーマンスは、クラスタが処理してデータを返す方法に基づいて大幅に異なります。

HBase on S3

HBase on S3リードレプリカを使用するには、まずHBase on S3を使用する必要があります。 HBase on S3アーキテクチャに慣れていない方に、このセクションでいくつかの基本を説明します。

HBaseのデータストアとしてS3を使用することにより、クラスタのストレージとコンピュートノードを分離することができます。これにより、コンピューティング要件に合わせてクラスタをサイジングすることで、コストを削減できます。クラスタに内包するHadoop分散ファイルシステム(HDFS)に3倍のレプリケーションでデータセット全体を保存するための料金を支払う必要はありません。

EMRはHBase on Amazon S3を構成して、クラスタ内のデータをメモリ内およびディスク上にキャッシュし、S3からの読み取りパフォーマンスを向上させます。基礎となるストレージに影響を与えることなく、コンピュートノードを素早く簡単にスケールアップまたはスケールダウンできます。また、クラスタを終了してコストを削減し、別のアベイラビリティゾーンで素早く復元することもできます。

S3をサポートするHBaseは、5.2.0以降のEMRリリースで利用できます。 S3をデータストアとして使用するには、ストレージモードを設定し、HBase設定でルートディレクトリを指定します。また、EMRFSの整合性のあるビューを有効にすることをお勧めします。詳細については、Apache HBase on Amazon S3を参照してください。

HBase on S3リードレプリカクラスタの使用例

HBase on S3を使用すると、データを安全かつ永続的に保存することができます。データをクラスタ外に維持し、クラスタの終了時に永続的な書き込みに対するデータ損失の危険性を排除します。ただし、まれにクラスタまたはアベイラビリティゾーンに障害が発生した場合でも、HBaseのデータの高い可用性をより確実にしたい場合があります。別のケースは、複数のクラスタがS3上の同じルートディレクトリにアクセスできるようにする場合です。バルクロード、書き込み、およびコンパクション中に負荷が高くなるプライマリクラスタがある場合、この機能を使用すると、セカンダリクラスタを作成して、読み取り負荷を書き込み負荷から分離し、読み取りSLAを満たし、同時に、コストとパフォーマンスを最適化することができます。

次の図は、リードレプリカなしのHBase on S3を示しています。このシナリオでは、クラスタ障害やアベイラビリティゾーンの障害などのイベントにより、ユーザーはHBase上のデータにアクセスできなくなります。

HFilesとメタデータを含むHBaseのルートディレクトリは、S3:

EMR 5.7.0以前は、複数のクラスタを同じルートディレクトリにポイントすることができませんでした。高可用性を必要とするアーキテクチャでは、S3上で重複データを作成する必要がありました。

EMR 5.7.0のリリースで、S3上の同じHBaseルートディレクトリに接続できる複数のHBase読み取り専用クラスタを起動できるようになりました。これにより、リードレプリカクラスタを介して常にデータにアクセスできるようにし、複数のアベイラビリティゾーンにわたってクラスタを実行できます。

リードレプリカありのHBase on S3を使用して、発生しうるダウンタイムイベントの前後のアーキテクチャ例をいくつか示します。

同じアベイラビリティゾーン内のHBaseリードレプリカ – プライマリクラスタの障害に対して復元力があります。

異なるアベイラビリティゾーン内のHBaseリードレプリカ – アベイラビリティゾーンの障害に対して復元力があります。

HBase on S3リードレプリカを使用することについて考えられるもう一つの素晴らしい方法は、適切な負荷に対してクラスタのサイズを適切に調整できることです。たとえば、読み込み負荷が軽いと予測しても高可用性を確保したい場合は、リードレプリカのサイズを小さくして、インスタンスの種類を小さくすることができます。

追加の例としては、バルクロードのシナリオがあります。このシナリオでは、バルクロード中にピーク負荷まで書き込みクラスタをスケールアップします。バルクロード完了後、クラスタを最小サイズに戻します。スケーリングの間、読取り専用レプリカは読取り専用のサイズを維持することも、多種多様なサイジングを割り当てることもできます。

ウォークスルー

HBase on S3リードレプリカ環境をセットアップするには、次の手順を実行します。この機能は、EMR 5.7.0以降でのみ使用できます。

HBase on S3を使用してEMRクラスタを作成する

aws emr create-cluster --termination-protected --applications Name=Hadoop Name=Hive Name=HBase Name=Spark Name=Phoenix --ec2-attributes '{"InstanceProfile":"EMR_EC2_DefaultRole"}' --release-label emr-5.7.0 \
--instance-groups '[{"InstanceCount":1,"InstanceGroupType":"MASTER","InstanceType":"m3.xlarge","Name":"Master - 1"},{"InstanceCount":20,"BidPrice":"0.15","InstanceGroupType":"CORE","InstanceType":"m3.2xlarge","Name":"Core - 2"}]' \
--configurations '[{"Classification":"emrfs-site","Properties":{"fs.s3.consistent.retryPeriodSeconds":"1","fs.s3.consistent":"true","fs.s3.consistent.retryCount":"5","fs.s3.consistent.metadata.tableName":"YOUR_CONSISTENT_VIEW_TABLE_NAME"},"Configurations":[]},{"Classification":"hbase","Properties":{"hbase.emr.storageMode":"s3","hbase.emr.readreplica.enabled":"true"},"Configurations":[]},{"Classification":"hbase-site","Properties":{"hbase.rootdir":"s3://YOUR_S3_LOCATION"},"Configurations":[]}]' \
--service-role EMR_DefaultRole --name 'HBase Read Replica'

JSONサンプル構成:

[  
   {  
      "Classification":"hbase-site",
      "Properties":{  
         "hbase.rootdir":"s3://{S3_LOCATION}",
      }
   },
   {  
      "Classification":"hbase",
      "Properties":{  
         "hbase.emr.storageMode":"s3",
         "hbase.emr.readreplica.enabled":"true"
      }
   }
]

プライマリにデータを追加する

HBaseリードレプリカを使用してシステムをロードするときは、プライマリクラスタからのすべての書き込みがHFilesとしてS3にフラッシュされていることを確認する必要があります。リードレプリカクラスタはこれらのHFilesを読めますが、まだMemstoreからフラッシュされていない新しい書き込みを読み取ることができません。リードレプリカクラスタが最新のデータを読み取っていることを確認するには、次の手順を実行します。

  • HBaseプライマリクラスタに通常どおりデータを追加します(大量のデータの場合はバルクロードの利用をお勧めします)。
  • データが(flushコマンドを使用して)S3にフラッシュされていることを確認します。注:これは、バルクロードを使用しない場合にのみ関連します。
  • リージョンの分割やマージが完了するのを待って、hbase:metaテーブルが一貫性のある状態になっていることを確認します。
  • リージョンの変更(分割、マージ)またはテーブルメタデータの変更(テーブルの追加/削除)が行われている場合は、
  • リードレプリカクラスタでrefresh_metaコマンドを実行します。
  • リードレプリカクラスタで、更新されたテーブルのrefresh_hfilesコマンドを実行します。

レプリカからデータを読み込む

以上を経て、通常はクラスタのデータを読み取ることができます。

プライマリクラスタからの読み取りのスクリーンショット

リードレプリカクラスタからの読み取りのスクリーンショット

ご覧のとおり、両方のクラスタが同じ値を返します。

リードレプリカの一貫性を維持する

リードレプリカクラスタの整合性を維持するには、次の一般的なガイドラインに従ってください。

リードレプリカで:

次の場合に’refresh_hfiles’を実行します。

  • レコードがテーブルに対して追加/変更された。

次の場合に ‘refresh_meta’を実行します。

  • リージョンが変更された(分割、コンパクション)、または、テーブルのメタデータが変更されました(テーブルの追加/削除)

プライマリクラスタで:

コンパクションが有効になっている場合は、コンパクションを実行して、メジャーコンパクションがトリガーされたときの不一致を防ぎます(マイナーコンパクションは適宜処理されます)。

関連するプロパティとコマンド

HBaseプロパティ:

コンフィグ デフォルト 例示
hbase.meta.table.suffix “”

メタテーブル名に接尾辞を追加します:

value=’test’ -> ‘hbase:meta_test’

hbase.global.readonly.enabled false クラスタ全体を読み取り専用モードにします
hbase.meta.startup.refresh false

メタテーブルをバッキングストレージと同期させます

新しいテーブルまたはリージョンを取得するために使用されます

注意:hbase.emr.readreplica.enabledがtrueに設定されている場合、これらのコマンドは自動的に設定されます。

HBaseコマンド:

コマンド 説明
refresh_hfiles ‘TABLENAME’

ディスクからHFilesをリフレッシュします

リードレプリカで新しい編集内容を取得するために使用されます

clear_block_cache ‘TABLENAME’ 指定されたテーブルのキャッシュをクリアします
refresh_meta

メタテーブルをバッキングストレージと同期させます

新しいテーブル・リージョンを取得するために使用されます

まとめ

S3に支えられている既存のHBaseクラスタ用の高可用性リードレプリカクラスタを作成できるようになりました。クラスタ障害、I/O集約、および、場合によってはアベイラビリティゾーンに障害が発生した場合でも、HBaseデータへの読み取りアクセスを保持できます。詳細は、HBase on S3リードレプリカクラスタを使用するを参照してください。

ぜひとも、HBase on S3リードレプリカ機能をお試しください!


次のステップ

HDFSからAmazon S3へApache HBaseを移行するためのヒントを読んで、スキルを次のレベルに引き上げましょう。

 

原文:Setting up Read Replica Clusters with HBase on Amazon S3(翻訳:半場光晴)