http://www.jb51.net/article/31172.htm 这个文章写得挺好

1.HBase的shell就和我们用Mysql的终端是一个意思,比如我们安装好Mysql,配置好了环境变量,命令行中输入mysql -uroot -p密码 就能直接进入mysql
的终端,在这里HBase也是一个意思。

如何进入HBase的终端呢,使用命令 hbase shell 进入命令行模式。在这里,我们能对HBase的操作是很有限的,在PPT19中,基本就包含了他百分之八九十的操作。
没有复杂的查询,因为复杂的查询不是HBase的强项,它能够进行海量数据的简单查询。

PPT19也有展示
创建表 create '表名称', '列族名称1','列族名称2','列族名称N'

    create '表名称' ,{NAME=>''},{NAME=>''},{NAME=>''},{NAME=>''}

      其中每一个花括号都是一个列族,花括号中的内容格式是一个或多个以逗号分隔的 xxx=>xxx,这个对列族做详细定义时使用的方式。=>左边的部分是名称,右边是值。

举个例子:create 'user',{NAME=>'info',VERSIONS=>'5'},{NAME=>'detail',VERSION='4'}

        这表示创建表名为user的表,有两个列族,info和detail,info这个列族保留版本是数为5,detail列族保留版本数为4

      注意:创建表的时候,不需要指定行键,行键是默认存在的。在添加的时候,在表明后面,直接指定航简单 值就可以了。
添加记录 put '表名称', '行名称', '列名称:', '值'(如果不写时间戳,默认当前时间)
查看记录 get '表名称', '行键名称'
查看表中的记录总数 count '表名称'
删除记录 delete '表名' ,'行键名称' , '列名称'(删除指定行健所对应的那一整列)
删除一张表 先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称'
查看所有记录 scan "表名称" (全表扫描,类似SELECT * FROM 表名)
查看某个表某个列中所有数据 scan "表名称" , {COLUMNS=>'列族名称:列名称'}
更新记录 就是重写一遍进行覆盖,还是使用PUT操作

下面举例:
创建表: create 'user','user_id','adress','info'
创建表的时候,表名称和列族名称,都需要带引号,表与列族之间、列族与列族之间用逗号隔开,末尾不用分号结尾
查看表: list
list命令: 查看都有什么表,该命令列出了表的名称,没有具体的内容。
查看表具体信息:describe 'user'
describe 表名 查看某一个表的具体信息,表名需要用引号括起来。
该命令会显示很多的东西,虽然我们创建表的时候很简单,但是它有很多的默认值,在这里用这条命令,都会给你显示出来。
显示的内容分为左右两部分,左边的标题为DESCRIPTION,这是表的详细信息,右边是ENABLE,显示表是否启用。在左边的
详细信息部分中,最开始是表名称,然后会有很多的大括号,每个大括号中,都是列簇的信息,我们在创建表的时候只指定了列簇的名称,
其他的都没指定,但是他们都是有默认值的,在这里也都显示出来了。如果我们学的深入了,其实在创建表的时候,可以不像上面那么简单,
可以对这些参数进行设置的。
删除表: disabled 'user'
drop 'user'
插入记录: put 'user','zhangyifei','address:city','beijing'
put 'user','zhangyifei','info:age','22'
获取记录: get 'user','zhangyifei'
get 'user','zhangyifei','adress'
更新记录: put 'user','zhangyifei','info:age','24'
put 'user','zhangyifei','info:age','25'
put 'user','zhangyifei','info:age','26'
put 'user','zhangyifei','info:age','27'
get 'user','zhangyifei','info:age' 验证数据更新成功没有(默认显示最新的值)
获取版本信息 get 'user','zhangyifei','{COLUMN=>'info:age',VERSIONS} 显示的是最新的版本
get 'user','zhangyifei','{COLUMN=>'info:age',VERSIONS=>2} 显示的是最新2个的版本
get 'user','zhangyifei','{COLUMN=>'info:age',VERSIONS=>3} 显示的是最新的3个版本
get 'user','zhangyifei','{COLUMN=>'info:age',VERSIONS=>4} 显示的是最新的4个版本,却没有显示4个版本,只显示了3个,我们之前
确实插入了4次啊(24、25、26、27),原因是:我们用describe命令
查看表的详细信息的时候,在那个大括号中,是对列簇信息的描述,
其中有一项,就是版本数(VERSIONS=>'3'),我们在创建表的时候没有指定,它默认
是3.可以改成4,但是是在创建表的时候该。具体该怎么写呢,其实就是把
description下面的东西复制,然后前面加个create就行。
create 'user',{NAME=>'info',VERSIONS=>'5'},{NAME=>,VERSION=>},{}...

获取单元格数据的某个版本数据
get 'users','xiaoming',{COLUMN=>'info:age',TIMESTAMP=>1364874937056}
这里需要用知道具体的时间戳,时间戳如果不指定,就是当时的时间,但是我们以后很难知道当时时间是什么,
所以我们可以指定时间戳到底是什么。
全表扫描: scan 'user'

get 'users','xiaoming',{COLUMN=>'info:age',VERSION=>4}
get 'users','xiaoming',{COLUMN=>'info:age',VERSION=>1384092294281} 取某一条具体的值,也就是说,表名+列族:列名+时间戳 确定某一个具体的值
时间戳如果在插入的时候不指定,他是按当前时间来算的,那么再以后的查找的时候,我们不知道当时插入时候的当前时间,该怎么办。时间戳其实是可以在插入数据的时候自己指定的。
版本数在创建表的时候,需要指定。
scan 表 扫描整张表

get 命令是对某一行进行查找,查找时需要制定表名和行健
scan命令是对表进行全表扫描,查找时指定表名即可

删除某一列 delete 'users','xiaoming','info:age' 我们在删除列的时候会不会影响其他的记录,肯定不会,因为我们这个命令里面指明了行健xiaoming
删除某一条记录(行) deleteall 'user','xiaoming' (deteleall 表名,行健)
查看表的记录(行)数 count 'user'
清空表数据: truncate 'user' //实际上是执行3步操作,disabled、drop、create ,此时表示存在的,但是里面没数据

同一个表中的,两条记录,他们的列族是一样的,但是列族中的列可能是不一样的。所以可以这样说,列属于列族,同样也属于记录,即使我们有两行记录,都在
同一个列族下有一个同名的列,我觉得他们也没有什么关系,我们delete某一条记录的列,另一条记录是不受影响的。

hbase表中的每个列,都归属与某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。

以网上的一个学生成绩表的例子来演示hbase的用法。

name grad course
math art
Tom 5 97 87
Jim 4 89 80

这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族。

(1)建立一个表scores,有两个列族grad和courese

复制代码 代码如下:
hbase(main):001:0> create ‘scores','grade', ‘course'

可以使用list命令来查看当前HBase里有哪些表。使用describe命令来查看表结构。(记得所有的表明、列名都需要加上引号)

(2)按设计的表结构插入值:

复制代码 代码如下:
put ‘scores','Tom','grade:','5′  (course这个列族下面没有列,如果我后来再添加两个列,那么这次添加的数据放到哪里呢)
put ‘scores','Tom','course:math','97′
put ‘scores','Tom','course:art','87′
put ‘scores','Jim','grade','4′
put ‘scores','Jim','course:','89′ (course这个列族下面有两个列,为什么还可以省略,默认添加到哪个列呢)
put ‘scores','Jim','course:','80′

这样表结构就起来了,其实比较自由,列族里边可以自由添加子列很方便。如果列族下没有子列,加不加冒号都是可以的。

Hbase笔记3 shell命令的更多相关文章

  1. 学习笔记之shell命令

    linux shell命令学习笔记:~这里只是对自己一些常用但是不熟悉的的命令进行记录 -------------------------------------------------------- ...

  2. HBase总结(二十)HBase经常使用shell命令具体说明

    进入hbase shell console $HBASE_HOME/bin/hbase shell 假设有kerberos认证,须要事先使用对应的keytab进行一下认证(使用kinit命令),认证成 ...

  3. hbase操作(shell 命令,如建表,清空表,增删改查)以及 hbase表存储结构和原理

    两篇讲的不错文章 http://www.cnblogs.com/nexiyi/p/hbase_shell.html http://blog.csdn.net/u010967382/article/de ...

  4. hbase学习一 shell命令操作

    基本操作: #命名空间级别: #列出所有命名空间 hbase> list_namespace #新建命名空间 hbase> create_namespace 'ns1' #删除命名空间 h ...

  5. HDFS shell命令行常见操作

    hadoop学习及实践笔记—— HDFS shell命令行常见操作 附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop ...

  6. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  7. Hbase Shell命令

    1 启动HBase shell 2 HBase shell 命令 3 我们将以“一个学生成绩表”的例子来详细介绍常用的 HBase 命令及其使用方法. 这里 grad 对于表来说是一个列,course ...

  8. hbase 学习笔记二----shell

          Hbase 是一个分布式的.面向列的开源数据库,其实现是建立在google 的bigTable 理论之上,并基于hadoop HDFS文件系统.     Hbase不同于一般的关系型数据库 ...

  9. HBase的Shell命令

    1.HBase提供了一个shell的终端给用户交互 2.HBase Shell的DDL操作 (1)先进入HBase的 Shell命令行,即HBASE_HOME/bin/hbase shell …… & ...

随机推荐

  1. (未解决)WIN8下使用POWERSHELL安装python easy_install无法成功

    按照https://pypi.python.org/pypi/setuptools#windows-8-powershell介绍的方法, 安装未成功.安装似乎没有启动, 也未安装成功. Windows ...

  2. F28379D烧写双核程序(在线&离线)

    烧写双核程序前需知在分别对F28379D的CPU1和CPU2两个核进行烧写程序时,需要在CCS中建立两个工程,独立编写两个核的程序.如controlSUITE中提供的双核程序例程: 1. 在线1.1 ...

  3. 使用timeit模块 测试两种方式生成列表的所用的时间

    from timeit import Timer def test(): li=[] for i in range(10000): li.append(i) def test2(): li=[i fo ...

  4. 左侧菜单栏右侧内容(改进,有js效果)

    (如有错敬请指点,以下是我工作中遇到并且解决的问题)上一篇文章是简洁版 这是上一篇文章的改进. 上一篇文章的左侧菜单是没有子目录的. 这是效果图: 左侧菜单代码: <div class=&quo ...

  5. .apache.commons.io 源代码学习(一)

    java的初学者,准备通读各种高水平源代码,提升能力. 为了避免自己的惰性,写博客. 版本:2.5 开发平台:netbeans. 今天是第一天,网上先看个例子:http://www.importnew ...

  6. POJ 2528.Mayor's posters-线段树(成段替换、离散数据、简单hash)

    POJ2528.Mayor's posters 这道题真的是线段数的经典的题目,因为数据很大,直接建树的话肯定不可以,所以需要将数据处理一下,没有接触离散化的时候感觉离散化这个东西相当高级,其实在不知 ...

  7. (5)C#运算符

    运算符 参照javase     (7)java基础知识-原码.反码.补码.运算符

  8. docker网络及Dockerfile

    1.制作镜像 使用阿里的yum源,网址:https://opsx.alibaba.com/mirror,或者mirrors.aliyun.com,点击帮助,就会有弹框出来. docker pull c ...

  9. nginx+tomcat负载使用

    Nginx+Tomcat搭建 版本 操作系统版本 Centos 6.4 Nginx版本 nginx-1.3.15.tar.gz JDK版本 jdk-7u71-linux-i586   //jdk1.7 ...

  10. 【bzoj1226】【[SDOI2009]学校食堂Dining】状压dp

    (上不了p站我要死了,侵权度娘背锅) Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人 ...