Hive随談(三)-Hiveとデータベースの異同
テキストリンク:http://www.alidata.org/archives/551
要旨:HiveはSQLのクエリー言語HQLを採用しているため、Hiveをデータベースとして理解しやすい.実は構造的に見ると、Hiveとデータベースは似たようなクエリー言語を持っている以外に、似たようなところはありません.この文書では、Hiveとデータベースの違いについていくつかの側面から説明します.データベースはOnlineのアプリケーションで使用できますが、Hiveはデータウェアハウスのために設計されていることがわかり、Hiveの特性をアプリケーションの観点から理解するのに役立ちます.
Hiveとデータベースの比較
クエリー言語
HQL
SQL
データストアの場所
HDFS
RawデバイスまたはLocal FS
データフォーマット
ユーザー定義
システム決定
データ更新
サポート
サポートされていません
索引
なし
あります
実行
MapRedcue
Executor
じっこうちえん
高い
低い
拡張性
高い
低い
データ規模
大きい
小さい
クエリー言語.SQLはデータウェアハウスに広く応用されているため、Hiveの特性に特化してクラスSQLのクエリー言語HQLを設計した.SQL開発に詳しい開発者は、Hiveを使って開発するのに便利です.
データ格納場所.HiveはHadoop上に構築されており、すべてのHiveのデータはHDFSに格納されている.データベースは、ブロック・デバイスまたはローカル・ファイル・システムにデータを保存できます.
データ形式Hiveには専用のデータフォーマットは定義されていません.データフォーマットはユーザーが指定できます.ユーザーがデータフォーマットを定義するには、列区切り記号(通常はスペース、"t"、"x 001")、行区切り記号(""")、およびファイルデータを読み込む方法(Hiveにはデフォルトで3つのファイルフォーマットTextFile、SequenceFile、RCFile)を指定する必要があります.データのロード中にユーザデータフォーマットからHive定義のデータフォーマットへの変換は不要であるため、Hiveはロード中にデータ自体を変更することなく、データコンテンツを対応するHDFSディレクトリにコピーまたは移動するだけである.データベースでは、異なるデータベースには異なるストレージエンジンがあり、独自のデータフォーマットが定義されています.すべてのデータは一定の組織に従って格納されるため、データベースがデータをロードするプロセスに時間がかかります.
データ更新.Hiveはデータウェアハウスアプリケーション向けに設計されているため,データウェアハウスの内容は読み書きが少ない.したがって,Hiveではデータの書き換えや追加はサポートされず,すべてのデータはロード時に決定される.一方、データベース内のデータは、通常、頻繁に変更する必要があるため、
索引.以前にも述べたように、Hiveはデータのロード中にデータを処理したり、スキャンしたりしないため、データの一部のKeyにインデックスを作成したりしていません.Hiveがデータの中で条件を満たす特定の値にアクセスする場合,データ全体を暴力的にスキャンする必要があるため,アクセス遅延が高い.MapReduceの導入により、Hiveはデータに並列にアクセスできるため、インデックスがなくても大きなデータ量のアクセスに対してHiveは依然として優位性を体現することができる.データベースでは、通常、1つまたは複数のカラムに対してインデックスが作成されるため、少量の特定の条件のデータへのアクセスでは、データベースの効率が高く、遅延が低くなります.データのアクセス遅延が高いため、Hiveはオンラインデータクエリに適していないことが決定されました.
を選択してもアクセスできます.Hiveのほとんどのクエリの実行は、Hadoopが提供するMapReduceによって行われます(select*from tblのようなクエリにはMapReduceは必要ありません).データベースには通常、独自の実行エンジンがあります.
実行遅延.前述したように、Hiveはデータをクエリーする際にインデックスがないため、テーブル全体をスキャンする必要があるため、遅延が高い.もう1つのHive実行遅延が高い要因は、MapReduceフレームワークである.MapReduce自体には高い遅延があるため、MapReduceを使用してHiveクエリを実行する場合も高い遅延が発生します.対照的に、データベースの実行遅延は低い.もちろん、この低さには条件があります.すなわち、データ規模が小さく、データ規模がデータベースの処理能力を超えるほど大きい場合、Hiveの並列計算は明らかに優位性を体現することができます.
拡張性.HiveはHadoop上に構築されているため、Hiveの拡張性はHadoopの拡張性と一致している(世界最大のHadoopクラスタはYahoo!、2009年の規模は4000台程度).一方、データベースはACIDの意味の厳格な制限のため、拡張行が非常に限られています.現在、最先端のパラレル・データベース・Oracleの理論的な拡張能力も100台程度です.
データ規模.Hiveはクラスタ上に構築され、MapReduceを用いて並列計算が可能であるため、大規模なデータをサポートすることができる.これに対応して、データベースがサポートできるデータの規模は小さくなります.
要旨:HiveはSQLのクエリー言語HQLを採用しているため、Hiveをデータベースとして理解しやすい.実は構造的に見ると、Hiveとデータベースは似たようなクエリー言語を持っている以外に、似たようなところはありません.この文書では、Hiveとデータベースの違いについていくつかの側面から説明します.データベースはOnlineのアプリケーションで使用できますが、Hiveはデータウェアハウスのために設計されていることがわかり、Hiveの特性をアプリケーションの観点から理解するのに役立ちます.
Hiveとデータベースの比較
クエリー言語
HQL
SQL
データストアの場所
HDFS
RawデバイスまたはLocal FS
データフォーマット
ユーザー定義
システム決定
データ更新
サポート
サポートされていません
索引
なし
あります
実行
MapRedcue
Executor
じっこうちえん
高い
低い
拡張性
高い
低い
データ規模
大きい
小さい
クエリー言語.SQLはデータウェアハウスに広く応用されているため、Hiveの特性に特化してクラスSQLのクエリー言語HQLを設計した.SQL開発に詳しい開発者は、Hiveを使って開発するのに便利です.
データ格納場所.HiveはHadoop上に構築されており、すべてのHiveのデータはHDFSに格納されている.データベースは、ブロック・デバイスまたはローカル・ファイル・システムにデータを保存できます.
データ形式Hiveには専用のデータフォーマットは定義されていません.データフォーマットはユーザーが指定できます.ユーザーがデータフォーマットを定義するには、列区切り記号(通常はスペース、"t"、"x 001")、行区切り記号(""")、およびファイルデータを読み込む方法(Hiveにはデフォルトで3つのファイルフォーマットTextFile、SequenceFile、RCFile)を指定する必要があります.データのロード中にユーザデータフォーマットからHive定義のデータフォーマットへの変換は不要であるため、Hiveはロード中にデータ自体を変更することなく、データコンテンツを対応するHDFSディレクトリにコピーまたは移動するだけである.データベースでは、異なるデータベースには異なるストレージエンジンがあり、独自のデータフォーマットが定義されています.すべてのデータは一定の組織に従って格納されるため、データベースがデータをロードするプロセスに時間がかかります.
データ更新.Hiveはデータウェアハウスアプリケーション向けに設計されているため,データウェアハウスの内容は読み書きが少ない.したがって,Hiveではデータの書き換えや追加はサポートされず,すべてのデータはロード時に決定される.一方、データベース内のデータは、通常、頻繁に変更する必要があるため、
INSERT INTO ... VALUES
を使用してデータを追加し、 UPDATE ... SET
を使用してデータを変更することができます. 索引.以前にも述べたように、Hiveはデータのロード中にデータを処理したり、スキャンしたりしないため、データの一部のKeyにインデックスを作成したりしていません.Hiveがデータの中で条件を満たす特定の値にアクセスする場合,データ全体を暴力的にスキャンする必要があるため,アクセス遅延が高い.MapReduceの導入により、Hiveはデータに並列にアクセスできるため、インデックスがなくても大きなデータ量のアクセスに対してHiveは依然として優位性を体現することができる.データベースでは、通常、1つまたは複数のカラムに対してインデックスが作成されるため、少量の特定の条件のデータへのアクセスでは、データベースの効率が高く、遅延が低くなります.データのアクセス遅延が高いため、Hiveはオンラインデータクエリに適していないことが決定されました.
を選択してもアクセスできます.Hiveのほとんどのクエリの実行は、Hadoopが提供するMapReduceによって行われます(select*from tblのようなクエリにはMapReduceは必要ありません).データベースには通常、独自の実行エンジンがあります.
実行遅延.前述したように、Hiveはデータをクエリーする際にインデックスがないため、テーブル全体をスキャンする必要があるため、遅延が高い.もう1つのHive実行遅延が高い要因は、MapReduceフレームワークである.MapReduce自体には高い遅延があるため、MapReduceを使用してHiveクエリを実行する場合も高い遅延が発生します.対照的に、データベースの実行遅延は低い.もちろん、この低さには条件があります.すなわち、データ規模が小さく、データ規模がデータベースの処理能力を超えるほど大きい場合、Hiveの並列計算は明らかに優位性を体現することができます.
拡張性.HiveはHadoop上に構築されているため、Hiveの拡張性はHadoopの拡張性と一致している(世界最大のHadoopクラスタはYahoo!、2009年の規模は4000台程度).一方、データベースはACIDの意味の厳格な制限のため、拡張行が非常に限られています.現在、最先端のパラレル・データベース・Oracleの理論的な拡張能力も100台程度です.
データ規模.Hiveはクラスタ上に構築され、MapReduceを用いて並列計算が可能であるため、大規模なデータをサポートすることができる.これに対応して、データベースがサポートできるデータの規模は小さくなります.