Hbase Schema设计与数据模型操作
一、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 ’<table name>’,’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 ‘<table name>’ 示例:
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 ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’示例:
hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds
删除表的所有单元格:
使用 “deleteall” 命令,可以删除一行中所有单元格。
语法:
deleteall ‘<table name>’, ‘<row>’,示例:
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
Hbase Schema设计与数据模型操作相关推荐
- HBase Schema设计简介
原文 HBase与传统的关系数据库(如MySQL.PostgreSQL,Oracle等)非常不同,它的架构和提供给HBase的功能使用它的应用程序. HBase权衡了其中一些功能,以实现可扩展性和灵活 ...
- mysql schema设计_mongodb 的 schema 设计方法
mongodb 的schema设计方法 前言 mongodb是NoSQL的代表,从使用关系型数据库(MySQL)到使用非关系型数据库(mongodb),其中的一些以前的设计的思维惯性总是在不知不觉的影 ...
- 案例篇-HBase RowKey 设计指南
1.为什么 Rowkey 这么重要 1.1 RowKey 到底是什么 我们常说看一张 HBase 表设计的好不好,就看它的 RowKey 设计的好不好.可见 RowKey 在 HBase 中的地位.那 ...
- hbase动态更改行键设计_谈笑间学会Hbase Rowkey设计
谈笑间学会-Hbase Rowkey设计 1.为什么Rowkey这么重要 1.1.Rowkey是什么 类似于MySQL.Oracle中的主键,用于标示唯一的行 完全是由用户指定的一串不重复的字符串: ...
- TiDB数据库schema设计之表结构设计
TiDB数据库schema设计之表结构设计 Schema的KV映射原理 聚簇表和非聚簇表 非聚簇表的写热点问题 分区表 TiDB的数据类型 TIDB的自增ID 聚簇表自增ID的写热点问题 Schema ...
- PCTP考试学习笔记之二:TiDB 数据库 schema 设计
作者: OnTheRoad 原文来源: https://tidb.net/blog/6a1007ff 本系列学习笔记根据官方课程<TiDB 高级系统管理 [TiDB v5]>整理,感谢官方 ...
- Phoenix schema的 启用、操作、关闭
SCHEMA 的启用.操作.关闭 1,启用 SCHEMA 注意: Phoenix 中将 HBase 的 namespace 叫做 SCHEMA,相当于 mysql 中的库的概念. (1)默认 Phoe ...
- Hbase基础介绍-2 数据模型
Hbase基础介绍-2 数据模型 二.Hbase数据模型(数据格式:列族:列修饰符:值) 1.结构 (1)NameSpace: (2)表(table): (3)行(Row): (4)列(Column) ...
- B-07 Django-第二部分(熟练掌握)-模型(Model)设计-数据访问操作(记录查询-基本)
模型(Model)设计-数据访问操作(查询操作介绍与基本API) 文章目录 模型(Model)设计-数据访问操作(查询操作介绍与基本API) 回顾 a.模型(Model)设计流程过程说明 目标 参考 ...
最新文章
- IT人请注意你的身体![转]
- 在mac上安装 docker
- 大数据和云计算时代的机遇
- ubuntun中文读书笔记
- 【计算机系统设计】实践笔记(6)改进数据通路:lw和sw指令
- POJ 3264 Balanced Lineup 【线段树】
- 查询商品列表报错This application has no explicit mapping for /error, so you are seeing this as a fallback
- python dataframe的某一列变为list_Pandas某一列是列表,怎么展开呢?
- 颠覆传统!麦肯锡的数字化咨询:只用5步,打造创新的数据架构
- Extjs项目使用技巧————文件上传
- (转)李嘉诚:成功源于花90%时间考虑失败
- 把栏杆拍遍--辛弃疾
- exchange 2010高可用平台的搭建和配置
- 搜狗拼音、QQ拼音输入法、2345拼音输入法、百度输入法 、手心输入法对比。(个人体会)...
- 瞅瞅Levels.fyi发布的2020年度程序员收入报告
- 免费的人脸识别SDK(基于 Java 实现的人脸识别功能)
- 史上超级详细:银行外包java面试题目
- Java--Mac系统终端编译运行java文件
- 畅谈癌症的过去现在未来
- iphone与android共享位置,如何使用“查找我”在iPhone和其他设备上共享您的位置...
热门文章
- 七牛云的存储对象的地区对应表
- 国内外常用学术网站(访问不了“谷歌学术”的,试一试有惊喜哦)
- 《落》用计算机弹,《坦克世界》里的防崩落内衬和水套的意思?AP弹和HE弹的具体用法(主流坦克哪些平适合AP哪些适合HE)?...
- 刑侦科推理试题(不知来源,最右APP看到)
- Cisco路由器的硬件结构、重要存储设备Flash和NVRAM
- 学习资料怎么打印,能用手机直接打印学习资料
- H5 Canvas实现荣誉证书生成器
- 2023二建各科资料
- mongodb 批量转换大写字符
- ubuntu 中安装 meld 的方式