Hbase Schema设计与数据模型操作
创始人
2024-05-28 13:30:02
0

一、Hbase Schema设计

1,Schema 创建

使用 Apache HBase Shell 或使用 Java API 中的 Admin 来创建或更新 HBase 模式。

Configuration config = HBaseConfiguration.create();
Admin admin = new Admin(conf);
TableName table = TableName.valueOf("myTable");admin.disableTable(table);HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1);      // adding new ColumnFamily
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2);    // modifying existing ColumnFamilyadmin.enableTable(table);

2,Schema 更新

当对表或 ColumnFamilies (如区域大小、块大小) 进行更改时,这些更改将在下一次出现重大压缩并重新写入 StoreFiles 时生效。

3,HBase Schema 设计规则

(1)目标区域的大小介于10到50 GB之间。
(2)目的是让单元格不超过10 MB,如果使用 mob,则为50 MB 。否则,请考虑将您的单元格数据存储在 HDFS 中,并在 *HBase 中存储指向数据的指针。
(3)典型的模式在每个表中有1到3个列族。HBase 表不应该被设计成模拟 RDBMS 表。
(4)对于具有1或2列族的表格,大约50-100个区域是很好的数字。请记住,区域是列族的连续段。
(5)尽可能短地保留列族名称。列族名称存储在每个值 (忽略前缀编码) 中。它们不应该像在典型的 RDBMS 中一样具有自我记录和描述性。
(6)如果您正在存储基于时间的机器数据或日志记录信息,并且行密钥基于设备 ID 或服务 ID 加上时间,则最终可能会出现一种模式,即旧数据区域在某个时间段之后永远不会有额外的写入操作。在这种情况下,最终会有少量活动区域和大量没有新写入的较旧区域。对于这些情况,您可以容忍更多区域,因为您的资源消耗仅由活动区域驱动。
(7)如果只有一个列族忙于写入,则只有该列族兼容内存。分配资源时请注意写入模式。

二、HBase数据模型操作

在 HBase 中有四个主要的数据模型操作,分别是:Get、Put、Scan 和 Delete。

1,Get(读取)

Get 指定行的返回属性。

(1)读取通过 Table.get 执行。

语法:
get ’’,’row1’示例:
hbase(main):012:0> get 'emp', '1'COLUMN                     CELLpersonal : city timestamp=1417521848375, value=hyderabadpersonal : name timestamp=1417521785385, value=ramuprofessional: designation timestamp=1417521885277, value=managerprofessional: salary timestamp=1417521903862, value=500004 row(s) in 0.0270 seconds

(1)读取指定列

格式:
hbase>get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}示例:
hbase(main):015:0> get 'emp', 'row1', {COLUMN=>'personal:name'}COLUMN                CELLpersonal:name timestamp=1418035791555, value=raju1 row(s) in 0.0080 seconds

2,Put(写)

Put 可以将新行添加到表中(如果该项是新的)或者可以更新现有行(如果该项已经存在)。Put 操作通过 Table.put(non-writeBuffer)或 Table.batch(non-writeBuffer)执行。

语法:
put ‘table name’,’row ’,'Column family:column name',’new value’示例:
(1)假设 HBase 中有一个表 EMP 拥有下列数据:
hbase(main):003:0> scan 'emp'ROW              COLUMN+CELL
row1 column=personal:name, timestamp=1418051555, value=raju
row1 column=personal:city, timestamp=1418275907, value=Hyderabad
row1 column=professional:designation, timestamp=14180555,value=manager
row1 column=professional:salary, timestamp=1418035791555,value=50000
1 row(s) in 0.0100 seconds(2)以下命令将员工名为“raju”的城市值更新为“Delhi”:
hbase(main):002:0> put 'emp','row1','personal:city','Delhi'
0 row(s) in 0.0400 seconds(3)更新后的表如下所示:
hbase(main):003:0> scan 'emp'ROW          COLUMN+CELL
row1 column=personal:name, timestamp=1418035791555, value=raju
row1 column=personal:city, timestamp=1418274645907, value=Delhi
row1 column=professional:designation, timestamp=141857555,value=manager
row1 column=professional:salary, timestamp=1418039555, value=50000
1 row(s) in 0.0100 seconds

3,Scan(扫描)

Scan 允许在多个行上对指定属性进行迭代。

格式:
scan ‘
’ 示例: public static final byte[] CF = "cf".getBytes(); public static final byte[] ATTR = "attr".getBytes(); ...Table table = ... // instantiate a Table instanceScan scan = new Scan(); scan.addColumn(CF, ATTR); scan.setRowPrefixFilter(Bytes.toBytes("row")); ResultScanner rs = table.getScanner(scan); try {for (Result r = rs.next(); r != null; r = rs.next()) {// process result...} } finally {rs.close(); // always close the ResultScanner! }

4,Delete(删除)

Delete 操作用于从表中删除一行。Delete 通过 Table.delete 执行。HBase 不会修改数据,因此通过创建名为 tombstones 的新标记来处理 Delete 操作。这些 tombstones,以及没用的价值,都在重大的压实中清理干净。

语法:
delete ‘
’, ‘’, ‘’, ‘

删除表的所有单元格:
使用 “deleteall” 命令,可以删除一行中所有单元格。

语法:
deleteall ‘
’, ‘’,示例: hbase(main):007:0> deleteall 'emp','1' 0 row(s) in 0.0240 seconds

使用 Scan 命令验证表。表被删除后的快照如下:

hbase(main):022:0> scan 'emp'ROW                  COLUMN+CELL2 column=personal data:city, timestamp=1417524574905, value=chennai 2 column=personal data:name, timestamp=1417524556125, value=ravi2 column=professional data:designation, timestamp=1417524204, value=sr:engg2 column=professional data:salary, timestamp=1417524604221, value=300003 column=personal data:city, timestamp=1417524681780, value=delhi3 column=personal data:name, timestamp=1417524672067, value=rajesh3 column=professional data:designation, timestamp=1417523187, value=jr:engg3 column=professional data:salary, timestamp=1417524702514, value=25000

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...