hadoopクラスターの動き方
リソース(メモリがどれくらい割り当てられるか)は、absolute capacity例えば3%、そしてこれは最低保証割り当てメモリみたいな感じ
と、User factor的なもの(ユーザーごとのweightというか、優先度というか)を掛けた値が実際のmaxのリソース上限
例えば,user factorが30であれば 3% x 30で90%、つまりクラスター全体のメモリの90%が上限となる。
クラスターはマルチてナンシーの場合、リソースが空いていたらclientの言いなりで
割り当ててあげますよ。absolute capacityはあくまで最低保証だから、その値超えても全然クラスター的には
問題ない、というか設計でおり。これが上限に達するとか、ほかのジョブのリソースが重なって、クラスターの100%のリソースを
食うと、後続のjobはpendingになるし、場合によっては、リソースのアロケーションが行われる。
設定 https://github.com/apache/spark/blob/master/docs/job-scheduling.md
spark.executor.instances = 0 spark.shuffle.service.enabled = true spark.dynamicAllocation.enabled = true spark.dynamicAllocation.executorAllocationRatio = 1 spark.dynamicAllocation.initialExecutors = 5 spark.dynamicAllocation.maxExecutors = 10 spark.dynamicAllocation.minExecutors = 2 spark.serializer = "org.apache.spark.serializer.KryoSerializer"
インタンスをゼロにしないと
dynamic allocationがonにならない!?
spark.executor.instances = 0
参考
https://mallikarjuna_g.gitbooks.io/spark/spark-dynamic-allocation.html
https://stackoverflow.com/questions/58939303/emr-cluster-shows-too-many-executors-when-spark-dynamic-allocation-is-true
以上です