2012-04-03 6 views
5

私はHDMSデータストアに対してsqlのようなクエリを実行するためにHive JDBCドライバを使用しています。私は接続プールを処理するためにc3p0を使用しようとしています。私はそれが正しいアプローチであると確信していません。なぜなら、Hiveクエリはかなり長い時間がかかることがあります。つまり、接続がプールに戻されずにかなり長く保持されることを意味します。 c3p0構成の接続も同様です。Hive JDBC接続をプールするベストプラクティス

ハイブjdbc接続をプールするベストプラクティスはありますか? c3p0? DBCP?

MAX_POOL_SIZEはどうですか?それはRDBの通常の設定よりも大きいでしょうか?

答えて

4

大変ですので、あなたが言及しているスレッドの質問は、私がずっと前に私に尋ねたものです:) あなたのユースケースでそれをどのように使用するのが面白いでしょう。

しかし、質問に応じてHiveは必要に応じてHadoopジョブを起動します。 ここでやりたいと思う複数のクエリを実行する場合は、複数のジョブを同時に実行できるジョブスケジューラを使用する必要があります。 Hadoopはデフォルトで先入れ先出し(FIFO)スケジューラを使用して、作業キューからジョブを引き出します。したがって、FairスケジューラまたはCapacityスケジューラに切り替える必要があります。

フェアシェアスケジューラの背後にあるコアアイデアは、平均して各ジョブが利用可能なリソースの均等なシェアを得るようにジョブにリソースを割り当てることでした。

容量スケジューラは、公平スケジューラの原則のいくつかを共有していますが、明確な違いもあります。まず、キャパシティスケジューリングは、複数の独立したコンシューマとターゲットアプリケーションを持つ大規模クラスタに対して定義されました。キャパシティスケジューリングでは、プールの代わりに複数のキューが作成されます。また、各キューには保証容量(クラスタ全体の容量は各キューの容量の合計)が割り当てられます。第二に、待ち行列内のジョブの優先順位付け能力。最後に、キューに対する厳密なアクセス制御の存在があります。

+0

ありがとうございました。私はここでも少し混乱しています.10個のJDBC接続をハイブにプーリングすると、10個のハイブジョブを並列に開くことができますか?仕事が終わったらどうなりますか?そのJDBC接続はプールに戻されますか?次回は、新しいクエリでjdbc接続が行われ、新しいハイブジョブが作成されます。ここでjdbc接続プーリングを使用すると、jdbc接続の作成/削除だけでどのような利点がありますか? – Shengjie

+0

これまでに理解してきたことは、MySqlや、Hiveがメタストアとして使用したDBMSに複数の接続を開くことができますが、複雑なクエリを起動すると、ハイブはMapReduceジョブを作成してあなたのケースではHDFSにあるHive倉庫の結果です。 –

+0

続き...私はプールのような糸のようなものを使用した。私はクラスタの容量に応じてサーバをハイブロスするために10スレッド接続を予約しています。クエリは、「従業員からの名前の選択」が1つのスレッドを消費すると言っています。そのような別のクエリは、もう1つのスレッドを占有するなどと言います。クエリが終了すると、そのクエリに関連付けられたスレッドをスレッドのプールに戻す(チェックイン)。 –

0

Kindaが答えをthis threadで見つけました。私はそれを試して、それがどのように行くか見る。

関連する問題