
# Hudi性能调优
#### 性能调优方式
当前版本Hudi写入操作主推Spark，因此Hudi的调优和Spark比较类似。
#### MOR表的性能调优
由于其本质上是写增量文件，调优可以直接根据Hudi的数据大小（dataSize）进行调整。
- 单节点运行：如果dataSize只有几GB，建议在单节点上运行Spark，或者在Yarn模式下只分配一个container。
- 并行度设置：建议并行度p设置为dataSize / 128M。例如，如果dataSize是10GB，那么p应该设置为10 \* 1024 / 128 = 80。
- 核心数设置：程序分配的核心数应与并行度p保持一致。
- 内存设置：建议内存大小与core数的比例大于1.5:1，即每个core配1.5 GB内存。
- 堆外内存设置：建议堆外内存大小与core数的比例大于0.5:1。
 
#### COW表的性能调优
COW表的原理是重写原始数据，因此这种表的调优，要兼顾dataSize和最后重写的文件数量。总体来说core数量越大越好（和最后重写多少个文件数直接相关），并行度p和内存大小和mor设置类似。
#### Hudi使用LSM和Native提升读写性能
本章节仅适用MRS 3.6.0-LTS.1及之后版本。
1. Native加速特性针对如下场景，可通过参数hoodie.insert.native=true开启：
   - spark bulk_insert写入
   
   - flink append mode写入
    
2. LSM特性针对流式入湖加工场景默认开启：
   - Flink、Spark实时入湖作业
   
   - Flink、Spark实时加工场景
   
   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   1. LSM特性只支持MOR+bucket索引+分区表场景下使用且默认开启，如需关闭可在建表时设置参数hoodie.lsm.style=false。
   
   2. 开启LSM特性的表执行查询以及compaction操作时可以开启native加速，需设置以下参数： **hoodie.spark.native.read=true**
      **hoodie.datasource.write.record.merger.impls = org.apache.hudi.common.model.HoodieArrowEventTimeRecordMerger**
      
     
 
