在hbase中,元数据存储在目录表(即元表)中。此表由hmaster在启动或区域拆分期间或区域负载平衡期间更新。客户机想要获取一些行,从元表中获取区域信息。我的问题是,当我们在特定表中插入新行时,这个元表是如何更新的?例如,我执行了一个put命令,在现有表中插入一个新行,这一行如何反映在meta表中,这样另一个客户机想要获取这一行就可以提取区域信息。
vjhs03f71#
除非添加新区域,否则不需要元更新。meta在系统中只保留一个区域Map(region name->machine)区域包含一组行。假设您有一个包含3个区域的表区域1:[0,3]区域2:[4,6]区域3:[7,9]如果插入以0到3之间的数字开头的键,则数据将插入区域1。如果插入以4到6之间的数字开头的键,则数据将插入区域2中。如果插入以7到9之间的数字开头的键,则数据将插入区域3。当你要一把钥匙时。咨询meta,客户机询问哪个区域包含键x。负责处理该范围的区域将被返回,并且您的操作将被发送到那里。因此,不需要每次插入都更新meta。它是基于关键范围的一切(如果只有一个区域,则该区域将负责处理所有密钥,直到它变大并一分为二。则左侧区域将包含低于原始区域中存在的中间键的键,右侧区域将包含高于原始区域中存在的中间键的键)
1条答案
按热度按时间vjhs03f71#
除非添加新区域,否则不需要元更新。
meta在系统中只保留一个区域Map(region name->machine)
区域包含一组行。假设您有一个包含3个区域的表
区域1:[0,3]
区域2:[4,6]
区域3:[7,9]
如果插入以0到3之间的数字开头的键,则数据将插入区域1。如果插入以4到6之间的数字开头的键,则数据将插入区域2中。如果插入以7到9之间的数字开头的键,则数据将插入区域3。
当你要一把钥匙时。咨询meta,客户机询问哪个区域包含键x。负责处理该范围的区域将被返回,并且您的操作将被发送到那里。
因此,不需要每次插入都更新meta。它是基于关键范围的一切(如果只有一个区域,则该区域将负责处理所有密钥,直到它变大并一分为二。则左侧区域将包含低于原始区域中存在的中间键的键,右侧区域将包含高于原始区域中存在的中间键的键)