两篇讲的不错文章

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表存储结构和原理的更多相关文章

  1. django-orm框架表单的增删改查

    08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject dja ...

  2. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  3. python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查

    python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...

  4. Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)

    JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式                      (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...

  5. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  6. TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。

    TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...

  7. vue.js带复选框表单的增删改查

    近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id=&qu ...

  8. spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站

      1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...

  9. Python--day42--mysql操作数据库及数据表和基本增删改查

    sql语法规则: 一.操作文件夹 1.创建数据库db2:create database db2; 2.创建数据库db2并标明数据库的编码格式为utf8:create database db2 defa ...

  10. Django-Model操作数据库(增删改查、连表结构)

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

随机推荐

  1. [BZOJ]1063 道路设计(Noi2008)

    省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z ...

  2. bzoj1043[HAOI2008]下落的圆盘 计算几何

    1043: [HAOI2008]下落的圆盘 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1598  Solved: 676[Submit][Stat ...

  3. bzoj4361isn 容斥+bit优化dp

    4361: isn Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 375  Solved: 186[Submit][Status][Discuss] ...

  4. PHP中利用DOM和simplxml读取xml文档

    实例  用DOM获取下列xml文档中所有金庸小说的书名,该xml文档所在位置为 ./books.xml: <?xml version="1.0" encoding=" ...

  5. Spring使用@Scheduled定时调度

    一.spring配置文件中增加对这个注解的支持: 配置文件如下: <?xml version="1.0" encoding="UTF-8"?> &l ...

  6. 如何在Google上下载高清原图

    在我们学习和生活中常常一些高清图片作为相关的素材,比如制作PPT.写博文.制作视频都需要大量图片.我们常常会在百度上下载一些图片,但是百度上提供的图片存在很多问题:存在水印.清晰度不够等.而Googl ...

  7. 在 Mac OS X 上安装 TensorFlow

    在 Mac OS X 上安装 TensorFlow 这个文档说明了如何在 Mac OS X 上安装 TensorFlow. 注意:从 1.2 版本开始,在 Mac OS X 上 TensorFlow ...

  8. Linux 在线模拟器

    最近在学习Linux的一些命令的使用,但是很久之前装的Linux虚拟机被删掉了,又不想为了练习几个命令折腾一遍虚拟机.所以,就尝试地搜了一下,看看有没有在线的Linux模拟器可以使用,只要可以练习一下 ...

  9. python学习之路前端-jQuery

    jQuery简介      JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safa ...

  10. Java中使用CountDownLatch进行多线程同步

    CountDownLatch介绍 在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法: 1.synchronized关键字进行同步. 2.Lock锁接口及其实现类ReentrantL ...