prestoの挙動で困っているメモ
何
よく The node may have crashed or be under too much load.
などで PrestoQueryError
が発生するのでログを辿ったところ、
- GCが頻発している
- S3 readが時間がかかっている
- 謎のWARNが発生している
ことを発見したのでメモ
GCが頻発している
2017-08-18T07:04:13.189Z INFO Code-Cache-GC-Trigger com.facebook.presto.server.CodeCacheGcTrigger Triggering GC to avoid Code Cache eviction bugs 2017-08-18T07:05:08.208Z INFO Code-Cache-GC-Trigger com.facebook.presto.server.CodeCacheGcTrigger Triggering GC to avoid Code Cache eviction bugs 2017-08-18T07:05:32.265Z INFO Code-Cache-GC-Trigger com.facebook.presto.server.CodeCacheGcTrigger Triggering GC to avoid Code Cache eviction bugs 2017-08-18T07:05:56.210Z INFO Code-Cache-GC-Trigger com.facebook.presto.server.CodeCacheGcTrigger Triggering GC to avoid Code Cache eviction bugs
GCしすぎちゃうか
解決策はいくつかあり、
CodeCacheSizeをいじる
jvmの各パラメータをいじればよさそう
InitialCodeCacheSize
(byte)ReservedCodeCacheSize
(byte)
CodeCacheThresholdをいじる
classification: presto-config
で code-cache-collection-threshold
をいじればよさそう(config.properties
)
GC1を使えば良さそう
ここは一切チューニング・検証してないのでjust idea JVMとGCについてちゃんと調べなきゃいけないんだけど、Full GCが高い頻度で発生していると問題 Full GCが遅いのは全ての領域対象だから。 New領域のみ対象のScavenge GCなら頻度高くても処理時間はそこまでぽい。
参考: G1GCのつかいどころメモ - nekop's blog
S3 read時間がかかっている
ちょうどquery metricsを取得実装始めていたんだけど、 status: FINISHED
のみ取得しており、結果的にFAILEDな本件では情報無く無事死。
com.amazonaws.latency ServiceName=[Amazon S3], StatusCode=[206], ServiceEndpoint=[https://xxxx.s3-ap-northeast-1.amazonaws.com], RequestType=[GetObjectRequest], AWSRequestID=[xxxx], HttpClientPoolPendingCount=0, RetryCapacityConsumed=0, HttpClientPoolAvailableCount=0, RequestCount=1, HttpClientPoolLeasedCount=4, ResponseProcessingTime=[0.046], ClientExecuteTime=[101.892], HttpClientSendRequestTime=[0.044], HttpRequestTime=[101.613], RequestSigningTime=[0.086], CredentialsRequestTime=[0.0], HttpClientReceiveResponseTime=[73.346],
~みたいなログが20-30行程続いており不穏。なんだ101って。異常では~
[2018/1/5 18:52 追記]
com.amazonaws.metrics (AWS SDK for Java - 1.11.257)
によると単位は milliseconds
なので異常ではない
[追記終わり]
謎のWARNが発生している
Aug 18, 2017 6:44:53 AM WARNING: parquet.hadoop.ParquetRecordReader: Can not initialize counter due to context is not a instance of TaskInputOutputContext, but is org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl
これはバグ?
https://issues.apache.org/jira/browse/SPARK-18660
ふー地道に調べるか