私はアーキテクチャの観点からHive
を理解しようとしています。そして、Hadoopに関するTomWhiteの本を参照しています。
Hiveに関して、Hive Services
、hiveserver2
、metastore
などの用語に出くわしました。
以下の本の図を参照してください(Hadoop:決定的なガイド)。
私は以下を理解することができません:
1)Hiveアーキテクチャ図のHive Services
とは何ですか? hiveserver2
と言っても同じですか?
2)Hiveアーキテクチャ図のDriver
とは何ですか?
3)MetaStore
とは何ですか(私は[〜#〜] not [〜#〜]メタストアデータベースを参照しています)。実行されるプロセスですか?もしそうなら、これはhiveserver2
の一部ですか?図のように、MetaStore
はリモートにすることができるので、これがJVMプロセスの場合、どのコンポーネントに属しますか?
4)Hive service JVM
、MetaStore JVM Server
と表示されます。しかし、これらのコンポーネントはどこにインストールされますか?それらは「Hive」の「サーバー」側の一部ですか?
5)「Hiveアーキテクチャ」図で「Hiveサーバー」と表示されていますか?これは何ですか?これは、「Hive Server 1」、「HiveServer2」と呼ばれるものです。
誰かがこれを理解するのを助けることができますか?
JDBC/ODBCまたはThriftインターフェースにはドライバーがあります。
クエリを解釈し、実行エンジンコードにコンパイルするプロセスもあります。私は個人的にそれをドライバーではなくインタプリタまたはコンパイラと呼んでいます
HiveServer2の一部ではありません。これは文字通りRDBMS上で実行されるプロセスです(はい、Hive&Hadoopを実行するときにこれらが必要です)。
サポートされているリモートメタストアサーバー= Oracle、MySQL、Postgres
Embedded Metastore(本番環境には推奨されません)= Derby
Hive Wiki を参照してください
メタストアJVM
オレンジ色のボックスは、これらのサービスをドライバー(インタープリター)と同じJVMの一部として、またはリモートサーバーとしてデプロイできることを示しています。 wikiはこれらの設定について説明しています。
これは、HiveServer2クエリをMetaStoreクエリにマッピングするサイドカープロセスだと思います。たとえば、HiveQLをMySQLまたはPostgresからメタデータを読み取るプロセスにどのように変換しますか?
はい、サーバー側で実行できますが、フォールトトレランスとパフォーマンス上の理由から、これは推奨されるセットアップではありません。
HiveServer1は非推奨です 。気軽に読んでください。ただし、使用しないでください。
私の理解は:
Hive Services含まれるもの:HS2(thriftサーバーを呼び出す場合があります)、ドライバー、コンパイラー、実行エンジン。ただし、これら4つのコンポーネント(HS2、ドライバー、コンパイラー、実行エンジン)はすべてhiveserver2プロセスにあります。したがって、Hiveには3つのプロセスがあります。