Apache Hive


Apache_Hive

Apache Hiveは、データクエリと分析を提供するためにApacheHadoop上に構築されたデータウェアハウスソフトウェアプロジェクトです。 Hiveは、Hadoopと統合されたさまざまなデータベースやファイルシステムに保存されているデータをクエリするためのSQLのようなインターフェイスを提供します。分散データに対してSQLアプリケーションとクエリを実行するには、従来のSQLクエリをMapReduce JavaAPIに実装する必要がHiveは、SQLのようなクエリを統合するために必要なSQL抽象化を提供します(HiveQL)低レベルのJava APIでクエリを実装する必要なしに、基盤となるJavaに。ほとんどのデータウェアハウジングアプリケーションはSQLベースのクエリ言語で動作するため、HiveはSQLベースのアプリケーションのHadoopへの移植を支援します。最初はFacebookによって開発されましたが、Apache Hiveは、NetflixやFinancial Industry Regulatory Authority(FINRA)などの他の企業によって使用および開発されています。 Amazonは、Amazon WebServicesのAmazonElasticMapReduceに含まれているApacheHiveのソフトウェアフォークを維持しています。 Apache Hive 原作者
Facebook、Inc。
開発者
寄稿者
初回リリース
2010年10月1日; 10年前 (2010-10-01)
安定リリース
3.1.2 / 2019年8月26日 ; 2年前  (2019-08-26)
リポジトリ
github .com / apache / hive
で書かれている Java オペレーティング・システム
クロスプラットフォーム
で利用可能 SQL タイプ
データウェアハウス
ライセンス
Apacheライセンス2.0
Webサイト
ハイブ.apache .ORG

コンテンツ
1 特徴
2 建築 3 HiveQL 3.1 例
4 従来のデータベースとの比較
5 安全
6 も参照してください
7 参考文献
8 外部リンク

特徴
Apacheのハイブは、Hadoopのの中に保存された大規模なデータセットの分析をサポートHDFSとのような互換性のあるファイルシステムをAmazon S3のファイルシステムとAlluxioを。HiveQL と呼ばれるSQLに似たクエリ言語に読み取りスキーマを提供し、クエリをMapReduce、Apache Tez 、Sparkジョブに透過的に変換します。3つの実行エンジンはすべて、HadoopのリソースネゴシエーターであるYARN(Yet Another Resource Negotiator)で実行できます。クエリを高速化するためにインデックスを提供しましたが、この機能はバージョン3.0で削除されました Hiveの他の機能は次のとおりです。
プレーンテキスト、RCFile、HBase、ORCなどのさまざまなストレージタイプ。
リレーショナルデータベース管理システムのメタデータストレージ。クエリ実行中にセマンティックチェックを実行する時間を大幅に短縮します。
DEFLATE、BWT、snappyなどのアルゴリズムを使用してHadoopエコシステムに保存された圧縮データを操作します。
日付、文字列、およびその他のデータマイニングツールを操作するための組み込みのユーザー定義関数(UDF)。Hiveは、組み込み関数でサポートされていないユースケースを処理するためのUDFセットの拡張をサポートしています。
SQLのようなクエリ(HiveQL)。暗黙的にMapReduce、Tez、またはSparkジョブに変換されます。
デフォルトでは、Hiveはメタデータを組み込みのApache Derbyデータベースに格納し、MySQLなどの他のクライアント/サーバーデータベースをオプションで使用できます。
Hiveでサポートされている最初の4つのファイル形式は、プレーンテキストシーケンスファイル、最適化された行列(ORC)形式およびRCFileでした。 Apache Parquetは、0.10より後のバージョンで、ネイティブで0.13から始まるプラグインを介して読み取ることができます。 追加のHiveプラグインは、ビットコイン ブロックチェーンのクエリをサポートします。

建築

はリスト形式ですが、散文として読みやすくなる場合が このセクションを変換
Hiveアーキテクチャの主なコンポーネントは次のとおりです。
メタストア:スキーマや場所など、各テーブルのメタデータを格納します。また、ドライバーがクラスター全体に分散されたさまざまなデータセットの進行状況を追跡するのに役立つパーティションメタデータも含まれています。データは従来のRDBMS形式で保存されます。メタデータは、ドライバーがデータを追跡するのに役立ち、それは非常に重要です。したがって、バックアップサーバーは、データが失われた場合に取得できるデータを定期的に複製します。
ドライバー:HiveQLステートメントを受信するコントローラーのように機能します。セッションを作成してステートメントの実行を開始し、実行のライフサイクルと進行状況を監視します。HiveQLステートメントの実行中に生成された必要なメタデータを格納します。ドライバは、Reduce操作の後に取得されたデータまたはクエリ結果の収集ポイントとしても機能します。
コンパイラ:クエリを実行プランに変換するHiveQLクエリのコンパイルを実行します。この計画は、タスクとによって実行されるために必要な手順が含まれHadoopの MapReduceのクエリによって翻訳されたような出力を得るために。コンパイラはクエリを抽象構文木(AST)に変換します。互換性とコンパイル時エラーをチェックした後、ASTを有向非巡回グラフ(DAG)に変換します。 DAGは、入力クエリとデータに基づいて、演算子をMapReduceステージとタスクに分割します。
オプティマイザー:実行プランでさまざまな変換を実行して、最適化されたDAGを取得します。結合のパイプラインを単一の結合に変換するなど、変換をまとめてパフォーマンスを向上させることができます。また、reduce操作の前にデータに変換を適用するなどのタスクを分割して、パフォーマンスとスケーラビリティを向上させることもできます。ただし、使用される最適化に使用される変換のロジックは、別のオプティマイザーを使用して変更またはパイプライン化できます。
エグゼキュータ:コンパイルと最適化の後、エグゼキュータはタスクを実行します。Hadoopのジョブトラッカーと対話して、実行するタスクをスケジュールします。他のすべての前提条件が実行された場合にのみ依存関係のあるタスクが実行されるようにすることで、タスクのパイプライン化を処理します。
CLI、UI、およびThrift Server:コマンドラインインターフェイス(CLI)は、クエリ、指示を送信し、プロセスステータスを監視することにより、外部ユーザーがHiveと対話するためのユーザーインターフェイスを提供します。Thriftサーバーを使用すると、JDBCまたはODBCプロトコルと同様に、外部クライアントがネットワークを介してHiveと対話できます。

HiveQL
HiveQLはSQLに基づいていますが、完全なSQL-92標準に厳密には準拠しHiveQLは、複数テーブルの挿入やselectとしてのテーブルの作成など、SQLにはない拡張機能を提供します。HiveQLには、トランザクションとマテリアライズドビューのサポートがなく、サブクエリのサポートは限られていました。 完全なACID機能を備えた挿入、更新、および削除のサポートは、リリース0.14で利用可能になりました。
内部的に、コンパイラーはHiveQLステートメントをMapReduce、Tez、またはSparkジョブの有向非巡回グラフに変換します。これらは実行のためにHadoopに送信されます。


単語カウントプログラムは、各単語が入力に出現する回数をカウントします。単語数はHiveQLで次のように書くことができます:
DROP TABLE IF EXISTS docs ;CREATE TABLE docs (行 STRING );LOAD DATA INPATH’input_file ‘ OVERWRITE INTO TABLE docs ;CREATE TABLE word_counts ASSELECT ワード、 カウント(1 ) AS カウント FROM (SELECT explode (split (line 、 ‘ s’ )) AS word FROM docs ) tempGROUP BY 単語ORDER BY 言葉。
各ステートメントの簡単な説明は次のとおりです。
DROP TABLE IF EXISTS docs ;CREATE TABLE docs (行 STRING );
テーブルdocsが存在するかどうかを確認し、存在する場合は削除します。呼ばれる新しいテーブルを作成しdocsたタイプの単一の列とSTRING呼ばれるがline。
LOAD DATA INPATH’input_file ‘ OVERWRITE INTO TABLE docs ;
指定されたファイルまたはディレクトリ(この場合は「input_file」)をテーブルにロードします。OVERWRITEデータがロードされているターゲットテーブルを再書き込みすることを指定します。そうしないと、データが追加されます。
CREATE TABLE word_counts ASSELECT ワード、 カウント(1 ) AS カウント FROM(SELECT explode (split (line 、 ‘ s’ )) AS word FROM docs ) tempGROUP BY 単語ORDER BY 言葉。
問合せは、CREATE TABLE word_counts AS SELECT word, count(1) AS countと呼ばれるテーブル作成し、word_counts2列を:wordとcount。このクエリは、内部クエリから入力を引き出します。このクエリは、入力ワードを。としてエイリアスされた一時テーブルの異なる行に分割するのに役立ちます。グループそのキーに基づいて結果。これにより、列には、列の各単語の出現回数が保持されます。アルファベット順に単語を並べ替えます。(SELECT explode(split(line, ‘s’)) AS word FROM docs) temp”tempGROUP BY WORDcountwordORDER BY WORDS

従来のデータベースとの比較
Hiveのストレージおよびクエリ操作は、従来のデータベースの操作と非常によく似ています。HiveはSQL方言ですが、リレーショナルデータベースと比較すると、Hiveの構造と動作には多くの違いが違いは主に、HiveがHadoopエコシステムの上に構築されており、HadoopとMapReduceの制限に準拠する必要があるためです。
スキーマは、従来のデータベースのテーブルに適用されます。このような従来のデータベースでは、テーブルは通常、データがテーブルにロードされるときにスキーマを適用します。これにより、データベースは、入力されたデータがテーブル定義で指定されたテーブルの表現に従っていることを確認できます。この設計は、書き込み時スキーマと呼ばれます。比較すると、Hiveは書き込み時にテーブルスキーマに対してデータを検証しません。代わりに、その後、データが読み取られるときに実行時チェックを実行します。このモデルは、読み取り時にスキーマと呼ばれます。 2つのアプローチには、それぞれ長所と短所がロード時にテーブルスキーマに対してデータをチェックすると、余分なオーバーヘッドが追加されます。そのため、従来のデータベースではデータのロードに時間がかかります。データが破損していないことを確認するために、ロード時にデータに対して品質チェックが実行されます。破損したデータを早期に検出することで、例外を早期に処理できます。データのロード後/ロード中にテーブルがスキーマと一致するように強制されるため、クエリ時間のパフォーマンスが向上します。一方、Hiveは、スキーマチェックなしでデータを動的にロードできるため、初期ロードが高速になりますが、クエリ時のパフォーマンスが比較的遅くなるという欠点がHiveには、ロード時にスキーマが使用できない場合に利点がありますが、代わりに後で動的に生成されます。
トランザクションは、従来のデータベースの主要な操作です。一般的なRDBMSと同様に、Hiveはトランザクションの4つのプロパティ(ACID)すべてをサポートします:Atomicity、Consistency、Isolation、およびDurability。HiveのトランザクションはHive0.13で導入されましたが、パーティションレベルにのみ制限されていました。 Hive 0.14の最近のバージョンでは、完全なACIDプロパティをサポートするためにこれらの機能が完全に追加されました。Hive 0.14以降では、INSERT、DELETE、UPDATEなどのさまざまな行レベルのトランザクションが提供されます。有効INSERT、UPDATEを、DELETEトランザクションは、次のような構成プロパティの適切な値を設定する必要hive.support.concurrency、hive.enforce.bucketingおよびhive.exec.dynamic.partition.mode。

安全
Hive v0.7.0は、Hadoopセキュリティとの統合を追加しました。Hadoopは、セキュリティを提供するためにKerberos認証サポートの使用を開始しました。Kerberosでは、クライアントとサーバー間の相互認証が可能です。このシステムでは、チケットに対するクライアントの要求が要求とともに渡されます。以前のバージョンのHadoopには、ユーザーがhadoop.job.ugiプロパティを設定することでユーザー名をスプーフィングできることや、同じユーザー(hadoopまたはmapred)で実行されているMapReduce操作などのいくつかの問題がありました。Hive v0.7.0とHadoopセキュリティの統合により、これらの問題は大幅に修正されました。TaskTrackerジョブは、それを起動したユーザーによって実行され、hadoop.job.ugiプロパティを設定することによってユーザー名を偽装することはできなくなりました。Hiveで新しく作成されたファイルのアクセス許可は、HDFSによって決定されます。Hadoop分散ファイルシステム認証モデルは、ユーザー、グループ、および読み取り、書き込み、実行の3つの権限を持つその他の3つのエンティティを使用します。新しく作成されたファイルのデフォルトのアクセス許可は、Hive構成変数のumask値を変更することで設定できますhive.files.umask.value。

も参照してください
アパッチピッグSqoop Apache Impala
Apacheドリル Apache Flume Apache HBase

参考文献 ^ ^ 「2019年8月26日:リリース3.1.2が利用可能」。
^ Venner、Jason(2009)。ProHadoop。押してISBN
 978-1-4302-1942-2。
^ ハイブをプログラミング。
^ Hive / Hadoopのユースケーススタディ
^ OSCONデータ2011、エイドリアンコッククロフト、「ネットフリックスでのデータフロー」でのYouTube
^ Amazon ElasticMapReduce開発者ガイド
^ HiveQL言語マニュアル
^ Apache Tez
^ Hive言語マニュアル
^ ラム、チャック(2010)。Hadoopの動作。マニング出版物。ISBN
 978-1-935182-19-1。
^ テキストとHiveを使用したHadoopとビッグデータの最適化テキストとHiveを使用したHadoopとビッグデータの最適化
^ 「ORC言語マニュアル」。ハイブプロジェクトウィキ。
^ 「HiveとHadoopを使用したFacebookのペタバイト規模のデータウェアハウス」(PDF)。2011年7月28日にオリジナル(PDF)からアーカイブされました。
^ 「寄木細工」。
^ マッシー、マット「強力なビッグデータトリオ:Spark、Parquet、Avro」。zenfractal.com。
^ フランケ、イェルン(2016-04-28)。「Hive&Bitcoin:SQLを使用したブロックチェーンデータの分析」。
^ “デザイン-ApacheHive-Apache SoftwareFoundation”。cwiki.apache.org 。
^ 「抽象構文木」。c2.com 。
^ Dokeroglu、Tansel; オザル、セルカン; Bayir、Murat Ali; Cinar、Muhammet Serkan; コサール、アフメット(2014-07-29)。「スキャンタスクと計算タスクを共有することでHadoopHiveのパフォーマンスを向上させる」。クラウドコンピューティングのジャーナル。3(1):1–11。土井:10.1186 / s13677-014-0012-6。
^ 「HiveServer-ApacheHive-ApacheSoftwareFoundation」。cwiki.apache.org 。
^ ホワイト、トム(2010)。Hadoop:決定的なガイド。オライリーメディア。ISBN
 978-1-4493-8973-4。
^ Hive言語マニュアル
^ HiveでのACIDとトランザクション
^ 「MapReduceフレームワークを介したウェアハウジングソリューションのハイブ」(PDF)。2013-10-08にオリジナル(PDF)からアーカイブされました。
^ 「Hiveトランザクションの概要」。datametica.com。
^ 「Hiveトランザクション-ApacheHive-ApacheSoftwareFoundation」。cwiki.apache.org 。
^ 「構成プロパティ-ApacheHive-Apache SoftwareFoundation」。cwiki.apache.org 。

外部リンク
公式サイト
image"