day012hbase

1.hbase的数据库介绍(掌握)

2.hbase的基础架构(掌握)

3.hbase的集群的搭建

4.hbase shell

5.hbase的api开发(重点)

6.hbase的底层原理(重点)

​ 1)hbase的详细架构

​ 2)hbase的数据读写流程

7.rowkey的设计技巧

1.hbase数据库的介绍

​ hbase:是一个数据库。数据库来源于google的BigTable论文。典型的key/value形式的数据存储,是一个nosql的数据库。是一个列式存储的数据库。是建立在hdfs的基础之上。

​ hbase只能支持简单的事务处理,只能一列一列的插入数据。

​ hbase的特点:

​ 1)大:存储大量的数据。

​ 2)无模式:一行中可以有多个不同的列。

​ 3)面向列:数据是按照列式进行存储。

​ 4)稀疏:对于空的列,不会占用存储空间。

​ 5)数据多版本:每个数据单元可以根据version设置进行多版本数据的存储。

​ 6)数据类型单一:hbase中的数据类型是单一的,是byte[]

hbase的表结构:

​ 1)rowkey:行键,作为主键进行查询

​ 数据查询的三种方式:

​ 1)通过rowkey查询一条数据:

​ 2)通过rowkey的范围查找数据:startrowkey endrowkey

​ 3)全表扫描:

​ rowkey是按照字典的顺序排序。

​ 2)列族:表示多个列的一个聚合,创建表的时候一定要定义(schema)

​ 一般建议一张表最多有个3个列族即可。

​ 3)列:指列族下的某一个列,是数据存储的一个位置。

​ 4)时间戳: 数据的存储和修改的时间。

​ 5)版本:表示一个列族下的数据的不同版本。

​ 6)cell(单元格)由{row key, column(= + ), version} 唯一确定的单元。

​ 2.habse的架构

​ 1)client:主要用于提交或者读取数据,首先访问zookeeper,通过返回的信息找到管理的regionserver进行数据的操作。

​ 2)HMaster:

​ 1)管理HRegionserver的负载均衡。

​ 2)为regionserver分配region。

​ 3)负责失效的HRegionserver,并重新分配其管理的region给其他的server。

​ 3)HRegionserver:

​ 1)用于负责管理region,一个server可以管理不同表的多个region。

​ 2)负责切分(split)过大的region

​ 3)负责小的hfile的合并

​ 4) region:分布式存储的最小单元,存储的是张表的部分或全部数据。

​ 5)zookeeper:

​ 1)管理hmaster的HA。

​ 2)Hregionserver要向zookeeper进行状态的注册。

​ 3)负责监控Hregionserver的状态信息,监控服务的上线和下线。

​ 4)注册metaregionserver的元数据管理节点

3.hbase部署

​ 详见文档

4.hbase shell

​COMMAND GROUPS:
Group name: general
Commands: status, table_help, version, whoami

Group name: ddl
Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

Group name: tools
Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_mob, compact_rs, flush, major_compact, major_compact_mob, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, trace, unassign, wal_roll, zk_dump

Group name: replication
Commands: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config, list_peer_configs, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs, update_peer_config

Group name: snapshots
Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot

Group name: configuration
Commands: update_all_config, update_config

Group name: quotas
Commands: list_quotas, set_quota

Group name: security
Commands: grant, list_security_capabilities, revoke, user_permission

Group name: procedures
Commands: abort_procedure, list_procedures

Group name: visibility labels
Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility

Group name: rsgroup
Commands: add_rsgroup, balance_rsgroup, get_rsgroup, get_server_rsgroup, get_table_rsgroup, list_rsgroups, move_servers_rsgroup, move_tables_rsgroup, remove_rsgroup

​ 1)help 查看命令信息

​ 2)list 列出用户表

​ 3)创建一张user表,包含info 和data列族

​ create ’user‘,’info‘,’data‘

​ 或者

​ create 'user', {NAME => 'info', VERSIONS => '3'},{NAME => 'data'}

​ 4)添加数据 put

​ put 'user', 'rk0001', 'info:name', 'zhangsan'

​ 5)查询数据 get 只能获取一条数据

​ get ’user‘,’rk0001‘

​ 查看指定列族的数据

​ get ’user‘,’rk0001‘,’info‘

​ 查看rowkey指定列族指定字段的值

​ get ’user‘,’rk0001‘,’info:name

​ 6)指定rowkey与列值查询

​ get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}

​ 7)指定rowkey与列值的模糊查询

​ get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

​ 8)查询所有数据

​ scan 'user'

​ 9)列族查询

​ scan ’user‘,{COLUMNS => 'info'}

​ scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}

​ 10)多列族查询

​ scan 'user', {COLUMNS => ['info', 'data']}

​ 11)指定列族与某个列名查询

​ scan 'user', {COLUMNS => 'info:name'}

​ 12)指定列族与列名以及限定版本查询

​ scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

​ 13)指定多个列族与按照数据值模糊查询

​ scan 'user', {COLUMNS => ['info', 'data'], FILTER =>"(QualifierFilter(=,'substring:a'))"}

​ 14)rowkey的范围值查询

​ scan 'user', {COLUMNS => 'info', STARTROW=> 'rk0001', ENDROW => 'rk0003'}

​ 注意:查询范围是左包又不包

​ 15)指定rowkey模糊查询 --rowkey的前缀过滤器(专用过滤器)

​ scan 'user',{FILTER=>"PrefixFilter('rk')"}

​ 删除数据

​ delete 'user', 'rk0001', 'info:name'

​ 删除列族

​ alter 'user', NAME => 'info', METHOD => 'delete'

​ 清空表数据

​ truncate 'user1'

​ 删除表

​ disable 'user'

​ drop 'user'

8.rowkey的设计技巧

​ 1)rowkey的长度原则:默认最大可以存储64k长度的数据。

​ rowkey越短越好,最好不要超过16个字节。

​ 2)rowkey的散列原则:将rowkey打散,分散在不同region中进行管理。(热点)

​ 3)rowkey的唯一原则:一行数据rowkey一定是唯一的。

解决热点问题的方法:

​ 1)加盐:在rowkey前面加上一个随机数,rowkey会散列的分散在不同的分区中。

​ 2)哈希:保证单列的原则。

​ 3)反转:将rowkey前后反转,保证数据的散列。

​ 4)时间戳反转

猜你喜欢

转载自www.cnblogs.com/jeasonchen001/p/11300498.html