6

私を悩ませる2つの基本的な質問:

  • ハイブがテーブルを格納するために使用する 32 個のファイルのそれぞれが固有のマシンにあることを確認するにはどうすればよいですか?
  • その場合、Hive が 32 のマッパーを作成した場合、それぞれがローカルデータで動作することをどのように確認できますか? hadoop/hdfs はこの魔法を保証しますか? それとも、スマートなアプリケーションとしての hive がそれを確実に実現しますか?

背景: 私は 32 台のマシンからなるハイブ クラスターを持っています。

  • 私のすべてのテーブルは"CLUSTERED BY(MY_KEY) INTO 32 BUCKETS"
  • 私が使うhive.enforce.bucketing = true;
  • 確認したところ、実際にすべてのテーブルが 32 個のファイルとしてユーザー/ハイブ/ウェアハウスに保存されています
  • HDFS レプリケーション係数 2 を使用しています

ありがとう!

4

2 に答える 2

5
  1. データの配置は HDFS によって決定されます。マシン全体でバイトのバランスを取ろうとします。レプリケートするため、各ファイルは 2 台のマシンに配置されます。つまり、データをローカルで読み取る候補マシンが 2 台あるということです。
  2. HDFS は各ファイルの保存場所を認識しており、Hadoop はこの情報を使用して、データが保存されているホストと同じホストにマッパーを配置します。ジョブのカウンターを見て、「データ ローカル」および「ラック ローカル」のマップ タスク数を確認できます。これは、心配する必要のない Hadoop の機能です。
于 2011-08-04T22:46:38.907 に答える
1

結合がなければ、データの局所性のための通常の Hadoop Map Reduce メカニズムが使用されます (Spike の回答で説明されています)。
特にハイブについては、マップの結合について言及します。マップのみの結合のテーブルの最大サイズをハイブに伝えることができます。テーブルの 1 つが十分に小さい場合、Hive は分散キャッシュ メカニズムを使用してこのテーブルをすべてのノードに複製し、すべての結合プロセスがデータに対してローカルで行われるようにします。プロセスの適切な説明があります: http://www.facebook.com/note.php?note_id=470667928919

于 2011-08-05T08:49:45.113 に答える