Hiveがインストールされているクラスターでは、メタストアとネームノードには何がありますか? Metastoreには、すべてのテーブルスキーマとパーティションの詳細およびメタデータがあることを理解しています。さて、このメタデータは何ですか?では、namenodeには何がありますか?このメタストアはクラスター内のどこにありますか?
NameNodeは、ファイルシステム内のすべてのファイルのディレクトリツリーを保持し、クラスター全体でファイルデータが保持されている場所を追跡します。また、ハートビートメカニズムを通じてすべてのDataNode(Dead + Live)を追跡します。また、リクエストを受信して適切なDataNodeにリダイレクトすることにより、クライアントの読み取り/書き込みを支援します。
メタストアが保存するメタデータには、次のようなものが含まれています。
データベースのID
テーブルのID
インデックスのID
インデックスの作成時
テーブルの作成時
特定のユーザーに割り当てられたロールのID
テーブルに使用されるInputFormat
テーブルなどに使用されるOutputFormat。
これはあなたが知りたかったことですか?
また、クラスター自体にメタストアを含めることは必須ではありません。 JDBC準拠のデータベースを持つ任意のマシン(クラスター内またはクラスター外)をメタストアに使用できます。
HTH
追伸:メタストアの E/R図 が役立つかもしれません。
Hiveデータ(メタデータではない)は、Hadoop HDFSDataNodeサーバー全体に分散されます。通常、データの各ブロックは3つの異なるDataNodeに保存されます。 NameNodeは、どのDataNodeが実際のデータのどのブロックを持っているかを追跡します。
Hive実稼働環境の場合、メタストアサービスは分離されたJVMで実行する必要があります。 Hiveプロセスは、Thriftを使用してメタストアサービスと通信できます。 Hiveメタストアデータは、OracleDBやMySQLなどのACIDデータベースに保持されます。 SQLを使用して、Hiveメタストアにあるものを見つけることができます。
Hiveメタストアのテーブルは次のとおりです。
SQL> select table_name from user_tables;
DBS
DATABASE_PARAMS
SEQUENCE_TABLE
SERDES
TBLS
SDS
CDS
BUCKETING_COLS
TABLE_PARAMS
PARTITION_KEYS
SORT_COLS
SD_PARAMS
COLUMNS_V2
SERDE_PARAMS
各テーブルの構造を説明できます。
SQL> describe partition_keys;
TBL_ID NUMBER
PKEY_COMMENT VARCHAR2(4000)
PKEY_NAME VARCHAR2(128)
PKEY_TYPE VARCHAR2(767)
INTEGER_IDX NUMBER(10)
そして、各テーブルの内容を見つけます。
SQL> select * from partition_keys;
したがって、Hiveで「CREATETABLE xxx(...)PARTITIONED BY(...)」の場合、Hiveのパーティショニングデータはメタストア(Oracle、MySQL ...)データベースに格納されます。
たとえば、Hiveで次のようなテーブルを作成すると、次のようになります。
Hive> create table employee_table (id bigint, name string) partitioned by (region string);
これはメタストアにあります。
SQL> select tbl_id,pkey_name from partition_keys;
TBL_ID PKEY_NAME
------ ---------
8 region
SQL> select tbl_name from tbls where tbl_id=8;
TBL_NAME
--------
employee_table
Employee_tableにデータを挿入すると、データはHadoop DataNodeのHDFSに保存され、NameNodeはどのDataNodeがデータを持っているかを追跡します。
Metastore-メタデータ(Hiveで作成したテーブルに関するすべての詳細)を格納するデータベース。デフォルトでは、HiveにはDerbyデータベースが付属しており、Derbyデータベースを使用します。ただし、MySQLやOracleなどの他のデータベースを使用できます。
メタストアの使用:Hive CLIからクエリを実行すると、実行エンジンはテーブルに関するすべての詳細を収集し、実行プラン(ジョブ)を作成します。 。これらの詳細はMetastoreからのものです。最後に、実行エンジンはジョブをHadoopに送信します。ここから、一般的なHadoop Map Reduceジョブが実行され、結果がHiveに返送されます。名前ノードは実行エンジンと通信して、MRジョブを正常に実行します。
上の図は、HiveとHadoopの通信を理解するのに最適です。
Hive-Metastore(hadoopではない-metastore)について:
HDFSクラスター上でHiveを使用している場合にのみ必要になるため、Hadoop環境にメタストアを配置する必要はありません。
メタストアはHive専用のメタデータリポジトリであり、作成されたデータベースオブジェクトのメタ情報のみを保存するためにHiveによって使用されます(実際のデータではなく、Hiveはデータを保存しないため、すでにHDFSにあります。Hiveはファイルシステムにすでに保存されているデータを使用します)
Hiveの実装には、任意のRDBMSを使用したメタストアサービスが必要でした。
Namenode(hadoop -namenode)について:
クラスターのメタストアのように動作するHadoopのコア部分。
RDBMSではありません。ファイルシステムのメタ情報をファイルシステムにのみ保存します。