hbase操作(shell 命令,如建表,清空表,增删改查)以及 hbase表存储结构和原理
两篇讲的不错文章
http://www.cnblogs.com/nexiyi/p/hbase_shell.html
http://blog.csdn.net/u010967382/article/details/37878701?utm_source=tuicool&utm_medium=referral
hbase操做
hbase web操作
访问地址 http://hmaster:60010
hmaster的ip配置在$HBASE_HOME/conf/hbase-site.xml中
ip映射成主机名
在env/hosts中配置
在windows系统中的C:\Windows\System32\drivers\etc目录下的hosts文件中配置)
hbase shell 基本操作:
hbase shell 进入hbase console命令
whoami 查用户
help查看基本命令集合
help command 查看命令帮助
list看库中所有表
status 查看当前运行服务器状态
version 版本查询
exits '表名字' 判断表存在
hbase shell中删除为 ctrl + backspace(单按删除键不好使)
1)建表
语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
具体命令
hbase(main):004:0> exists 'test'
hbase(main):005:0> create 'test','cf'
hbase> create 't1', {NAME => 'f1', VERSIONS => 5}
hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
省略模式建立列族
hbase> create 't1', 'f1', 'f2', 'f3'
指定每个列族参数
hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
hbase> create 't1', 'f1', {SPLITS => ['10', '20', '30', '40']}
hbase> create 't1', 'f1', {SPLITS_FILE => 'splits.txt'}
hbase> # Optionally pre-split the table into NUMREGIONS, using
hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
设置不同参数,提升表的读取性能。
create 'lmj_test',
{NAME => 'adn', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'},
{NAME => 'fixeddim', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'},
{NAME => 'social', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}
每个参数属性都有性能意义,通过合理化的设置可以提升表的性能
create 'lmj_test',
{NAME => 'adn', BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'},
{NAME => 'fixeddim',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'},
{NAME => 'social',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0',COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'}
2)建表后查看表:describe
得出
{NAME => 'lmj_test',
FAMILIES =>
[
{NAME => 'adn', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'},
{NAME => 'fixeddim', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'},
{NAME => 'social', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}
]
}
3)清空表:truncate ‘lmj_test’
4)删除表:
分两步,首先disable 'lmj_test',然后drop 'lmj_test'
5)修改表结构:先disable后enable
alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
例如:修改表test1的cf的TTL为180天
hbase(main)> disable 'test1'
hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'test1'
6)对表中记录的操作(4种行操作)
put 增加一行
语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
其中,timestamp可以系统默认,也可以自己设定,如
put 't1', 'r1', 'c1', 'value', ts1
put 'lmj_test','00001','adn:adn_3','aaa',1432483200000
put 'lmj_test','00001','fixeddim:appcategory_1','1',1432483200000
put 'lmj_test','00001','fixeddim:interest_15','100',1432483200000
get查询对应数据(可以指定行、列族、列、版本)
get 'lmj_test','000000104257464',{TIMESTAMP=>1432483200000}
delete 删除数据
删除指定行中指定列:
delete <table>, <rowkey>, <family:column> , <timestamp>(必须指定列名,删除其所有版本数据)
delete 'lmj_test','000000104257464','f1:col1'
删除整行数据(可不指定列名):
deleteall <table>, <rowkey>, <family:column> , <timestamp>
deleteall 'lmj_test','000000104257464'
scan 扫描全表,指定过滤条件,返回对应行
scan 'lxw_hbase', {LIMIT => 1}
其他条件继续添加在大括号中
以上4个操作类是 org.apache.hadoop.hbase.client的子类,参考官网API查看详细信息
count统计表中记录数
count 'lxw_hbase', {INTERVAL => 100, CACHE => 500}
#每100条显示一次,缓存区为500
7)表操作权限
给用户分配对每个表的操作权限,有RWXCA五种,对应READ, WRITE, EXEC, CREATE, ADMIN
grant 'liu_mja','RW','lxw_hbase' #分配给用户liu_mja表lxw_hbase的读写权限
还可以 查看权限
user_permission 'lxw_hbase'
收回权限
revoke 'liu_mja','lxw_hbase'
8)命名空间
关系数据库系统中,命名空间namespace是表的逻辑分组,同一组中的表有类似的用途。
以下引自:
(http://blog.csdn.net/u010967382/article/details/37878701?utm_source=tuicool&utm_medium=referral)
hbase的表也有命名空间的管理方式,命名空间的概念为即将到来的多租户特性打下基础:
配额管理( Quota Management (HBASE-8410)):限制一个namespace可以使用的资源,资源包括region和table等;
命名空间安全管理( Namespace Security Administration (HBASE-9206)):提供了另一个层面的多租户安全管理;
Region服务器组(Region server groups (HBASE-6721)):一个命名空间或一张表,可以被固定到一组 regionservers上,从而保证了数据隔离性。
命名空间可以被创建、移除、修改。
建表时可以指定命名空间,格式如下:<namespace>:<table>
#Create a namespace
create_namespace 'my_ns'
#create my_table in my_ns namespace
create 'my_ns:my_table', 'fam'
#drop namespace
drop_namespace 'my_ns'
#alter namespace
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
预定义的命名空间:
有两个系统内置的预定义命名空间
hbase 系统命名空间,用于包含hbase的内部表
default 所有未指定命名空间的表都自动进入该命名空间
使用默认的命名空间
#namespace=default and table qualifier=bar
create 'bar', 'fam'
指定命名空间
#namespace=foo and table qualifier=bar
create 'foo:bar', 'fam'
hbase原理及时间戳管理介绍
分布式的、面向列的开源数据库
hdfs文件存储
MR处理数据
zookeeper做协同服务
hbase 表
数据以表存储
表含行、列,列分为列簇(family)
如图,
key1,key2,key3是三条记录的唯一row key值,
column-family1,column-family2,column-family3是三个列族
每个列族下包括几列,如列族 column-family1包括两列column1和column2
row这个维度用于region切分
column则不用于分片,和row不同的是,一个row中多个columns的put或者delete操作是一个原子事务(同一个原子事务中不能同时put和 delete)
Row key和column key(HBase中也称为qualifier)是bytes类型,而时间维度的key则是long integer类型,典型使用 java.util.Date.getTime()或者System.currentTimeMillis()来做为时间维度的key。
唯一的确定一个cell数据:由row key1、column-family1、column1找到值集,值集按时间戳t排列,按有效期取得每个对应时间的值t1:abc,t2:gdxdf
每个cell的值可能包含多个版本,以timestamp索引,倒序排列,默认为最近一个版本,时间戳最大
(1) Row Key:nosql数据库中记录的主键,在 hbase内部保存为字节数组(字典序排列存储), 任意字符串(最大长度是 64KB)。读有位置相关性,经常一起读的行要放到一起存储。
注意:int类型数据的字典序是1,10,100,118,11,12,128,15,16。恢复成int数值的自然序,在行键的左侧全部填充0(左填充0)。
(2) 列族 column family:是schema的一部分(而列不是),必须在用表前先定义。列名以列族为前缀,
create 'test','cf'
put 'test','001','cf:c1','a1',1432483200000
put 'test','002','cf:c2','a2'
put 'test','001','cf2:c1','a1',1432483200000 报错ERROR: Unknown column family! Valid column names: cf:*
(3) cell: 无类型,全部存储为字节码
(4) 时间戳 timestamp管理(多版本数据有效期设置)
每个cell的值可能包含多个版本,以timestamp索引,倒序排列(最近数据在最前面,默认取最近的数据)。时间戳的类型是 64 位整型。时间戳可以自动生成,也可以自己设定。避免数据版本冲突则时间戳必须具有唯一性。
版本具有有效期,超过有效期则删除。有两种方式回收版本,称为 GC(垃圾收集)
列值版本的保存数量限制,通过两种方式设置
1, version设置保留版本数。超过则删除最老的,
创建Column Family时通过HColumnDescriptor.setMaxVersions(int versions)设置,这是Column Family级别,设置是即时生效,读取时读不了,但物理删除还是需要等到major compact操作中执行。设置为1只保留一个
2,TTL(Time To Live)设置保留时间。超过TTL则删除,默认是forever。
通过 HColumnDescriptor.setTimeToLive(int seconds)可以设置TTL。读操作如Get/Scan等是即时生效,但物理清除要等到major compact。一行row中所有cell的TTL都失效,则删除整行,HBase不显示建立或删除行,行中cell有值且有效,行就存在。
注意,version版本控制中,major compact不进行,则删除最近版本后,失效版本可以重新恢复为有效值
put的时间戳
默认使用的是currentTimeMillis。应用也可以使用自定义的值来做为每个列的 timestamp,只需要是一个long integer的值即可,不一定是时间
而get默认返回timestamp最大值的数据
delete的时间戳
1. 删除某个timestamp之前所有老版本
(指定timestamp比row中最新的版本大,则相当于删除整行,不是立即删除元数据,而是等到major compact时)
2. 删除某个timstamp点的版本
hbase操作(shell 命令,如建表,清空表,增删改查)以及 hbase表存储结构和原理的更多相关文章
- django-orm框架表单的增删改查
08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject dja ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查
python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...
- Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)
JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式 (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...
- SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询
SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...
- TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。
TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...
- vue.js带复选框表单的增删改查
近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id=&qu ...
- spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...
- Python--day42--mysql操作数据库及数据表和基本增删改查
sql语法规则: 一.操作文件夹 1.创建数据库db2:create database db2; 2.创建数据库db2并标明数据库的编码格式为utf8:create database db2 defa ...
- Django-Model操作数据库(增删改查、连表结构)
一.数据库操作 1.创建model表 基本结构 1 2 3 4 5 6 from django.db import models class userinfo(models.M ...
随机推荐
- 51 nod 1766 树上的最远点对(线段树+lca)
1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...
- 习题9-5 UVA 242
Stamps and Enovelope Size 题意: 给你最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素. 如果不止一个集合结果相 ...
- bzoj3224Tyvj 1728 普通平衡树 treap
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 17706 Solved: 7764[Submit][St ...
- FJOI2017 RP++
嗯如果算得没错大概十二小时之后就是省选二试了 这次考试貌似就在我们学校 虽然机子挺旧的基本没用过 平时训练都是在专门的机房 其实貌似压力不是很大 因为一试跪了TAT 那时候还是图样 T3按照惯例是 ...
- [APIO2008]
A.免费道路roads 题意:给定n个点m条边的图,边有黑白颜色,求是否有一个生成树满足恰好有K条黑边,并输出方案. 题解:先加白边,求出必须加的黑边,然后加黑边到K条,剩下的用白边填充. 顺便说说, ...
- [APIO2011]
来自FallDream的博客,未经允许,请勿转载,谢谢. ------------------------------------------------------ A.[Apio2011]方格染色 ...
- C++ 实参和形参
形参:在函数没有调用的时候,函数的形参并不占据实际的内存空间,也没有实质的值,--正如字面意思那样,"形式"参数,只是一个"形式. 实参:当函数被调用的时候,系统会为形式 ...
- Amazon新一代云端关系数据库Aurora(上)
本文由 网易云发布. 在2017年5月芝加哥举办的世界顶级数据库会议SIGMOD/PODS上,作为全球最大的公有云服务提供商,Amazon首次系统的总结 了新一代云端关系数据库Aurora的设计实现 ...
- day4 liaoxuefeng---函数
一.调用函数: 调用abs函数:取绝对值函数, >>> abs(100) 100 >>> abs(-20) 20 >>> abs(12.34) 1 ...
- Python作业之多级菜单
作业之多级菜单 菜单实现要求: 1. 列出菜单选择供选择 2. 选择对应内容进入下一级菜单 3. 任何时候都可以选择退出程序或返回上一级菜单 具体代码如下: goods = {'华为':{'A系':{ ...