Apache Hive と Apache HBase はビッグデータ向けの素晴らしいツールです。その機能には重複する部分もありますが、両者には、特定のタスクにより適した独自の特質があります。主な違いは以下の通りです:
- Apache Hive は Hadoop の上に構築されたデータウェアハウスシステムであり、Apache HBase は HDFS (Hadoop 分散ファイルシステム)または Alluxio の上に構築された NoSQL キー/バリューである。
- Hive は Spark/Hadoop データに SQL 機能を提供し、HBase は Hadoop データをリアルタイムで保存および処理する。
- HBase はリアルタイムのクエリやビッグデータに使われるが、Hive はリアルタイムのクエリには向いていない。
- Hive はデータの分析クエリに最適で、HBase は主に非構造化 Hadoop データをレイクとして保存または処理するために使用される。
結局のところ、Apache Hive と Apache HBase を比較するのは、リンゴとミカンとか、Google と Facebook を比較するようなものです。両者の実体は似ていますが、ユーザーに同じ機能を提供するわけではありません。ただ、両者の違いを差し置いても、Apache Hive とApache HBase は、ビッグデータを扱う際に使う素晴らしいツールです。そこで本記事では、Apache Hive と Apache HBase の詳細と、その様々な機能がビッグデータを扱う際にどのようにビジネスを改善させられるのか見ていきます。
Apache Hive とは
まずは Apache Hive から「Hive と Hbase」の検証を始めましょう。Apache Hive は Hadoop の上に構築されたデータウェアハウスシステムであり、Hadoop の非構造化データの大規模なプールに対して、データの要約、分析、クエリを提供します。また、Apache の HDFS に保存されたデータや、Apache HBase に保存されたデータもクエリでき、そのデータは MapReduce、Spark、または Tez によって実行できます。
そして、Apache Hive では、バッチ MapReduce ジョブのクエリに「HiveQL(または 「HQL」)」と呼ばれる SQL のような言語が使用されます。そして Hive は、INSERT/DELETE/UPDATE/MERGE ステートメントのような ACIDトランザクションにも対応しています。また、アップデート3.0 から、テーブルスキーマ制約を減らしてベクトル化されたクエリにアクセスできるようにすることで、Hive には追加機能がいくつか追加されました。
一言で言えば、Apache Hive は Spark/Hadoop データに SQL 機能を提供し(MapReduce の Java API は必ずしも使いやすいとは言えない)、豊富な統合機能とユーザーに優しい機能を備えたデータウェアハウスシステムとしても ETLツールとしても役割を果たします。また、Apache Pig などの多くの類似製品と同様に、Hive は技術的にさまざまな機能を数多く扱うことができ、例えば、MapReduce のジョブのために長い Java を書く代わりに、Hive では SQL を使うことができます。自身のスタックで Hive を利用する理由は、ニーズによって変わってくるでしょうね。
Hive の核となる機能
SQL に 詳しい人だと、Hadoop と統合された様々なデータストアにあるデータを Hive でクエリすることができます。また、Hive は JDBC (Java Database Connectivity)に準拠しているので、既存の SQL ベースのツールとも統合できます。そして Hive のクエリは、デフォルトでテーブル内の全データを対象とするため、時間がかかる可能性がありますが、それにもかかわらず、Hive のパーティショニング機能によってデータ量は制限されます。パーティショニングにより、別々のフォルダに保存されたデータに対してフィルター・クエリを実行し、クエリに一致するデータのみを読み込むことができるのです。例えば、ファイル名の一部に日付形式が含まれている場合、特定の日付の間に作成されたファイルだけを処理するような使い方ができます。
以下に Hive の特徴を挙げましょう:
- SQL を使う
- Apache Spark と Tez の素晴らしい統合がある
- UDF(ユーザー定義関数)を色々と試すことができる
- Hive 3 以降の優れた ACID テーブルがある
- 巨大な Hadoop データセットにクエリをかけることができる
- BI ツール、Pig、Spark、HBase などの豊富な統合機能がある
- HiveMall のような他の Hive ベースの機能は、独自の機能をさらにいくつか提供することができる
Apache HBase とは
Apache HBase は、HDFS または Alluxio の上で動作する NoSQL のキー/バリューストアです。HBase の操作は、Hive と違って MapReduce のジョブではなくデータベース上でリアルタイムに実行されるため、HDFS にはないランダムアクセス機能があります。また、HDFS はランダムリードやランダムライトの操作によるリアルタイム分析を扱うようには作られていないので、HBase は HDFS に多くの機能をもたらします。さらに、HBase は、Hadoop 経由で処理されるリアルタイムデータのデータストアとして設定でき、MapReduce と統合することもできる上に、Hive や MapReduce と統合して SQL 機能を得ることもできます。
また、HBase にはテーブルがあり、テーブルはカラムファミリーに分割されます。(スキーマで宣言された)カラムファミリーは特定のカラムのセットをグループ化します(カラムにはスキーマの確定は不要)。例えば、[message(メッセージ) ]カラムのファミリーは、 [to(送信先)]、[from(送信元)]、[date(日付)]、[subject(件名)]、および [body(内容)]が含まれるかもしれません。そして HBase の各キー/値のペアは[セル]として確定され、各キーは[行キー]、[カラムファミリー]、[カラム]、[タイムスタンプ]で構成されます。HBase の行は、行キーで識別されるキー/値のマッピングのグループであり、HBase は Hadoop のインフラを利用し、水平方向に拡張します。
一言で言えば、HBase は、ほぼリアルタイムの読み取り/書き込みニーズに応じて Hadoop データを保存または処理できます。これには構造化データと非構造化データの両方が含まれますが、HBase は非構造化データを得意としています。また、HBase は低レイテンシーで、シェルコマンド、Java API、Thrift、REST 経由でアクセスできます。そして、HBase は Hadoop クラスタのストレージレイヤーであることが多く、Adobe のような巨大ブランドは、Hadoop ストレージのニーズ全てに HBase を活用しています。
HBase の核となる機能
HBase は、Google の Bigtable をモデルにしたキー/値としてデータを保存することで機能し、「行の追加または更新」、「セル範囲を取得するスキャン」、「指定した行のセルを返す」、「テーブルから行、列、または列のバージョンの削除」の4つの主要な操作に対応しています。また、データの過去の値を取得できるように、バージョン管理が可能です(HBaseのコンパクションによってスペースを確保するため、履歴は時々削除される)。そして、スキーマはテーブルとカラムのファミリーにのみ必要ですが、カラムには必要ありません。また、スキーマにはインクリメント/カウンタ機能が含まれています。
以下は、HBase の特徴です:
- Key-value に対応
- ランダムな読み書き操作に対応する NoSQL データベース
-
MOB(メディアオブジェクト)のサポート
-
コプロセッサに対応。これは、大量のデータを計算する場合に非常に便利で、MapReduce ジョブと同様に追加の利点で動作する
-
Apache Phoenix を活用できる
- スキャン操作を実行できる
Hive と HBase の制限とは
どのツールにも長所と短所があるように、Hive と HBaseにも常に一定の制限が存在します。以下で、その制限について見てみましょう。
Hive の制限
まず、Hive には非常に基本的な ACID 関数があり、それは Hive 0.14から搭載されましたが、MYSQL のような成熟度はありません。とはいえ、ACID サポートはありますし、パッチを当てる度にかなり良くなっています。
また、Hive のクエリは一般的にレイテンシが大きく、Hadoop 上でバッチ処理を実行するため、クエリの結果を得るまでに数分から数時間かかることもあります。さらに、データの更新は複雑で時間がかることもあります。
さらに、Hive は、特に大容量だと小規模なデータクエリには向いておらず、ほとんどのユーザーはこうしたデータセットのために従来の RDBMS を利用しがちです。
HBase の制限
HBase のクエリはカスタム言語であり、習得にはトレーニングが必要です。SQL のような機能は Apache Phoenix で実現できますが、スキーマの維持が必要です。さらに、HBase は ACID に完全に準拠しているわけではありませんが、特定のプロパティには対応しています。あと、HBase を実行するには、設定、メンテナンス、ネーミングなどの分散調整のためのサーバーである ZooKeeper が必要です。
また、HBase はコプロセスすることによって小さなデータも処理できますが、それでも RDBMS ほど便利ではありません。
Hive と HBase のプラクティス
Hive と HBase は特定のシナリオでは制限があるのと同時に、特定のシナリオで威力を発揮することもあります。以下で Hive と HBase のプラクティスについて見ていきましょう。
Hive のユースケース
Hive は、例えばトレンドやWeb サイトのログなど、一定期間にわたって集められたデータの分析クエリを計算するために使用されるべきです。
通常、Hive ユースケースとして以下の2つがよく見られます:
- HDFS 用の SQL クエリエンジン - Hive は SQL クエリの重要なソースとなり、Hive を活用して Hadoop データレイクに取り組み、Tableau などの BI ツールに接続して可視化することができる。
- HBase、Pig、Spark、Tez を使ったテーブルストレージのレイヤー - 多くの HDFS ツールが Hive をテーブルストレージレイヤーとして使用している、技術的には、これがおそらく Hive の最大のグローバルなユースケースである。
Hive の実際の使用例
現在、Hiveを活用している企業は4,330社以上にのぼり、これは HBase を使用するよりも少ないですが、特にほとんどの企業が依然として SQL スタックを実行しているため、依然として多くのブランドが使用しています。
-
Scribd は Hadoop を使った典型的なデータサイエンスのユースケースとして Hive を使用している。これには、ML(機械学習)、データマイニング、BI ツールのアドホッククエリが含まれ、実際 Scribd は、全体的な Hadoop スタックの一部として Hive を使用しており、これが、Hive が最も快適に適合する場所になっている。また、Hive と HBase を同じクラスタに置いて、ストレージ、処理、アドホッククエリを行うことができる。
-
MedHelp は医師検索機能に Hive を使用している。 Hadoop スタックで1日に何百万ものクエリが処理されているが、Hive はそれをプロ並みに処理する。
-
Last.fm はアドホック・クエリにも Hive を使っており、Hive はここでもいい仕事をしてくれる。Hadoop 上でアドホックなクエリが必要な場合は、Hive に変えるべきである。
- HubSpot、hi5、eHarmony、CNET もクエリに Hive を使っている。
HBase のユースケース
HBase はビッグデータのリアルタイムクエリに最適であり、例えば Facebook ではかつてメッセージ機能に使われていました。対する Hive は結果が出るまでに時間がかかるので、リアルタイムのクエリには使うべきではありません。
HBase は主に、非構造化 Hadoop データをレイクとして保存および処理するために使用されます。HBase を Hadoop の全データのウェアハウスとして使うこともできますが、主に書き込みの多い処理の使用で見られます。
HBase の実際のユースケース
以下のほぼすべてのケースでは、Hadoop のストレージおよび処理ツールとして HBase が使用され、これは、HBase が自然に適合する場所です。
-
Adobe は、HBase の立ち上げ以来、HBase を稼働させており、最初のノードは2008年に稼動し、現在は30台の HDFS ノードで HBase を活用している。また、社内の構造化データと社外の非構造化データの両方に使用している。
-
Flurry は 50の HDFS ノードと HBase を稼働させており、数百億行のためにHBase を使用している。
-
HubSpot は主に顧客データのストレージに HBase を使っている。また、HDFS スタックの一部として、HBase データに対してクエリを実行するために Hive を使用している。
-
X(旧 Twitter)は Hadoop スタックでも HBase を使っており、、ユーザーの検索から得られる内部データに使っている。
-
Streamy は SQL からHBase を使った Hadoop スタックに切り替え、これまで以上に高速な処理が可能になったとしている。
-
Sematext は HBase 用の SMP の生みの親であり、HBase と MapReduce のスタックを使用している。繰り返しになるが、両者はお互いの長所と短所を完全に補完しているため、しばしば Hive を介して活用されてうまく連携している。
- 1万企業以上が HBase を活用しており、そのほとんどが大企業である。現在の技術エコシステムでは、大きなブランドは Hadoop をより頻繁に活用する傾向があるため、HBase は TCS、Marin Software、Taboola、KEYW Corp などの大きなスタックに含まれている傾向がある。
Integrate.io にできること
Apache Hive と Apache HBase はどちらも Hadoop ベースの技術であり、両者はよく似ていますが、Hive と HBase にはそれぞれ固有の機能があります。また、Hive と HBase の違いや類似点を理解することは、特にビッグデータ初心者にとっては混乱しがちですが、Integrate.io を利用すれば、Hadoop ベースのテクノロジーに関するあらゆる疑問に答えることができます。
どちらの Hadoop ベースのテクノロジーが自身のビジネスに適しているかに関わらず、Integrate.io には、HDFS(Hadoop 分散ファイルシステム)の統合ニーズに対応する ETL ツールがすべて揃っていおり、Integrate.io を利用することで、現在業界で利用可能な最も使いやすい ETL およびデータ統合プラットフォームを利用することができます。つまるところ、Integrate.ioは、みなさんが望む HDFA 統合を備えた、完璧で使いやすいクラウドベースのETLツールなのです。
Hive または HBase ツールをビジネスに統合しませんか?早速こちらにお問い合わせ頂き、14日間のデモまたはトライアルのスケジュールを設定して、Integrate.io が皆さんの目標達成をどのようにお手伝いできるかをぜひご確認ください。