当前位置: 首页 > 编程日记 > 正文

hbase shell命令_HBASE的shell操作

33c27a87def41dd92fe1b732171a3883.png

前言

我们知道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

9670352d321aca25207d28b205b67854.png

可以看到两个。

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

命令为:

create_namespace

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

5b0dbfbc0c7403bb9cd47aad8608a293.png

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

create_namespace 'ns1'

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

ea02e309abb194917fa9de230ec07ec6.png

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

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

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

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

创建语法:

create

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

ed060b9aa8e54de60d9f4bc2a5c6cf4d.png

可以看到,例子非常详尽,那就按照他的例子,来创建一个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的描述信息

923dccd98ab3e1894f4d9536f9186e47.png

更新列族f1的版本号为5

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

再次查看一下

47c373657a254e90aecbca843e219b5e.png

删除

语法:

delete

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

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

2.删除t1表中的数据

truncate 't1'

3.删除整个t1表

disable 't1'
drop 't1'

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

总结

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

相关文章:

BOM、定时器

BOM、 window:frames; history; location; navigator; screen; docunment( anchors; forms; images; links; location; ) 1.定时器 setTimeout 指定函数几秒后运行setInterval 可重复运行指定几秒运行 2.弹对话框 alert 会产生阻塞 confirm 有“确定”或“取消”按钮&#xf…

mysql 树形结构_再读MySQL索引-《高性能MySQL》索引手记

最近工作中经常和MySQL打交道,当数据量小的时候,不同查询方式以及是否使用索引并无大碍,当数据量随着业务的成长急剧加速时,索引的重要性不言而喻。本篇文章以《高性能MySQL》中的索引章节为基础,加之个人对索引的理解…

下午就要考试啦~~附上自己做的考试范围

第一章 测试是否有必要 有。毕竟成本低 什么是软件的质量?(测试检测的是软件的质量,那么是什么软件的质量) 外部质量:用户可感知的,[功能、可靠、易用、效率] 内部质量:代码风格、内聚性、耦合性…

Unity 创建2D平台游戏开发学习教程

了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建强大且通用的人工智能 创造具有多重能力的角色 创建级别组件 MP4 |视频:h264&…

Solr和lucene

1. Solr 是什么? Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT和JSON等格式)。它易于安装和配置&#xf…

django 链接地址匹配流程

前提&#xff1a; 代码结构 步骤一&#xff1a; 下面为某个网页的链接地址 <body> {% if latest_article_list %}<ul>{% for article in latest_article_list %}<li><a href"/blog/p/{{ article.id }}/">{{ article.title }} </a><…

【Datawhale-Python】Task1

1.环境搭建 略&#xff08;见之前博客&#xff09; 2.python初体验 ①print&#xff08;&#xff09; 略 ②input&#xff08;&#xff09; Python3.x 中 input() 函数接受一个标准输入数据&#xff0c;返回为 string 类型。 >>> ainput() 2 >>> a 23.…

Android高手速成

第一部分 个性化控件(View) http://www.cnblogs.com/huwei0814/p/3796659.html 第二部分 工具库 http://www.cnblogs.com/huwei0814/p/3796670.html 第三部分 优秀项目 http://www.cnblogs.com/huwei0814/p/3796673.html 第四部分 开发工具及测试工具 http:/…

Texlive安装与环境变量配置

下载安装&#xff1a;https://www.jianshu.com/p/25896cc05cb4 去官网下载速度很快 环境变量配置&#xff1a;https://www.jianshu.com/p/f8f6c255098c

2018-3-7论文网络评论中非结构化信息的表示与研究--------实验分析

数据来源&#xff1a; &#xff08;1&#xff09;电子商务网站提供的网路评论 &#xff08;2&#xff09;专门提供网络评论交流平台的网络 &#xff08;3&#xff09;文章中使用的数据为网上某商城关于“某品牌中的一种型号纸尿裤&#xff08;价格75RMB&#xff09;”的2526…

3dmax Vray建筑可视化入门学习教程

面向初学者的3Ds Max Vray最佳Archviz可视化课程 从安装到最终图像的一切都将从头开始教授&#xff0c;不需要任何经验 大小解压后&#xff1a;3.25G 时长4h 6m 1280X720 MP4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 课程获取&…

javascript与浏览器学习(一)

待学习………… 20160421 标题&#xff1a;JavaScript中浏览器兼容问题 博客地址&#xff1a;http://www.cnblogs.com/DF-fzh/p/5408241.html 简单学习。 转载于:https://www.cnblogs.com/Tpf386/p/5416390.html

idea运行jsp显示源码_基于jsp+mysql+Spring+mybatis的SSM在线个人PC电脑商城平台网站系统...

运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可硬件环境&#xff1a; windows 7/8/10 1G内存以上主要功能说明&#xff1a; 管…

Dosbox+Masm汇编语言

一篇很不错的教程: https://bingyishow.top/Technical-article/54.html

hypervisor简介

什么是hypervisorhypervisor为操作系统提供独立的虚拟硬件平台&#xff0c;而虚拟硬件平台反过来又提供对底层机器的虚拟的完整访问。hypervisor之于操作系统类似于操作系统之于进程。虚拟化和hypervisor关于什么是虚拟化&#xff0c;请参考我的另一篇博客《虚拟化技术介绍》&a…

非结构化信息-》半结构化-》结构化-》关联数据体系-》数据挖掘-》故事化呈现-》决策导向

非结构化数据介绍来源&#xff1a; 非结构化信息_百度百科 https://baike.baidu.com/item/%E9%9D%9E%E7%BB%93%E6%9E%84%E5%8C%96%E4%BF%A1%E6%81%AF/2002521?fraladdin 总的来说&#xff0c;目前非结构化数据越来越多&#xff0c;怎么提取其中价值信息&#xff1f;&#xff…

元宇宙:基础-虚拟现实栈开发和虚拟土地

元宇宙——如何使用NFTs构建虚拟角色、虚拟环境、空间特征、虚拟土地的沉浸式购买 你会学到什么 元宇宙:从虚拟现实到虚拟双胞胎的基本概念 元宇宙:全栈开发&#xff0c;包括头像、传送、互操作性和隐私 元宇宙:如何建立元宇宙(地平线市场)景观&#xff0c;娱乐&#xff0c;游…

oracle数据库连接设置配置文件

转载于:https://www.cnblogs.com/Ly426/p/5416588.html

python3.7.1安装教程详细_CentOS 7 安装python3.7.1的方法及注意事项

安装wget yum -y install wget 创建一个download目录用于下载各种安装包 mkdir download 切换到刚创建的download目录中 cd download 下载python3.7.1 解压 tar -zxvf Python-3.7.1.tgz 切换到刚刚解压得到得文件夹 cd Python-3.7.1 安装配置 ./configure 注意&#xff0c;我这…

Docker部署SpringBoot项目详细部署过程

​ Docker可比喻成一个装应用的容器,将应用及其依赖文件、数据等打包在容器内,直接运行容器即可把应用运行起来,而无需关心环境配置问题。​ 本文记录个人学习Docker的总结内容,安装、配置和部署等内容,在过程中,应注意命令不要写错,加上Docker插件等问题,若出现理解不到位的地方,请多指出。

简单图文配置golang+vscode【win10/centos7+golang helloworld+解决install failed等情况】

博客目录&#xff08;阅读时间&#xff1a;10分钟&#xff09;一.win100.系统环境1. win10配置golang环境①下载相关软件②创建gowork工作空间③配置环境变量&#xff08;GOPATHPATH&#xff09;④验证环境配置结果2. win10配置vscode go环境①安装vscode的go插件②尝试运行③v…

安卓 画板 学习笔记

2019独角兽企业重金招聘Python工程师标准>>> 代码片段 package com.tang.paint;import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream;import android.app.Activity; import android.app.ActionBar; import android.app.Fr…

2018-3-7 Hadoop简介1(名字的由来,以及基本的结构)

问题一&#xff1a;什么是云计算&#xff1f; 实际上是提供的一种服务&#xff0c;这个服务的特点是&#xff1f; 主要是按需分配 云计算_百度百科 https://baike.baidu.com/item/%E4%BA%91%E8%AE%A1%E7%AE%97/9969353?fraladdin 什么是大数据&#xff1f…

MAYA 2022基础入门学习教程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:3.41 GB |时长:4.5小时 包含第一部分和第二部分课程 课程获取&#xff1a;MAYA 2022基础入门学…

[Ubuntu 22.04] Docker安装及使用

容器的生命周期由用户控制,用户可以选择手动删除容器或让其保留在系统中以供之后使用。选项允许你在容器内部创建一个交互式的终端会话,使你可以像在本地终端一样与容器进行交互。你可以在容器内执行命令,查看输出并输入命令。镜像拉取完成后,可以使用以下命令创建并启动一个基于 Ubuntu 20.04 镜像的容器。列出所有正在运行的容器,并显示它们的容器ID、镜像、命令、创建时间、状态等信息。以下命令可以中止容器,改命令将向容器发送一个停止信号,使其正常停止并退出。这将显示所有容器的列表,包括正在运行的和已停止的容器。

Docker ps命令

docker ps命令可以用来列出Docker容器相关信息。docker ps 命令可以用来列出容器相关信息。

Chain of Responsibility 责任链模式 MD

责任链模式 简介 责任链模式是一种对象的行为模式。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的引用而连接起来形成一条链&#xff0c;请求在这个链上【传递】&#xff0c;直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最…

python tkinter选择路径控件_Python3 Tkinter选择路径功能的实现方法

效果基于Python3。 在自己写小工具的时候因为这个功能纠结了一会儿&#xff0c;这里写个小例子&#xff0c;供有需要的参考。 小例子&#xff0c;就是点击按钮打开路径选择窗口&#xff0c;选择后把值传给Entry输出。 效果预览 这是选择前&#xff1a;选择&#xff1a;选择后&a…

Golang TDD实践报告:快速排序Quick Sort

Golang TDD实践报告&#xff1a;快速排序Quick Sort 【阅读时间&#xff1a;约5分钟】0.项目需求1.编写符合项目输入输出的一个测试2.尝试运行测试3.先使用最少的代码来让失败的测试先跑起来4.编写足够的代码以使测试通过5.重构编写完整的代码以提高效率6.基准测试TDD是测试驱动…

quick-cocos2d-x游戏开发【3】——display.newSprite创建向导

游戏嘛。没有图片没有图片可以称为你的游戏&#xff0c;所以&#xff0c;我们看一下使用quick如何创建精灵的方式。quick的api精灵族的创造仍然是非常具体的解释。因此&#xff0c;建立非常easy。display.newSprite(filename, x, y, params) filename&#xff1a;精灵文件名称 …