hbase 操作

来源:互联网 发布:知乎 留学中介 编辑:程序博客网 时间:2024/05/29 14:10

HBase 基础

  • (1)启动:start-hbase.sh

    根据启动信息,我们知启动吧顺序分别为:

    • starting zookeeper
    • starting master
    • starting regionserver
  • (2)启动完成(如果启动成功)之后,我们使用 jps 查看 java 进程,会发现新增了三个java进程:

    • HMaster
    • HRegionServer
    • HQuorumPeer
  • (3)浏览器端的启动方式,hadoop0:60010hadoop0表示的是主机名)

HBase Shell

HBase 提供的是对海量数据的简单秒级查询,体现在Shell 语句上就是异常简单的查询语句。


操作 命令表达式 创建表 create ‘表名称’, ‘列族名称1’, ‘列族名称2’, ‘列族名称n’ 添加记录 put ‘表名称’, ‘行名称’, ‘列名称’, ‘值’
行名称即为行健(row key)或者我们理解的主键
行名称为进行查看的重要依据 查看记录 get ‘表名称’, ‘行名称’ 查看表中的记录总数 count ‘表名称’ 删除记录 delete ‘表名’, ‘行名称’, ‘列名称’ 删除一张表 先屏蔽,才可删除
(1)disable ‘表名称’
(2)drop ‘表名称’ 查看所有记录 scan ‘表名称’ 查看某个表某个列中所有数据 scan ‘表名称’, {COLUMNS=>’列组名称’:’列名称’} 更新记录 重写即更新



注:

  • (1)我们在进行 HBase 表定义时,指定的只是列族名,不需要指定列名
  • (2)put操作一次只能添加一个(行列确定的)单元格信息,然而 get 一次查询得到的却未必是一个单元的信息,如果过滤列族的话,则返回列族信息,如果过滤列族的某一列的话,则返回对应单元格的信息。

DDL 操作(DDL:Data Definition Language)

  • (1) 创建表:create ‘user’, ‘user_id’, ‘addr’, ‘info’

    • a) 不以;号结尾
    • b) 不管是表名,还是列族名,都要用单引号引起来
  • (2) 列出全部表:list

  • (3) 得到表的描述:describe ‘user’


    这里写图片描述

    如果我们首先disable 'user'(自然使表生效的操作位enable user),再显示表的描述信息的话,会发现第二栏的ENABLED变为false

    虽然我们在学习时,将这些操作平等看待,然而在实践中,我们并不平等地使用这些操作,比如创建表、删除表(create、drop)都是十分谨慎的操作,尤其是删除,或许这也正是为什么删除一个表,需要两步动作。

DML 操作(DDL:Data Manipulation Language)

create 'users', 'user_id', 'address', 'info'
  • (1)添加记录(可以批量添加,不要分号结尾)

    put 'users','xiaoming','info:age','24'put 'users','xiaoming','info:birthday','1987-06-17'put 'users','xiaoming','info:company','alibaba'put 'users','xiaoming','address:contry','china'put 'users','xiaoming','address:province','zhejiang'put 'users','xiaoming','address:city','hangzhou'put 'users','zhangyifei','info:birthday','1987-4-17'put 'users','zhangyifei','info:favorite','movie'put 'users','zhangyifei','info:company','alibaba'put 'users','zhangyifei','address:contry','china'put 'users','zhangyifei','address:province','guangdong'put 'users','zhangyifei','address:city','jieyang'put 'users','zhangyifei','address:town','xianqiao'

    执行这么多次put操作,其实只添加了两个用户信息(‘xiaoming’、‘zhangyifei’)

    count 'users'            # 2 row(s) in 0.0080 seconds
  • (2)获取一条记录

    # 查询 xiaoming 的信息get 'users', 'xiaoming'get 'users', 'xiaoming', 'address'                        # 过滤 addressget 'users', 'xiaoming', 'address:city'                        # 过滤 address:city
  • (3)更新记录,请记住,覆盖即更新;

    put 'users', 'xiaoming', 'info:age', '29'get 'users', 'xiaoming', 'info:age'put 'users', 'xiaoming', 'info:age', '30'get 'users', 'xiaoming', 'info:age'
  • (4)获取单元格数据的版本数据

    get 'users', 'xiaoming', {COLUMN=>'info:age', VERSION=>1}                    # 最新get 'users', 'xiaoming', {COLUMN=>'info:age', VERSION=>2}                    # 次新get 'users', 'xiaoming', {COLUMN=>'info:age', VERSION=>3}                    # 最原始的记录
  • (5)获取单元格数据的某个版本数据

    get 'users', 'xiaoming', { COLUMN=>'info:age', TIMESTAMP=>....}
  • (6)全表扫描

    scan 'users'
  • (7)删除字段(单元格)

    delete 'users', 'xiaoming', 'info:age'get 'users', 'xiaoming'
  • (8)删除整行

    deleteall 'users', 'xiaoming'
  • (9)统计表的行数

    count 'users'
  • (10)清空表

    truncate 'users'
0 0