6

Hive クエリのパフォーマンスの向上について、いくつか質問をしました。回答のいくつかは、マッパーとリデューサーの数に関するものでした。複数のマッパーとリデューサーを試してみましたが、実行に違いは見られませんでした。理由はわかりません。私のやり方が間違っていたのか、何か他のことを見逃していたのかもしれません。

Hive クエリを並行して実行することは可能ですか? つまり、通常、クエリはキューで実行されます。例: query1

クエリ2

クエリ3

. . . n

実行に時間がかかりすぎて、実行時間を短縮したい。

Hive JDBC プログラムで mapreduce プログラムを使用するかどうかを知る必要があります。それを並行して実行することは可能ですか? それがうまくいくかどうかはわかりませんが、それが私の目標ですか?

以下の質問を元に戻します。

1) 複数の Hive クエリを並行して実行できる場合、複数の Hive Thrift Server が必要ですか?

2) 複数の Hive Thrift サーバーを開くことは可能ですか?

3) 同じポートで複数の Hive Thrift サーバーを開くことはできないと思いますか?

4) 異なるポートで複数の Hive Thrift サーバーを開くことはできますか?

これに対する解決策を教えてください。他に選択肢があれば、それも試してみます。

4

1 に答える 1

6

ご存じかもしれませんが、Hive は Hadoop と Map-reduce に対する SQL に似たフロントエンドです。Hive での重要なクエリは、Map-Reduce にコンパイルされ、Hadoop で実行されます。Map-reduce は並列処理フレームワークであるため、各 Hive クエリは並行して実行され、データを処理します。Hive はデフォルトで FIFO スケジューラを使用して Hadoop でジョブをスケジュールします。したがって、特定の時間に実行できる Hive クエリは 1 つだけで、最初のクエリが完了すると次のクエリが実行されます。ほとんどの場合、複数の Hive クエリを並列処理するのではなく、個々の Hive クエリを最適化することをお勧めします。Hive クエリを並列化する傾向がある場合は、クラスターが非効率的に使用されていることを示している可能性があります。Hive クエリのパフォーマンスと使用状況をさらに分析するには、次のような分散監視システムをインストールできます。クラスターの使用状況をモニタリングするためのGanglia (Amazon EMR もサポートしています)。

簡単に言うと、map-reduce プログラムを作成する必要はありません。それが、そもそも Hive を使用する目的です。ただし、Hive が知らない可能性があるデータについて知っている可能性のある何かがある場合、Hive クエリの最適なパフォーマンスが得られない可能性があります。たとえば、データが特定の列でソートされていて、Hive がその情報を認識していない可能性があります。そのような場合、Hive でその追加のメタ情報を設定できない場合は、その追加情報を考慮してパフォーマンスを向上させる可能性のある map-reduce ジョブを作成することが理にかなっています。ほとんどの場合、Hive のパフォーマンスは、Hive クエリに対応する Map-reduce ジョブと同等であることがわかりました。

于 2012-05-12T14:59:04.257 に答える