impala集群性能优化

1.    场景:
在一次ETL过程中,将关系型数据库oracle中数据同步到kudu数据库中,开始的两个小时还算正常,
集群网络IO 总和 : 150M / 秒
kudu工作负荷达到:10万次插入或更新 / 秒
过了两个小时后这两个指数迅速下降:
集群网络IO 总和 : 10M / 秒
kudu工作负荷达到:0.1万次插入或更新 / 秒
并且集群磁盘IO总和也从 500M / 每秒 上升到 900M / 秒
定位:Tablet Server能使用的最大内存量,有多大,设置多大,tablet Server在批量写入数据时并非实时写入磁盘,而是先Cache在内存中,在flush到磁盘。这个值设置过小时,会造成Kudu数据写入性能显著下降。对于写入性能要求比较高的集群,建议设置更大的值(一般是机器内存的80%)
解决办法:
调整参数 
memory_limit_hard_bytes 默认值为 1G 调整到10G
block_cache_capacity_mb 默认值为 512M调整到5G
调整后正常
2.    场景:impala并发写入kudu的时候,数据量比较大的时候
这时候kudu配置参数 --memory_limit_hard_bytes能大点就大点,因为kudu写入首先保存再内存里面,到一定阀值才溢写到磁盘,这个是直接最能提高写的方法;
当然不是所有机器都有那么多资源,可以把--maintenance_manager_num_threads这个参数稍微调大,需要调试,提高数据从内存写入磁盘的效率;
3.    场景:内存主要和tablet sever的数据量data on disk、每台ts的hot replicas数量、频繁扫描的列数量、ts的核数、Block Cache有关
每1TB数据占1.5G
每个hot replica占128M
每核扫描一列数据占256k
Block Cache设置值,一般512M
上面的内存之和除以75%,就是需要设置的memory_limit_hard_bytes值
当内存超过memory_limit_hard_bytes*75%,就该增加内存限制了
4.    减少kudu内存压力的几种方式为:
增加内存 通过设置 --memory_limit_hard_bytes.
增加kudu将内存往磁盘中刷写数据的效率
1.增加磁盘数量
2.增加 maintenance_manager_num_threads
在应用端减少写入流量
5.    Kudu

参数

解释

Kudu Tablet Server Hard Memory Limit

kudu tablet server最大能使用的内存,kudu写入数据的时候,是将数据先缓存到内存,然后保存到磁盘,如何设置过低,会影响写入的性能

3GB

Kudu Tablet Server Block Cache Capacity

kudu tablet 块缓存的最大内存量

2GB

maintenance_manager_num_threads

kudu对数据管理的时候最大显成熟

4

6.    Kudu Tablet Server Maintenance Threads
Maintenance manager ( 维护管理 )
maintenance manager 安排并运行后台任务。在任何给定的时间点,maintenance manager 根据当时所需的改进来确定下一个任务的优先级,例如减轻内存压力,提高读取性能或释放磁盘空间。通过设置 --maintenance_manager_num_threads 可以控制专用于运行后台任务的工作线程数。
解释:Kudu后台对数据进行维护操作,如写入数据时的并发线程数,一般设置为4,官网建议的是数据目录的3倍
参数:maintenance_manager_num_threads

猜你喜欢

转载自blog.csdn.net/Allenzyg/article/details/119531488