Presto on-disk processing

2
Sadayuki Furuhashi @frsyuki

現状のPrestoだとクエリごとに別々のパラメータは設定できないけど、簡単に修正できるというか何個かモジュールをinjectするだけで対応できるから、TDではtask.max-memoryとかはクエリごとに別パラメータになっている。query.max-stagesも同じ方法で。

2014-08-23 00:59:39
Sadayuki Furuhashi @frsyuki

snapshotというか中間結果をディスクに落とす仕組みとしてraptorも既に入っているので、スケジューラ次第で対応できる。task.max-disk-ratioとquery.max-stagesは悪くない感じ。

2014-08-23 01:01:41
Sadayuki Furuhashi @frsyuki

今朝のtaks.max-diskとquery.max-stagesはイケてる気がするので、Facebookチームに提案してみようかな。 twitter.com/frsyuki/status… twitter.com/frsyuki/status… twitter.com/frsyuki/status…

2014-08-23 15:25:37
Sadayuki Furuhashi @frsyuki

query.max-stagesならいけるな。stage数が3段を超えるならsnapshotを1回はさんで同期させる。どのstage間で同期させるかは、JOIN→サブクエリ→GROUP BYの順でテキトーに選ぶ。1クエリ辺りの瞬間リソース消費量に最大値を設定できる。

2014-08-23 00:57:25
Sadayuki Furuhashi @frsyuki

query.max-stages=1は、全stage間でsnapshotが挟まることになる。MapReduceとほぼ同程度のクラスタ利用効率を期待できる。たまに遅延重視のクエリを走らせたい場合は、query.max-stages=3くらいのパラメータを付けてクエリを投げればいい。

2014-08-23 00:58:26
Sadayuki Furuhashi @frsyuki

まず考えられるのは、1taskあたりのメモリ使用量の制限と、1taskあたり何GBまでディスクの使用を許可するか、というパラメータ。max.task-disk=2GBのような。max.task-diskはデフォルトでは0で、性能は予測可能だが、クエリはデータ量次第で落ちる。

2014-08-23 00:37:25