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
|