Apache Hiveについての基礎知識

パラフレージング・ウィキペディアであるApache Hiveは、Apache Hadoop上に構築されたデータ・ウェアハウス・インフラストラクチャで、Hadoop Distributed File System (HDFS)や互換性のあるファイル・システムなどの分散ファイル・システムに存在するデータセットの問合せを容易にします。Hiveには、組込み機能に加えて、Oracle NoSQL Databaseなどのデータ・ソースに存在するデータの問合せをサポートするカスタム・インタフェースおよびクラスを指定できるプラガブル・プログラミング・モデルも用意されています。

Hiveインフラストラクチャとそのプラガブル・プログラミング・モデルに加えて、Hiveには便利なクライアント側コマンドライン・インタフェース(Hive CLI)も用意されており、これを使用すると、Hiveインフラストラクチャと対話してHive外部表を作成し、前述のようなリモート・ソースにあるデータにマップできます。

Oracle NoSQL Databaseには、Hive問合せ言語を使用してOracle NoSQL Databaseストア(セキュアまたは非セキュア)に含まれるデータを問合せできるように、Hiveプログラミング・モデルを満たすインタフェースおよびクラスのセットが用意されています。この目的のために定義されたクラスは、Javaパッケージoracle.kv.hadoop.hive.table (Java APIに関する項を参照)にあり、次のHiveおよびHadoopタイプで構成されています。

  • Hiveクラスのサブクラスorg.apache.hadoop.hive.ql.metadata.HiveStorageHandlerHiveStorageHandlerは、Hiveインフラストラクチャが処理するデータの場所およびそのデータの処理方法を指定するためにOracle NoSQL Databaseが使用するメカニズム(プラガブル・インタフェース)です。HiveStorageHandlerは、次のコンポーネントで構成されます。
    • Hadoop MapReduceバージョン1クラスのサブクラスorg.apache.hadoop.mapred.InputFormat。このサブクラスでは、InputFormatを使用して、関連付けられたMapReduceジョブがOracle NoSQL Database表から取得した入力データを読み取る方法を指定します。
    • Hadoop MapReduceバージョン1クラスのサブクラスorg.apache.hadoop.mapred.OutputFormat。このサブクラスでは、OutputFormatを使用して、関連するMapReduceジョブが出力を書き込む方法を指定します。
    • Hiveクラスのサブクラスorg.apache.hadoop.hive.serde2.AbstractSerDeAbstractSerDeクラスとその関連サブクラスを使用して、HiveインフラストラクチャまたはHadoop MapReduceジョブ(あるいはその両方)に取得および送信される表データをデシリアライズし、さらに処理します。現在はサポートされていませんが、このメカニズムを使用して、Oracle NoSQL Database表に書き込むためにHiveへのデータ入力をシリアライズすることもできます。
    • 外部カタログとHiveメタストア・コンポーネントとの同期を維持するためのメタデータ・フック。
    • MapReduceジョブの構成プロパティを設定するためのルールは、処理中のデータに対して実行されます。
    • インタフェースorg.apache.hadoop.hive.ql.metadata.HiveStoragePredicateHandlerの実装。付録「述語のプッシュダウン」で説明されているように、Oracle NoSQL Databaseが提供するHiveStoragePredicateHandlerの実装では、問合せのWHERE句(問合せの述語)をデータベースに渡すことができる情報に分解できるため、問合せのクライアント側ではなくデータベース自体で検索処理の一部(またはすべて)を実行できます。
  • Hadoop MapReduceバージョン1クラスのサブクラスorg.apache.hadoop.mapred.RecordReader。このサブクラスでは、RecordReaderを使用して、Hive問合せの実行時に実行されるMapReduce処理中にマップされたキーと値の検索および取得方法を指定します。
  • Hadoop MapReduceバージョン1クラスのサブクラスorg.apache.hadoop.mapred.InputSplit。このサブクラスでは、InputSplitを使用して、Hive問合せの実行の一環として実行されるMapReduce処理中に動作する個々のマッパーによって処理されるデータを表現します。

詳細は、Apache Hadoop APIおよびHive APIに関する項を参照してください。

次の各項で説明するように、これはOracle NoSQL Databaseによって提供されるHiveStorageHandlerの実装を介し、Hiveインフラストラクチャが特定のOracle NoSQL Databaseストアおよび最終的には目的のHive問合せを実行する表データへのアクセスを取得します。