1

4 ノード クラスターがあり、すべてのノード (名前ノード 1 つとデータ ノード 3 つ) に Hive がインストールされています。

名前ノードにアクセスしています。ファイルを入れたいときにどうなりますか。名前ノードとデータ ノードの間で内部的に何が起こっているのでしょうか?

同様に、データノード経由でファイルを配置したい場合はどうなりますか?

そして、Hive で作成したテーブルはどこに格納されるのでしょうか?

4

1 に答える 1

0

HDFS がどのように機能するかについては、こちらの優れたコミックをご覧になることをお勧めします。何が起こるかを要約するには:

  • クライアントはブロック サイズ (デフォルトは 64Mb) を知っているので、ファイルをこのブロック サイズで定義されたブロックに分割することから始めます。
  • 次に、ブロックごとに NameNode にクエリを送信して、このブロックを書き込むことができるデータノードと、書き込み先のデータノードの数 (レプリケーション ファクター) を尋ねます。
  • Namenode は、クライアントからの距離の昇順でソートされたデータノード アドレスのリストで応答します。
  • クライアントは、他のデータノードのアドレスとともに、ブロックデータを最も近いデータノードに送信します。
  • 最初のデータノードは、クライアントから提供されたリストにある最も近いデータノードに受信データをストリーミングし、この 2 番目のデータノードにもリストを渡します。
  • 2 番目のデータノードも同じことを行い、必要に応じてデータを別のデータノードにストリーミングします。
  • 入力ファイルの特定のブロックのデータノードにすべてのデータが書き込まれると、それらはすべて、このブロックの格納が完了したことを Namenode に通知します。
  • データノードが完了すると、クライアントは入力ファイルの他のブロックに対して同じことを行うように要求します。
  • すべてのブロックがこのように保存されると、クライアントは Namenode に完了を通知し、Namenode がこのファイルに関するメタデータをディスクに保持できるようにします。

少し複雑ですが、それがプロトコルの外観です。

Hive でテーブルを作成すると、このテーブルに関するメタデータ (列、SerDe、場所など) が、すべての Hive テーブルの中央リポジトリである Hive メタストアに入ります。このメタストアにはいくつかのバックエンドがあり、最も一般的なものは Derby または MySQL であり、これはプロパティjavax.jdo.option.ConnectionURLjavax.jdo.option.ConnectionDriverNameHive 構成で制御されます。最終的に、データは によって制御されるディレクトリの HDFS に配置されhive.metastore.warehouse.dirます/user/hive/warehouse

于 2013-06-03T07:42:13.607 に答える