功能
每天晚上对单表前一天的segment进行定制化合并.
现有逻辑:
1.使用apache.caacite.avatica.remote.Driver获取connection。
2.获取对应表所有segment,定制化分组
3.sql形式执行merge segments(compact)
瓶颈:
1.近期发现该功能每次执行时长过长,需要优化。
2.本人对carbondata的了解不深,网上对这一块的描述有很少。
暂时的思路:
多线程执行合并操作。
问题:
1. 单表的并发,官网描述很少,只是说明了一个参数指定local_lock还是hdfs_lock(global)。对于我这种只操作segment的操作是锁全表,还是锁对应的需要合并的segments?
2. 一旦使用并发,就要考虑connection的获取甚至重用。carbonData对于这种jdbc的connection数量有限制吗?或者可以参考那个配置参数吗?
3. 这种任务的提交会被yarn调度吗?需要考虑任务提交的数量吗?考虑的话这个临界值需要参考什么?
感谢您的提问。针对您的问题,我的回答如下:
在单表并发的情况下,CarbonData会锁定需要合并的segments,而不是锁定整张表。您可以在CarbonData的配置文件中,通过配置carbon.lock.type
参数来指定锁类型,如果设置为local_lock
表示使用本地锁机制,如果设置为hdfs_lock
则表示使用全局锁机制。
CarbonData对于jdbc的connection数量没有限制,但是您需要考虑到并发的场景下,connection的获取和重用问题,可以使用连接池机制来管理连接。您可以通过配置carbon.pool.size
参数来控制连接池的大小。
任务提交是否会被yarn调度,需要您的具体情况来确定。如果您的任务量较大,可以考虑使用yarn来管理任务,通过配置yarn.scheduler.minimum-allocation-mb
和yarn.scheduler.maximum-allocation-mb
参数来控制任务的内存分配。临界值需要根据您的应用场景和硬件资源来确定。
希望我的回答对您有所帮助,如有任何疑问,请随时追问。