
# Spark读写Hudi资源配置建议
- Spark读写Hudi任务资源配置规则，内存和CPU核心的比例2:1，堆外内存和CPU核心比例0.5:1；即一个核心，需要2 GB堆内存，0.5 GB堆外内存。 Spark初始化入库场景，由于处理的数据量比较大，上述资源配比需要调整，内存和Core的比例推荐4:1，堆外内存和Core的比例1:1。
  配置示例：
  ```
  spark-submit
    --master yarn-cluster
    --executor-cores  2                          --每个Executor的CPU核心数
    --executor-memory 4g                         --每个Executor的堆内存大小
    --conf spark.executor.memoryOverhead=1024    --每个Executor的堆外内存（MB）
  ```
  
- 基于Spark进行ETL计算，CPU核心与内存比例建议大于1:2，推荐1:4\~1:8。 上一个规则是指纯读写的资源配比，如果Spark的作业除了读写还有业务逻辑计算，该过程会导致需要内存增加，因此建议CPU核心与内存的比例大于1:2，如果逻辑比较复杂适当调大内存，这要基于实际情况进行调整，一般默认推荐配置为1:4\~1:8。
  
- 针对bucket表的写入资源配置，建议给的CPU核心数量不小于桶数目 （分区表每次可能写入多个分区，理想情况下建议给的CPU核心数量=写入分区\*分桶数；实际配置的core小于这个值，写入性能线性下降）。 配置示例：
  当前表bucket数为3，同时写入分区数为2， 建议入库Spark任务配置的core数量大于等于3\*2。
  ```
  spark-submit
    --master yarn-cluster
    --executor-cores 2
    --executor-memory 4g
    --executor-num 3
  ```
  以上配置代表executor-num\*executor-cores=6 \>=分区数\*分桶数=6。
  
 
