热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HBase初识、CentOS6.6中HBase安装与HBaseShell简单使用

5.HBaseShell命令简单使用HBase是一个可以建立在HDFS上的分布式NoSQL数据库(非

目录

5. HBase Shell命令简单使用

1. HBase简介

HBase是一个基于HDFS的面向列的分布式数据库 。HDFS基于流式数据访问,低时间延迟的数据访问并不适合在HDFS上运行。所以,如果需要实时地随机访问超大规模数据集,使用HBase是更好的选择。HBase时NoSQL(非关系型数据库)数据库,不支持关系型数据库地SQL,并且是 以键值对地方式按列存储 ,是非关系型数据库(Not Only SQL)中的一个重要代表。NoSQL目前并没有明确地范围和定义,其主要特点是通常被用于大规模数据地存储、没有预定义地模式(如表结构)、表和表之间没有复杂的关系。总体上可将NoSQL数据库分为以下4类:

  1. 基于列存储地类型
  2. 基于文档存储的类型
  3. 基于键值对存储的类型
  4. 基于图形数据存储的类型

HBase 是一个可以建立在HDFS上的分布式NoSQL数据库(非关系型数据库只有对数据表进行增、删、查操作;没有改地操作,要做改的操作,需要先删除,再插入来代替)。

2. hbase安装

 hbase有三种安装方式:单机、伪分布式、完全分布式。

单机hbase】 :hbase数据库的数据文件存在 单一的一台设备上 ,使用的是该设备的文件系统。

伪分布式hbase】 :hbase数据库的数据文件存在 一台设备构成的hdfs上 ,数据库也分主从结构。

完全分布式hbase】

:hbase数据库的数据文件存在

多台设备构成的hdfs上

,数据库也分主从结构。

我们这里为了后期学习,直接采用【 完全分布式hbase 】方式安装:

1)获取hbase安装包并解压到node1的/home/hdser/下 并重命名为hbase

[hduser@node1 ~]$ tar -zxvf /home/hduser/桌面/hbase-1.2.0-bin.tar.gz  -C /home/hduser/
   [hduser@node1 ~]$ mv /home/hduser/hbase-1.2.0/ /home/hduser/hbase

2)配置hbase核心配置文件(hbase-site.xml)

/home/hduser/hbase/conf/下

用安装的gedit记事本进入:

[hduser@node1 conf]$ gedit hbase-site.xml

增加以下核心内容:

	   
	        hbase.rootdir
			hdfs://node1:9000/hbase
	   
	   
	   
	        hbase.cluster.distributed
			true
	   
	   
	   
	        hbase.master
			node1:60000
	   
	   
	   
	        hbase.zookeeper.quorum
			node1,node2,node3
	   

3)配置hbase环境配置文件(hbase-env.sh)

/home/hduser/hbase/conf/下

用安装的gedit记事本进入:

[hduser@node1 conf]$ gedit hbase-env.sh

在文末增加以下环境变量配置:

修改JAVA_HOME配置:

export JAVA_HOME=/usr/java/jdk1.8.0_171

增加HADOOP_HOME配置:

export HADOOP_HOME=/home/hduser/hadoop

增加HBASE_HOME配置:

export HBASE_HOME=/home/hduser/hbase

增加启用hbase 内置zookeeper配置:

export HBASE_MANAGERS_ZK=true

4)配置从机网络用户名(regionservers)

/home/hduser/hbase/conf/下

用安装的gedit记事本进入:

[hduser@node1 conf]$ gedit regionservers

将内容更改成从机用户名信息:

node2
node3

5)拷贝node1的hbase的主目录到node2,node3下,使得各个节点上都能运行HBase来构建HBase集群,执行以下两个命令

[hduser@node1 ~]$ scp -r hbase hduser@node2:/home/hduser/
[hduser@node1 ~]$ scp -r hbase hduser@node3:/home/hduser/

6)配置hbase的环境变量

用记事本命令打开配置环境

[hduser@node1 ~]$ sudo gedit /etc/profile

增加以下配置内容:

export HBASE_HOME=/home/hduser/hbase
export PATH=$PATH:$HBASE_HOME/bin

保存并退出,使文件生效:

[hduser@node1 ~]$ source /etc/profile

3. hbase的启动与关闭

1)启动(启动前必须保证hdfs已经启动)

语法:【$>hbase主目录下/bin/start-base.sh】

[hduser@node1 ~]$ ./hbase/bin/start-hbase.sh 
node1: starting zookeeper, logging to /home/hduser/hbase/logs/hbase-hduser-zookeeper-node1.out
node2: starting zookeeper, logging to /home/hduser/hbase/logs/hbase-hduser-zookeeper-node2.out
node3: starting zookeeper, logging to /home/hduser/hbase/logs/hbase-hduser-zookeeper-node3.out
starting master, logging to /home/hduser/hbase/logs/hbase-hduser-master-node1.out
node3: starting regionserver, logging to /home/hduser/hbase/logs/hbase-hduser-regionserver-node3.out
node2: starting regionserver, logging to /home/hduser/hbase/logs/hbase-hduser-regionserver-node2.out
node3: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
node3: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
node2: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
node2: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

Hbase首先启动的是ZooKeeper,再启动的是HMaster和HRegionServer,启动成功后注意node1上增加了两个 java 进程—"HQuorumPeer"和"HMaster",分别是ZooKeepper进程和HBase进程:

[hduser@node1 bin]$ jps
		12226 HMaster
		11186 NameNode
		13651 Jps
		11526 ResourceManager
		11384 SecondaryNameNode
		5353 HQuorumPeer
		12748 Main

再看从机的Java进程,这里多了两个进程“HQuorumPeer”和“HRegionServer”,同样分别是ZooKeepper进程和HBase进程:

[hduser@node2 bin]$ jps
		5444 DataNode
		5557 NodeManager
		4437 HQuorumPeer
		4542 HRegionServer
		6303 Jps

2)关闭

语法:【 $>hbase主目录下/bin/stop-base.sh】

[hduser@node1 hbase]$ /home/hduser/hbase/bin/stop-hbase.sh 
stopping hbase................
node3: stopping zookeeper.
node2: stopping zookeeper.
node1: stopping zookeeper.

3)浏览器测试:

访问:  http://node1.16010

HBase初识、CentOS6.6中HBase安装与HBase Shell简单使用

4)命令测试(登陆进入数据库)

语法:【$>hbase主目录下/bin/hbase shell】

[hduser@node1 ~]$ ./hbase/bin/hbase shell

进入HBase Shell后,使用HBase Shell命令“status”可在HBase Shell中查看HBase的运行状态,如下,表示当前共有两个HRegionServer正在正常运行:

hbase(main):001:0> status
2 servers, 0 dead, 1.5000 average load

4. 术语

1)hregion

hregion指的是hbase的数据存储是以区块(region)存储的。

 2)hregionserver

hregionserver指的是hbase数据库从机,存具体数据。

3)hmaster

hmaster指的是hbase主机,存储元数据(结构数据)。

4)行(row)与行键(rowkey)

hbase中一条完整的数据即一行,由一个唯一的行键+多个列键值构成。

行键:每一行都有一条内置的主键,用于区别其他行数据。

5)列簇(columnfamily)

hbase中列簇指的是一个大列,这个大的列可以有0个(列簇即列)或多个列(column)构成。

如成绩表score中course列簇由数学(math)、美术(art)等。

新建表只需要指定列簇,而不需要指定列。

create table score ,'course:'.

6)列键(column key)

hbase中每一行数据都是由很多列键构成的,其中一个列一般都有一个或多个列键。

每一个列键值都由行键、单元格值、时间戳、版本构成。

如:成绩表中数学成绩结构如下->

行键         列                  单元格值      时间戳           版本

1001      course:math     55                2019-1***        1(及时间戳,以1,2,3.....增加)    

7)单元格(cell 或者列键值)

在hbase中,值是作为一个单元保存在系统中的,要定位一个单元,需要使用”行键+列键+时间戳“等三要素

8)时间戳(Timestamp)

插入单元格时的时间,默认作为单元格的版本号。

9)来两个自定义的概要图理解

HBase初识、CentOS6.6中HBase安装与HBase Shell简单使用

HBase初识、CentOS6.6中HBase安装与HBase Shell简单使用

5. HBase Shell命令简单使用

命令都在hbase主目录下/bin/下,可以配置bin到环境变量PATH下(即上面做的环境变量配置)

注意:所有的表名和列名都要用单引号括起来并以逗号分隔开。

1)查看所有表: list

语法:【$hbase>list】

示例:

hbase(main):006:0> list
TABLE                                                                           
music                                                                           
scores                                                                          
2 row(s) in 0.0310 secOnds=> ["music", "scores"]

2) 查看当前表所有列簇的详细描述信息: describe

语法:【$hbase>describe '表名'】

示例:

hbase(main):007:0> describe 'scores'
Table scores is ENABLED                                                         
scores                                                                          
COLUMN FAMILIES DESCRIPTION                                                     
{NAME => 'course', BLOOMFILTER => 'ROW', VERSIOnS=> '1', IN_MEMORY => 'false', 
KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', 
COMPRESSION => 'NONE', MIN_VERSIOnS=> '0', BLOCKCACHE => 'true', BLOCKSIZE => '
65536', REPLICATION_SCOPE => '0'}                                               
{NAME => 'grade', BLOOMFILTER => 'ROW', VERSIOnS=> '1', IN_MEMORY => 'false', K
EEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', C
OMPRESSION => 'NONE', MIN_VERSIOnS=> '0', BLOCKCACHE => 'true', BLOCKSIZE => '6
5536', REPLICATION_SCOPE => '0'}                                                
2 row(s) in 0.3110 seconds

3)新建表、列、列簇: create

简化方式语法 :【$hbase>create '表名’,‘列簇1',......'列簇n'】

示例:

hbase(main):005:0> create 'scores','grade','course'
0 row(s) in 1.6600 secOnds=> Hbase::Table - scores

完整的语法写法:【$hbase>create '表名',{NAME=>'列簇名',VERSIOnS=>可保存在单元时间版本的最大数量},....】

样例:

$hbase>create 'scores',{NAME=>'grade',VERSIOnS=>5},{NAME=>'course',VERSIOnS=5}

对比上一个方式,此命令制定了列簇名及可保存的单元时间版本最大数量。可以看出,指定列簇参数的格式为:参数名=>参数值,注意赋值符号为“=>”且参数名必须大写。如果制定了多个参数,应以逗号分开,最后所有参数以“{}”括起来表示一个列簇。

4)插入数据: put

语法:【$hbase>put '表名','行键名','列键名称','单元格值'】

样例:插入播放记录

$hbase>put 'music','1001','song','music1'

$hbase>put 'music','1001','singer','singer1'

$hbase>put 'music','1001','playdata','2019-11-1'

示例:

hbase(main):008:0> put 'scores','tom','grade:','1'
0 row(s) in 0.2000 seconds

hbase(main):009:0> put 'scores','tom','course:art','80'
0 row(s) in 0.0400 seconds

hbase(main):010:0> put 'scores','tom','course:math','89'
0 row(s) in 0.0090 seconds

hbase(main):011:0> put 'scores','jason','grade:','2'
0 row(s) in 0.0330 seconds

hbase(main):012:0> put 'scores','jason','course:art','87'
0 row(s) in 0.0120 seconds

hbase(main):013:0> put 'scores','jason','course:math','57'
0 row(s) in 0.0040 seconds

5)扫描一张表: scan

语法:【 $hbase>scan '表名',{COLUMNS=>['列簇名1’,‘列簇名2'......],参数名=>参数值....}】 大括号内的内容为扫描条件,如果不指定则查询所有数据。

示例1:

hbase(main):014:0> scan 'scores'
ROW                   COLUMN+CELL                                               
 jason                column=course:art, timestamp=1547563878493, value=87      
 jason                column=course:math, timestamp=1547563894482, value=57     
 jason                column=grade:, timestamp=1547563847271, value=2           
 tom                  column=course:art, timestamp=1547563796441, value=80      
 tom                  column=course:math, timestamp=1547563812083, value=89     
 tom                  column=grade:, timestamp=1547563754447, value=1           
2 row(s) in 0.0550 seconds

示例2:以上输出结果显示2行数据,因为在scan的结果中,将相同的行键的所有单元视为一行。如果对有些列簇不关心,便可以指定只查询某一个列簇:

hbase(main):015:0> scan 'scores',{COLUMNS=>'course'}
ROW                   COLUMN+CELL                                               
 jason                column=course:art, timestamp=1547563878493, value=87      
 jason                column=course:math, timestamp=1547563894482, value=57     
 tom                  column=course:art, timestamp=1547563796441, value=80      
 tom                  column=course:math, timestamp=1547563812083, value=89     
2 row(s) in 0.0260 seconds

语法:【 $hbase>scan '表名' ,{COLUNMN=>['列键1’,‘列键2'......],参数名=>参数值....}】将COLUMNS替换成COLUMN,表示当前扫描的目标时列键,如下示例中扫描所有行的列键为“course:math”的单元,并使用LIMIT参数限制只输出一个单元:

示例3:

hbase(main):016:0> scan 'scores',{COLUMN=>'course:math',LIMIT=>1}
ROW                   COLUMN+CELL                                               
 jason                column=course:math, timestamp=1547563894482, value=57     
1 row(s) in 0.2050 seconds

6)查询一行数据(不筛选): get

语法:【 $hbase>get '表名' ,'行主键名'】

样例:只查看 1001的数据

$hbase>get 'music','1001'

示例:查找行键为“jason”的所有单元

hbase(main):018:0> get 'scores','jason'
COLUMN                CELL                                                      
 course:art           timestamp=1547563878493, value=87                         
 course:math          timestamp=1547563894482, value=57                         
 grade:               timestamp=1547563847271, value=2                          
3 row(s) in 0.1180 seconds

7)查询一行中某些单元格的数据(筛选): get

语法:【 $hbase>get '表名' ,'行主键名',{COLUNMNS=>['列簇名1’,‘列簇名2'......],参数名=>参数值....}】

语法:【 $hbase>get '表名' ,'行主键名',{COLUNMN=>['列键1’,‘列键2'......],参数名=>参数值....}】

示例:精确查找行键为“jason”,列键为"course:math"的单元

hbase(main):020:0> get 'scores','jason',{COLUMN=>'course:math'}
COLUMN                CELL                                                      
 course:math          timestamp=1547563894482, value=57                         
1 row(s) in 0.0080 seconds

与scan相比多一个行键参数。因为scan查找的目标是全表的某个列簇、列键,而get查找的目标是某行的某个列簇、列键。

提示:

  • get 'scores','jason',{COLUMNS=>'course'}  等价于 get 'scores','jason','course'
  • get 'scores','jason',{COLUMN=>'course:math'}  等价于 get 'scores','jason','course:math'
  • get 'scores','jason',{COLUMNS=>['course','grade']}  等价于 get 'scores','jason','course','grade'
  • get 'scores','jason',{COLUMN=>['course:math','grade:']}  等价于 get 'scores','jason','course:math','grade:'

7)删除数据(删除一行中的一个单元): delete

语法:【$hbase>delete '表名','行主键名' {CLOUMNS=>'列键值'}】

注意:'列键值'--->'列簇名:查找的单元名称'

示例:

hbase(main):021:0> delete 'scores','jason','course:art'
0 row(s) in 0.0690 seconds

hbase(main):022:0> get 'scores','jason'
COLUMN                CELL                                                      
 course:math          timestamp=1547563894482, value=57                         
 grade:               timestamp=1547563847271, value=2                          
2 row(s) in 0.0150 seconds

8)删除一行: deleteall

语法:【$hbase>deleteall '表名','行主键名'】

9)修改表: alter

语法:【$hbase>alter'表名称',参数名=>参数值,........】为表增加或修改列簇;其中列簇名参数NAME必须提供,如果已存在则修改,否则会增加一个列簇。

示例:将scores表的列簇“course”的“VERSIONS”参数修改为“5”

hbase(main):023:0> alter 'scores',NAME=>'course',VERSIOnS=>'5'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.4070 seconds

语法:【$hbase>alter'表名称',{参数名=>参数值,....},{参数名=>参数值,....}.......】 同时修改或增加多个列簇时应用逗号分开,并且每个列簇用“{}”括起来。

示例:将同时修改scores表的两个列簇

hbase(main):024:0> alter 'scores',{NAME=>'grade',VERSIOnS=>'5'},{NAME=>'course',VERSIOnS=>'5'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.8990 seconds

10)删除表: drop

语法:【$hbase>drop '表名'】

HBase表分为两种状态:ENABLED和DISABLED,分别表示是否可用。

使用disable将表设置为不可用状态:

语法:【$hbase>disable'表名'】

使用enable将表设置为可用状态:

语法:【$hbase>enable '表名'】

当表为ENABLED状态时,会被禁止删除,所以必须先将表设置为DISABLED状态才可以被删除。

示例:

hbase(main):032:0> disable 'scores'
0 row(s) in 2.2610 seconds

hbase(main):033:0> drop 'scores'
0 row(s) in 1.2970 seconds

hbase(main):034:0> list
TABLE                                                                           
music                                                                           
1 row(s) in 0.0040 secOnds=> ["music"]
hbase(main):035:0>

提示:以上示例的顺序不完全是按正常顺序操作下来的,所以,应该按照正常的创建,增加,获取,修改,删除流程来操作。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • Hadoop + Spark安装(三) —— 调hadoop
    ***************************测试hadoop及问题跟进***************************执行以下语句报错datahadoop-2.9. ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • Win10 周年更新 14393.1737 的详细内容与改进
    尽管今天不是常规的周二补丁日,微软依然发布了 Win10 周年更新 14393.1737 和 Win10 创意者更新 15063.632。本文将详细介绍 Win10 周年更新 14393.1737 的主要更新内容。 ... [详细]
  • 数据读取hadoopFileParameters:path–pathtoHadoopfileinputFormatClass–fullyqualifiedclassnameo ... [详细]
author-avatar
白猫警员123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有