reizist's blog

ウェブ

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-configcode-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って。異常では

謎の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

ふー地道に調べるか