/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

HiveServer2 のメモリ使用量はパーティション数が関係する

まだ詳しく調べられていないのですがメモ代わりに。

 

先日 HiveServer2 を利用する機会があり、負荷がどのぐらい掛かるかを確認していました。Cloudera の説明によると、同時コネクション数にも依存しますが数GB〜数十GBのヒープ領域が必要だとあります:

Configuring HiveServer2

合わせてこんな注意書きもありました:

These numbers are general guidance only, and may be affected by factors such as number of columns, partitions, complex joins, and client activity among other things.

カラム数、パーティション数、複雑なジョイン処理などに影響して必要なリソース量が変わるということです。

 

今回実行したのは MapReduce が動作する COUNT 関数を入れた SELECT 文と、結果の行数が大きな SELECT 文です。今考えると、これらは上記のいずれにも該当しないので、HiveServer2 に負荷の掛かるクエリではなかったのですが、実際に HiveServer2 上で負荷を確認しても、メモリ使用量がそれほど増えているようには見えませんでした。

これを Stackoverflow に質問したところ、やはりパーティションを多く消費するクエリだとメモリ使用量が大きくなるのでは、とのことでした:

stackoverflow.com

MapReduce であれば、パーティション数によって Mapper / Reducer の数が変わって負荷に直接影響しそうだなとイメージできるのですが、MapReduce を発行する HiveServer 側で負荷が上がる理由がまだ理解できていません。今 象本(4版)の輪読会もしているので、もう少し勉強して、この辺りの感覚がつかめるようになりたいです。