Cloudera Data Platform(CDP)は、ApacheHBaseデプロイメントがテーブルデータを保存するためのメインの永続化レイヤーとしてAmazonSimple Storage Service(S3)を使用できるようにするすぐに使えるソリューションを提供します。 Amazon S3は、従量制のコスト構造で高度な耐久性を提供するオブジェクトストアです。 S3で実行または管理するサーバー側のコンポーネントはありません。必要なのはS3クライアントライブラリとAWSクレデンシャルだけです。ただし、HBaseには整合性のあるアトミックファイルシステムが必要です。つまり、結果整合性のあるオブジェクトストアであるため、S3を直接使用することはできません。 CDHとHDPはどちらも、HBaseがS3をネイティブに使用することを妨げる長年の障害があったため、HDFSのみを使用してHBaseを提供してきました。これらの問題に対処するために、CDPを介して初めて提供するすぐに使えるソリューションを構築しました。 CDPでオペレーショナルデータベース(HBase)クラスターを起動すると、HBase StoreFiles(HBaseテーブルのバッキングファイル)がS3に保存され、HBase先行書き込みログ(WAL)が通常どおりHBaseと一緒に実行されるHDFSインスタンスに保存されます。
このアーキテクチャに組み込まれる各コンポーネントと、それぞれが果たす役割について簡単に説明します。
S3Aファイルシステムアダプターは、標準のファイルシステムAPIを介してS3のデータにアクセスするためにHadoopによって提供されます。 S3Aアダプターを使用すると、Hadoop APIに対して作成されたアプリケーションは、HDFSのように「hdfs:// namenode:8020 /」ではなく「s3a://my_bucket/」の形式のURIを使用してS3のデータにアクセスできます。使用するデフォルトの「ファイルシステム」を指定できるため、HDFSを使用するオンプレミスクラスターからS3を使用するクラウドベースのクラスターへの「リフトアンドシフト」スタイルの移行が非常に簡単になります。 HBaseは、すべてのアプリケーションデータのベースストレージロケーション(HDFSのディレクトリやS3バケットなど)で構成できます。これにより、データがHDFSであるかS3であるかに関係なく、HBaseが同じように機能できるようになります。
S3GuardはApacheHadoopプロジェクトの一部であり、アプリケーションに対して透過的なS3Aアダプターの一貫したディレクトリリストとオブジェクトステータスを提供します。これを実現するために、S3Guardは一貫性のある分散データベースを使用してS3に加えられた変更を追跡し、クライアントが常にS3から正しい状態を確認できるようにします。 S3Guardがないと、HBaseはHBaseテーブルに追加された新しいStoreFileを認識しない可能性があります。 HBaseが一時的にファイルを監視しなかった場合でも、HBaseでデータが失われる可能性があります。ただし、S3guardは、HBaseがS3を使用するために必要なすべてを提供するわけではありません。
HBase Object Store Semantics(または単に「HBOSS」)は、S3GuardとHBaseの間のギャップを埋めるために特別に構築されたApacheHBaseプロジェクトの下にある新しいソフトウェアプロジェクトです。 HBOSSは、S3AアダプターとS3Guardの上部にあるファサードであり、分散ロックを使用して、HBase操作が原子的にできるようにします。 S3でファイルを操作します。 HBaseがアトミック性を必要とする1つの例は、ディレクトリの名前変更です。 S3クライアントでは、名前の変更は、ソースデータのコピー先へのコピーと、それに続くソースデータの削除として実装されます。 HBOSSが提供するロックがないと、HBaseは名前変更操作が進行中であることを確認し、データ損失を引き起こす可能性があります。この分散ロックを実現するために、HBOSSはApacheZooKeeperを使用します。すべてのHBaseサービスが一緒に動作することを保証するために、HBaseはすでにZooKeeperインスタンスを必要としているため、ZooKeeperの再利用は仕様によるものです。したがって、HBOSSを組み込むことで、追加のサービス管理の負担が不要になり、HBaseがS3GuardでS3を使用するために必要なギャップが埋められます。
StoreFilesにS3を使用するようにHBaseを構成すると、ユーザーにとって多くのメリットがあります。そのような利点の1つは、ユーザーがストレージとコンピューティングを分離できることです。 HBaseにアクセスする必要がない場合は、HBaseをクリーンにシャットダウンし、すべてのコンピューティングリソースを再利用して、運用コストを削減できます。 HBaseアクセスが再度必要になった場合、S3の同じデータを指すように、HBaseクラスターを再作成できます。起動時に、HBaseはS3のデータからのみ再初期化できます。
S3を使用してHBaseStoreFilesを保存することには、いくつかの課題があります。そのような問題の1つは、HDFSと比較してS3のファイルをランダムにルックアップするためのレイテンシーが増加することです。 S3アクセスのレイテンシーが増加すると、HBaseの取得とスキャンに通常のHDFSよりも時間がかかります。 S3の遅延は、HDFSの0.1〜9ミリ秒の範囲と比較して、10〜100ミリ秒の範囲で変化します。 CDPは、BucketCacheを使用するようにHBaseを自動的に構成することにより、このS3レイテンシーの影響を減らすことができます。 BucketCacheを有効にすると、S3の待機時間は、StoreFileがS3から初めて読み取られたときにのみ発生します。 HBaseはファイルを読み取った後、生データをキャッシュして、低速のS3読み取りを高速のローカルメモリ読み取りに置き換えようとします。 HBaseクラスターがCDPを介して起動されると、S3から最近読み取ったデータをメモリ内にキャッシュして、「ホット」データの読み取りを高速化するように自動的に構成されます。
これらの新機能をユーザーに提供できることを非常に嬉しく思います。今日、CDPのオペレーショナルデータベーステンプレートでS3上で実行されているHBaseを試してみてください!