CPU各核負載量很不均勻,內存也沒有用滿,系統的資源沒有獲得充分利用,該如何利用?markdown
(1)Spark的RDD的partition個數建立task的個數是對應的;oop
(2)Partition的個數在hadoop的RDD中由block的個數決定的。spa
內存:系統總內存數 = work內存大小 * work數 = SPARK_WORKER_MEMORY * SPARK_WORKER_INSTANCEScode
CPU: 系統總的task數 = work數 * work所佔的cores數 = SPARK_WORKER_INSTANCES * SPARK_WORKER_CORES內存
- 例子:Cpu(12core) mem(48G)計算task並行度,內存分配狀況,調優參數:
- SPARK_WORKER_INSTANCES=12
- SPARK_WORKER_CORES=1
- SPARK_WORKER_MEMORY=4G
若是沒有在spark-env.sh配置文件中配置以上參數,那麼Spark運行默認是系統全部的資源,以下圖:hadoop
若是在spark-env.sh文件中配置了以上參數,則:ci
- export SPARK_WORKER_MEMORY=4g
- export SPARK_WORKER_CORES=1
- export SPARK_WORKER_INSTANCES=12