更新时间:2024-09-10 GMT+08:00

Impala用开发建议

Coordinator和Executor分离部署,Coordinator根据集群规模部署2-5个

Coordinator承担缓存元数据,解析SQL执行计划,和响应客户端请求的功能主要使用jvm内存,而Executor承担数据读写,算子计算等功能,主要使用offheap内存;拆分后可有效提升内存使用率;另外,所有的SQL执行统计均在Coordinator中记录,分离后可通过访问几个Coordinator节点获取整个集群的SQL运行情况,可减少运维压力。

根据业务需求,配置impala资源池和资源队列,核心业务使用单独的队列隔离,并配置mem_limit和exec_time_limit_s避免大查询

使用资源队列可避免不同业务相互抢占资源,相互影响,具体请参考Impala启用并配置动态资源池

OBS存储开启本地缓存

OBS数据存储场景可根据业务需求配置本地缓存,提升读取速率,配置单盘100GB本地缓存示例:—data_cache=/srv/BigData/data1/impala:100GB

HDFS存储开启短路读

HDFS存储场景下可开启短路读,提升读取速率,具体请参考:https://impala.apache.org/docs/build/html/topics/impala_config_performance.html

新建表,新增分区等表结构变动操作后,执行Invalidate metadata <table>, 在数据入库/湖后,对于发生变化的表/分区进行主动refresh更新impala元数据

在非Impala引擎(Hive,Spark等)新建、修改表,需要在Impala侧执行Invalidate metadata <table>同步表schema信息,需要查询该表时才会同步全量元数据;而新增分区,插入数据等场景可主动执行refresh即可增量更新元数据。

定时使用compute increment stats <table_name>刷新常用表的统计信息,加速查询

Impala依赖表统计信息对查询消耗的资源做预估,准确的统计信息有利于Impala更合理地解析执行计划,分配资源。

定时进行小文件合并,减少单表的文件数量,提升元数据加载速率

Impala元数据和分区、文件数量正相关,太多分区会导致Impala元数据占用内存过大,刷新元数据时需要扫描的分区文件就越多,极大地降低查询效率。

建表时存储类型建议选择orc或者parquet

orc和parquet是列式存储格式,读取效率更高,而且有更高的压缩率,可有效降低数据存储空间。