
# 开启Spark Native算子优化
#### 操作场景
Spark Native引擎是Apache Spark的一个核心组件，用于提高Spark SQL计算性而设计。通过使用向量化的C++加速库，实现对Spark算子性能加速。开启Spark Native引擎特性，可以提升Spark SQL的作业性能，减少CPU和内存的消耗。
队列开启Spark Native引擎特性后，当前支持Scan和Filter两种算子开启Spark Native。
- **Scan** ：Scan算子通常由查询语句触发，例如select \* from test_table。
  仅以下条件的Scan算子支持开启Native：
  - Parquet格式的Hive表、Datasource表。
  
  - Orc格式Datasource表。
    
- **Filter**：Filter算子通常由WHERE语句触发，例如：select \* from test_table where id = xxx。
![](https://support.huaweicloud.com/usermanual-dli/public_sys-resources/note_3.0-zh-cn.png)
使用Explain语句可以查看SQL命令触发的算子类型，例如：Explain select \* from test_table。
本节操作介绍开启Spark Native算子优化的操作方法。
#### 约束限制
- 弹性资源池队列开启Spark Native引擎特性需同时满足以下条件：
  - 弹性资源池规格："标准版"。
  
  - 队列类型："SQL队列"。
  
  - Spark引擎版本：Spark 3.3.1及以上版本
   
- default队列当使用Spark 3.3.1及以上版本时，默认不开启Spark Native。
- 支持作业级别关闭Spark Native特性，可以通过在SQL作业的参数设置中配置spark.gluten.enabled=false来实现作业级别关闭Spark Native。
 
#### 开启Spark Native算子优化
- **在弹性资源池中新建SQL队列时可以配置开启Spark Native：**
  配置DLI **Spark Native**加速为开启。
  具体操作请参考[创建弹性资源池并添加队列](https://support.huaweicloud.com/usermanual-dli/dli_01_0505.html)。
  

- **已经创建的弹性资源池中的SQL队列可以通过设置队列属性开启Spark Native：**
  1. 在DLI管理控制台的左侧导航栏中，单击"资源管理 \> 队列管理"。
  
  2. 在对应队列的"操作"列，选择"更多 \> 属性设置"。
  
  3. 进入队列属性设置页面，设置对应的属性值。属性值相关参数说明请参考[表1]。
     ![](https://support.huaweicloud.com/usermanual-dli/public_sys-resources/note_3.0-zh-cn.png)
     已经创建的队列通过DLI管理控制台或API修改Spark Native开关需要重启队列才会生效。
      表1队列属性 
     | 属性名称               | 说明                                                 | 配置样例 |
     |:---|:---|:---|
     | DLI Spark Native加速 | 开启Spark Native引擎特性，可以提升Spark SQL的作业性能，减少CPU和内存的消耗。 | 开启   |
        
     
  
  4. 单击"确定"完成队列属性的设置。
   
 
#### 关闭Spark Native算子优化
- **设置弹性资源池中的SQL队列关闭Spark Native：**
  1. 在DLI管理控制台的左侧导航栏中，单击"资源管理 \> 队列管理"。
  
  2. 在对应队列的"操作"列，选择"更多 \> 属性设置"。
  
  3. 进入队列属性设置页面，设置对应的属性值。属性值相关参数说明请参考[表2]
      表2队列属性 
     | 属性名称         | 说明                                                 | 配置样例 |
     |:---|:---|:---|
     | DLI Native加速 | 开启Spark Native引擎特性，可以提升Spark SQL的作业性能，减少CPU和内存的消耗。 | 关闭   |
        
     
  
  4. 单击"确定"完成队列属性的设置。
   
- **队列开启Spark Native时设置指定作业关闭** **Spark Native** ：
  SQL队列开启Spark Native开关后，如需设置在队列上执行的某个作业不开启Spark Native，
  只需在SQL作业的参数设置中添加配置spark.gluten.enabled=false来关闭Spark Native。
  
 
