前言

我们知道hbase其实是架构在hdfs上的一个分布式数据库,既然是数据库那么这篇文章就主要围绕着我们最熟悉的增删改查来做。当然了,其实hbase的shell操作在真实的企业中几乎不用,这个很简单,我们的hbase是用来存贮海量数据的,还用shell来操作,疯了吗?比如一个查询,可能shell界面会一直被刷,那么我为啥还会写这篇文章呢?其实主要是记录,最重要的是通过他的shell操作能够更好的理解他的存贮本质以及他的架构,也能够为后面写API操作打下基础。

在具体开始介绍之前,需要先了解一个东西,那就是hbase采用是nosql语言,也就是和我们熟悉的mysql的语法差距有点大,好了,let's do it!

本文的命令不是重点:重点是知识点,都是知识点呀,同志们!

进入hbase客户端

第一个命令就是要进入hbase的客户端,直接敲击

hbase shell

help

接下来就要认识一个神级命令,没错,就是这个help,依稀记得小时候的那个学习机,哪里不会点哪里,有没有一起的同年记忆呀,暴露年龄了,不重要,hbase的help命令也是如此,你可以忘记所有的命令,但是这个命令一定要记住,哪里不会就哪里help就行了。

创建

有了这些前提,就让我们开始今天第一个创建命令,也就是所谓的增。

再说这个之前,先来普及一下知识点。认识一下什么叫做namespace。

我们想一想mysql,是不是有数据库呀?是的,hbase的namespace就是相当于mysql的数据库,数据库下面会可以创建表,hbase默认会有两个命名空间,分别为default和hbase。其中hbase这个命名空间是保存meta的,也就是元数据的,我们就不操作这个了。另外一个defalut在我们创建表的时候不指定的情况下,所有创建的表就会归类为这个命名空间,或者用熟悉的语言就是归类在这个数据库里面了。

好,就让我们先来直观体验一下吧,先来看看默认的两个命名空间,执行命令:

list_namespace

可以看到两个。

那你说我可以创建命名空间吗?我不想使用默认的default命名空间,当然可以了。

命令为:

create_namespace

这个时候,就懵逼了,知道了这个又能干啥,接下来就引入本文的重点了,另外一个神级操作,我现在知道这个是创建命名空间的,或者我根本不知道这个命令是干啥的,那么就直接敲击,放心,不会坏的,让我们看看发生了什么?

是不是超级棒,是的,不但给出了这个命令是干啥的,还给出了example例子,简直不要太爽啊,那我们就照着example敲击一下吧。

create_namespace 'ns1'

然后我们再来看一下现在的namespace列表

发现多了一个ns1命名空间,实际上在我们使用过程中,default命名空间就够了,这里是为了演示来创建一下的。

现在好了,我们有了命名空间了,就可以创建表了,在创建表之前,同样我们需要了解一个东西,那就是column family,有的把这个翻译为列族,有的翻译为列簇,其实都是一个意思,字面意思就是列的家族,是的,我认为翻译列族更加合适。这个有啥用吗?有的,hbase存贮数据是列式存贮的,如果你不懂什么叫列式存贮,请阅读我的另外一篇文章

栋公子:列式数据库和行式数据库的区别​zhuanlan.zhihu.com

既然是列式存贮,我们就把很多相同的列的集合成为列族,在hbase中必须要创建列族,我们知道mysql中需要创建字段,hbase中完全不需要如此,只需要创建一个表名字,然后告诉这个表需要有几个列族即可,剩下的字段完全可以在插入的时候指定,可是说涉及到字段这个节点上来说完全没有任何规律可言,也不需要任何规律,OK,来创建一张表先。

创建语法:

create

再来说一下,create这个创建语法不会咋样?直接输入回车。就会看到下面这个提示,后面的演示就不再提示了。

可以看到,例子非常详尽,那就按照他的例子,来创建一个t1吧,还记得列族不,必须要指定列族,然后列族给他两个,分别为f1,f2

create 't2','f1','f2' # 第一种创建语法
create 't1',{NAME=>'f1'},{NAME=>'f2'} #第二种创建语法

实际上列族不宜创建过多,最好不好要超过两个,因为在hdfs上的底层,每一个列族就是一个文件,如果列族过多,则需要查询的文件也很多,影响查询的性能。

接下来看另外一个知识点,都是知识点啊,要动脑筋记住呀!那就是versions版本。是的,hbase有一个很大的特点,那就是可以存贮多个版本,想象我们的mysql,同一行的数据,如果想要将原本的数字1改成数字2,这个时候最常做的事情就是更新,但是在hdfs中就不一样了,这个数字1和数字2可以同时存在,对的,这个就是版本。我们在创建表的时候还可以指定版本,版本最大为5,如果不指定则为1,下面是一个创建的例子。

create 't3', {NAME => 'f1', VERSIONS => '3'},{NAME => 'f2'}

对的,写上VERSIONS 然后指定一下就好了。

关于版本这里还有个小东西需要理解,比如我们指定了版本为3,那这下子来了5个内容咋办,最开始的两条记录就会被删除了,只保留最后的3条记录。

再来一个知识点,认识一下TTL,这个是超时时间,怎么说呢?比如创建了一个列族,然后指定了超时时间为200秒,是的,这个TTL的单位是秒,然后这个时候插入1条记录,然后过100s再插入一段时间,然后再过100s,第一次插入的记录就消失了,这个TTL的作用范围是每个Cell,不是整个表第一次创建的时间,这一点尤其重要。

另外,这个TTL在不指定的前提下,会显示forever,也就是永久,如果真的追究起来,他也是有一个值的,为2147483647 大约69.04年,这么些年,也就相当于永久了,如果说你的内容要存100年,那。。。

创建语法:

create 't1', {NAME => 'f1', TTL => 200}

比如上面,我就写了200s,也就是每个cell过200s就消失了。温馨提示,如果你的数据没有这种业务,最好不要设置哟。

好了,还有一个小的知识点,那就是在特定的namespace下创建表

语法:

create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}

这个例子就是在ns1的namespace下面创建t1表,然后列族为f1,版本信息为5.

关于创建的时候,还可以进行预分区,不过这个知识点我留到我的下篇文章去全面介绍hbase的架构的时候来介绍,那个时候会说明的更明白一些。

添加数据

上面说完了创建,接下来让我们向表中添加数据。

语法:

put

这里还要普及一个知识点,那就是rowkey,翻译为行键,一个rowkey就是一行的唯一ID

并且在整个列族内唯一,记住唯一不是整个表,而是列族,因为一张表中可以有多个列族,后期我还会写如何优雅的设计rowkey,这个在很多面试题中也经常被问到,可以说一个优雅的设计是非常重要的。我们这里是演示,就随便指定就好了。

添加第一条数据:

put 't1','rk0001','f1:name','wang'

意思是向t1表中添加rowkey为rk001,列族为f1中添加name字段的值wang。

其中name这个字段不单单理解为name,你可以在这里指定任何你想要的字段,包括空也是一个字段,再来一个例子。

put 't1','rk0001','f2:age','10'

向t1表中插入rowkey为rk0001,列族为f2,字段为age,value为10

查询

上面向表中插入了数据,那这些数据到底在哪里呢?我们去查询一下。

语法

get

例子:

1.获取t1表中rowkey为rk0001的所有信息

get 't1','rk0001'

2.获取t1表中rowkey为rk0001,列族为f1的所有信息

get 't1','rk0001','f1'

3.查看t1表中rowkey为rk0001,列族为f1,字段为name的内容

get 't1','rk0001','f1:name'

4.查看t1表中rowkey为rk0001,列族为f1,字段为name和age的内容

get 't1','rk0001','f1:name','f1:age'

5.查看t1表中rowkey为rk0001,列族为f1,f2

get 't1','rk0001','f1','f2'

6.获取t1表中rowkey为rk0001,然后cell的值为meimei的信息

get 't1', 'rk0001', {FILTER => "ValueFilter(=, 'binary:meimei')"}

7.获取t1表中rowkey为rk0001,cell的值中包含m的信息

get 't1','rk0001',{FILTER => "QualifierFilter(=,'substring:m')"}

8.全表扫描t1

scan 't1'

更新

这里也是一个知识点,那就是hbase理论上其实只有一种操作,就是写操作,所谓的更新和删除等其实都是写入操作,比如更新,其实就是新添加一条数据,然后添加一个版本,删除 也只是打上删除标记,这也是区别与mysql那种行式数据库的区别的地方。

更新还是用的插入的命令,比如下面

put 't1','rk0001','f2:age','11'

其实就是把t1表中rowkey为rk0001,列族为f2,age字段的值更新为11

查看表信息

desc 't1'

查看表t1的描述信息

更新列族f1的版本号为5

alter 't1',NAME=>'f1',VERSIONS=>5

再次查看一下

删除

语法:

delete

1.删除 t1表 ,rowkey为rk0001,f1:name的值

delete 't1','rk0001','f1:name'

2.删除t1表中的数据

truncate 't1'

3.删除整个t1表

disable 't1'
drop 't1'

这里需要注意一下,删除某个表前,需要先disable掉这个表。

总结

以上就是本文的全部内容了,如果觉得好,欢迎给个赞,或者关注本专栏,有了新的内容也会第一时间推送给你,关注不迷路哦,当然了本文只是列出了部分的内容,更多的内容可以查看help命令或者查看官方文档,有什么疑问也可以在下方给我留言哦!

hbase shell命令_HBASE的shell操作相关推荐

  1. hbase shell命令_Hbase的简单命令使用

    通过hbase shell进入到cli窗口 1.创建表 create 't01','cf01' t01为表名 cf01为列族名 在hbase当中命令是需要区分大小的 在hbase当中字符串是需要加上引 ...

  2. python使用shell命令_python 调用shell命令的方法

    在python程序中调用shell命令,是件很酷且常用的事情-- 1. os.system(command) 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出 ...

  3. linux 进入shell命令,linux或者shell进入vi命令

    vi的基本操作 a) 进入vi     在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi file 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command ...

  4. python调用shell命令-Python调用shell命令常用方法(4种)

    方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令 ...

  5. python调用shell命令-python调用shell命令小结

    在写python脚本的时候,经常需要调用系统命令,常用的python调用系统命令的方法主要有subprocess.call和os.popen.默认情况下subprocess.call的方法结果是返回值 ...

  6. lua执行shell命令6_Vim执行shell命令及使用Vim批量更改文件名

    写在前面:我"胡汉三"又回来了~上周顺利通过了试用期答辩,现在俺是一名正式的鹅厂人啦.哈哈哈~感谢各位可爱又热心的好伙伴对我的"不离不弃". 话休絮烦,今天分享 ...

  7. Linux基础——“ shell命令 概述”了解shell和基本linux

    文章目录 一.shell 命令 1. shell 概述 2. 基本系统维护命令 3. 查看文件系统信息 二.Linux 的用户管理 三.Linux进程管理相关命令 3.1 进程的概念 3.2 进程管理 ...

  8. Shell命令-文件及目录操作之mkdir、mv

    文件及目录操作 - mkdir.mv 1.mkdir:创建目录 mkdir命令的功能说明 mkdir命令用于创建目录,默认情况下,要创建的目录已存在,会提示文件存在,不会继续创建目录. mkdir命令 ...

  9. Shell命令-文件及目录操作之chattr、lsattr

    文件及目录操作 - chattr.lsattr 1. chattr:改变文件属性 chattr命令的功能说明 chattr命令用于改变文件属性.这项指令可改变存放在ext2文件系统上的文件或目录属性, ...

最新文章

  1. 面向对象的5条基本设计原则----拜读大作后
  2. spring源码分析之@ImportSelector、@Import、ImportResource工作原理分析
  3. 如何建议一个数据库内的定时任务
  4. python爬取换页_爬虫爬不进下一页了,怎么办
  5. Report Service 为用户“NT AUTHORITY、NETWORK SERVICE”授予的权限不足,无法进行此操作。(rsAccessDenied)处理...
  6. c 语言程序设计文献,c语言程序设计参考文献
  7. 深度装机大师一键重装_正确重装系统(1):一键重装系统出现问题解决方法...
  8. 使用文本编辑器编写Java源代码
  9. 《王道》第13章 树--PART1
  10. Html+Css实现鼠标经过图片放大
  11. 智邦国际CRM系统实现企业信息化管理成功实施
  12. svm预测股价 python_python 利用SVM预测股票涨跌
  13. xml 解析错误:语法错误 xml解析错误:找不到根元素
  14. 狂奔的蜗牛小组团队介绍
  15. 【UI学习】Android github开源项目,酷炫自定义控件(View)汇总
  16. 京东开源FaceX-Zoo:PyTorch面部识别工具箱
  17. ndn中自适应转发策略总结
  18. 计算机桌面图标管理,桌面图标怎么管理 桌面图标管理方法介绍
  19. PWM、SPWM、SVPWM的个人理解
  20. html 拖放插件,DAD – jQuery拖拽/拖放插件

热门文章

  1. Marvelous Designer衣袖设计教程
  2. C语言中整型在计算机中的存储
  3. apt Could not get lock /var/lib/dpkg/lock 解决方案
  4. inline-block空隙怎么解决
  5. iOS 相册和网络图片的存取
  6. Codeforces Round #372 (Div. 2), problem: (B) Complete the Word
  7. 7个华丽的基于Canvas的HTML5动画
  8. 浏览器内核Trident/Gecko/WebKit/Presto
  9. 从Qcheck 1.3 不能在不同操作系统上运行问题(chro124、chro342)说开来------
  10. jquery 实现表单验证功能代码(简洁)