hbase命令,HBase存储架构
hbase命令,HBase存储架构详细介绍
本文目录一览: hbaseshelllimit无效
hbaseshelllimit 是 HBase Shell 中的一个配置选项,可以设置 Shell 执行命令的最大时间限制。但是,如果在使用 HBase Shell 的过程中,执行的命令时间超过了设置的最大时间限制,依然会被执行完毕,而不会中断执行。因此,可以说 hbaseshelllimit 选项在这种情况下是无效的。
造成这个问题的原因是,HBase Shell 中的命令可能会涉及到复杂的操作和大量的数据,导致执行时间较长。此时,设置一个时间限制可以防止命令执行时间过长,从而减小对系统资源的影响。但是,如果命令执行时间超过了设置的最大时间限制,由于 HBase Shell 本身不支持命令的强制中断,因此仍然会执行完毕。
为了解决这个问题,可以考虑使用 HBase Java API 或 HBase REST API 来操作 HBase,这样可以更好地控制命令的执行时间。另外,也可以通过在 Shell 中使用 Linux 命令的方式来操作 HBase,这样可以利用 Linux 命令本身支持的强制中断的特性来中断执行时间较长的命令。
Shell脚本中实现hbase shell命令调用
为了优化性能,大数据平台上的HBase表需要在脚本跑批过程中对创建的索引进行rebuild,因此说明下如何在shell中实现hbase语句调用。
常规操作,在操作前需要在shell中先获取kerbores安全认证权限:
kinit user -kt /user.keytab
使用 << (重定向输入符号)
将hbase的命令嵌入到shell中,可以在shell中如下书写:
其中, EOF 也可以换成其他任意的字符,大小写不论,只要成对出现即可:
编写执行命令执行:
hbase shell firstbaseshell.txt
HBase中显示表的指令是
进入hbase shell命令界面:hbase shell
2. 查看表格:list
3. 查看所有命令:help
4. 创建表格(如果不记得命令格式 可以直接输入create 系统会给出提示和示例):create 'test','f1','f2','f3'
创建了一个表名为test 有f1 f2 f3三个列族的表
5. 查看表格结构信息:desc 'test'
不进入hbase环境可以操作命令吗
可以。根据查询相关公开信息显示,Hbase在单机环境也能运行,不进入hbase环境在开发环境的时候使用。HBase来源于Google的三篇论文中的BigTable(GFS->HDFS,MapReduce->MapReduce,BigTable->HBase),是一种Hadoop数据库。
start-hbase.sh显示未找到命令
命令可以在显示的右下角有一个方框的图标,点击图标往下划可以找到命令的按钮,点击就可以启动命令了。
hbase命令行方式插入一条数据到某个表中使用什么命令
命令:disable 'tableName' --disable表。注:修改表结构时,必须要先disable表。
命令:enable 'tableName' --使表可用
命令:drop 'tableName' --删除表
put ‘表名’, ‘行键’, ‘列族名’, ‘列值’ put ‘表名’, ‘行键’, ‘列族名:列名’, ‘列值’
完整的hbse 操作命令参考 hbase的基本操作命令
HBase存储架构
上图是HBase的存储架构图。
由上图可以知道,客户端是通过Zookeeper找到HMaster,然后再与具体的Hregionserver进行沟通读写数据的。
具体到物理实现,细节包括以下这些:
首先要清楚HBase在hdfs中的存储路径,以及各个目录的作用。在hbase-site.xml 文件中,配置项
hbase.rootdir
默认 “/hbase”,就是hbase在hdfs中的存储根路径。以下是hbase0.96版本的个路径作用。1.0以后的版本请参考这里: https://blog.bcmeng.com/post/hbase-hdfs.html
1、 /hbase/.archive HBase 在做 Split或者 compact 操作完成之后,会将 HFile 移到.archive 目录中,然后将之前的 hfile 删除掉,该目录由 HMaster 上的一个定时任务定期去清理。
2、 /hbase/.corrupt 存储HBase损坏的日志文件,一般都是为空的。
3、 /hbase/.hbck HBase 运维过程中偶尔会遇到元数据不一致的情况,这时候会用到提供的 hbck 工具去修复,修复过程中会使用该目录作为临时过度缓冲。
4、 /hbase/logs HBase 是支持 WAL(Write Ahead Log) 的,HBase 会在第一次启动之初会给每一台 RegionServer 在.log 下创建一个目录,若客户端如果开启WAL 模式,会先将数据写入一份到.log 下,当 RegionServer crash 或者目录达到一定大小,会开启 replay 模式,类似 MySQL 的 binlog。
5、 /hbase/oldlogs 当.logs 文件夹中的 HLog 没用之后会 move 到.oldlogs 中,HMaster 会定期去清理。
6、 /hbase/.snapshot hbase若开启了 snapshot 功能之后,对某一个用户表建立一个 snapshot 之后,snapshot 都存储在该目录下,如对表test 做了一个 名为sp_test 的snapshot,就会在/hbase/.snapshot/目录下创建一个sp_test 文件夹,snapshot 之后的所有写入都是记录在这个 snapshot 之上。
7、 /hbase/.tmp 当对表做创建或者删除操作的时候,会将表move 到该 tmp 目录下,然后再去做处理操作。
8、 /hbase/hbase.id 它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。
9、 /hbase/hbase.version 同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来
10、 -ROOT- 该表是一张的HBase表,只是它存储的是.META.表的信息。通过HFile文件的解析脚本 hbase org.apache.hadoop.hbase.io.hfile.HFile -e -p -f 可以查看其存储的内容,如下所示:
以上可以看出,-ROOT-表记录的.META.表的所在机器是dchbase2,与web界面看到的一致:
11、 .META. 通过以上表能找到.META.表的信息,该表也是一张hbase表,通过以上命令,解析其中一个region:
以上可以看出,adt_app_channel表的数据记录在dchbase3这台reginserver上,也与界面一致,如果有多个region,则会在表名后面加上rowkey的范围:
通过以上描述,只要找到-ROOT-表的信息,就能根据rowkey找到对应的数据,那-ROOT-在哪里找呢?从本文一开始的图中可以知道,就是在zookeeper中找的。进入zookeeper命令行界面:
可以看出-ROOT-表存储在 dchbase3 机器中,对应界面如下:
以上就是HBase客户端根据指定的rowkey从zookeeper开始找到对应的数据的过程。
那在Region下HBase是如何存储数据的呢?
以下就具体操作一张表,查询对应的HFile文件,看HBase的数据存储过程。
在HBase创建一张表 test7,并插入一些数据,如下命令:
查看wal日志,通过 hbase org.apache.hadoop.hbase.regionserver.wal.HLog --dump -p 命令可以解析HLog文件,内容如下:
查看HFile文件,内容如下:
由此可见,HFile文件就是存储HBase的KV对,其中Key的各个字段包含了的信息如下:
由于hbase把cf和column都存储在HFile中,所以在设计的时候,这两个字段应该尽量短,以减少存储空间。
但删除一条记录的时候,HBase会怎么操作呢?执行以下命令:
删除了rowkey为200的记录,查看hdfs,原来的HFile并没有改变,而是生成了一个新的HFile,内容如下:
所以在HBase中,删除一条记录并不是修改HFile里面的内容,而是写新的文件,待HBase做合并的时候,把这些文件合并成一个HFile,用时间比较新的文件覆盖旧的文件。HBase这样做的根本原因是,HDFS不支持修改文件。
hbase shell输入命令显示屏不动,光标也不动
直接关闭再次重启就好。解决linux光标的方法,只需要在命令行中输入隐藏光标是echo -e "\033[?25l"显示光标是echo -e "\033[?25h"。如果输入代码后还是没有反应建议直接关机重启或者卸载重装。
Hbase表映射到phoenix
在phoenix中操作hbase已有数据表就需要手动进行配置
直接在安装了hbase服务的环境中,输入hbase shell执行命令,进入hbase下进行操作: hbase shell
进入hbase: hbase shell
创建hbase表: create 'phoenix','info'
插入数据: put 'phoenix','row001','info:name','phoenix'
进入phoenix的cli命令:到phoenix的bin目录执行: ./sqlline.py
创建phoenix表: create view "phoenix"(rowkey varchar primary key,"info"."name" varchar);
验证:在phoenix的cli命令下查看数据: select * from "phoenix" limit 10;
注意事项:
1.phoenix验证的时候,查询表名需要用双引号括起来,强制不转换成大写
2.创建phoenix时,表名和列族以及列名需要用双引号括起来,不然会自动将小写转换成大写。