Hadoop平台中HBase 库操作与表操作

236次阅读
没有评论

Task1 HBase 库操作与表操作

一、HBase 库操作

1.HBase集群启动(上一个实验已经启动)

HBase依赖hdfs服务,通过相互之间的依赖关系得到启动顺序为:Zookeeper > hadoop > HBase。

首先启动Zookeeper,在所有节点上执行命令。

[hadoop@master ~]$ ./zkServer.sh start

[hadoop@slave1 ~]$ ./zkServer.sh start

[hadoop@slave2 ~]$ ./zkServer.sh start

Zookeeper选举机制会自动选择Leader节点,在master节点启动hadoop服务。

[hadoop@master ~]$ ./start-all.sh

hadoop从节点会自行启动。最后启动HBase(master节点)

[hadoop@master ~]$ ./start-hbase.sh

[hadoop@master ~]$ jps

Hadoop平台中HBase

2.HBase动态删除节点

节点升级或者硬盘扩容在存储服务器上属于正常现象,当某存储节点需要扩容升级短暂下线后需要该节点下线。

假设slaves3节点扩容升级,执行以下命令,停止该节点上HBase服务。

[hadoop@master ~]$ cd /usr/local/src/hbase/bin

[hadoop@master bin]$ graceful_stop.sh slave2

graceful_stop.sh脚本会自行关闭平衡器,移动slaves2节点上的数据到其他节点上,此步骤会消耗大量时间等待。

同时需要hadoop中删除节点。在hdfs-site.xml中添加配置。需要新建exclude文件,该文件写入删除节点名称。

[hadoop@master bin]$ vi /usr/local/src/hadoop/etc/hadoop/exclude

 slave2

[hadoop@master bin]$ vi /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml

<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/src/hadoop/etc/hadoop/exclude</value>
</property>

dfs.hosts.exclude:表示需要删除exclude中的节点。

刷新配置生效。

[hadoop@master bin]$ cd

[hadoop@master ~]$ hadoop dfsadmin -refreshNodes

打开Web UI监控页面查看,发现此节点显示(Decommission In Progress),表示节点正在做数据迁移,等待后节点停止,dead node列表显示下线节点。

节点下线后需要将slaves与exclude文件中slave2删除,刷新hadoop命令,此时全部结束。

Hadoop平台中HBase

3.HBase动态增加节点

集群的分布式扩展是非关系数据库与传统数据库相比最大的优点。在原有集群基础上增加新的节点slave2。增加新节点首先保证新的hadoop集群已经运行正常,不需要关闭集群,执行以下命令即可。

(1)在新的节点上启动服务。切换到新增节点上,使用以下命令。

[hadoop@slave2 ~]$ cd /usr/local/src/hbase/bin

[hadoop@slave2 bin]$ ./hbase-daemon.sh start regionserver

Hadoop平台中HBase

二、HBase表管理

1.建立表,两个列簇:name和num

打开浏览器,输入DataEngine安装完成后提供的 URL,初始账号密码为admin/admin。如图1-5所示。

进入HBase命令行

[hadoop@master ~]$ hbase shell

建立表student,两个列簇:name和num

hbase(main):001:0> create ‘student’,{NAME=>’name’},{NAME=>’num’}

0 row(s) in 1.5420 seconds

=>HBase:: Table – scores

新建学生表,存储姓名与学号。

语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}

Hadoop平台中HBase

2.查看所有表与详细信息

hbase(main):002:0> list

TABLE
student
1 row(s) in 0.0100 seconds=>[“student”]

查看建表详细信息

hbase(main):003:0> describe ‘student’

Table student is ENABLED                                                                                                                          
student                                                                                                                                           
COLUMN FAMILIES DESCRIPTION                                                                                                                        
{NAME => ‘name’, 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 => ‘num’, 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’}                       
2 row(s) in 0.1310 seconds

在建立表时没有指定列的详细属性,系统根据默认设置。

语法:describe <table>

3.修改表

hbase(main):004:0> alter ‘student’ ,{NAME=>’tel’}

Updating all regions with the new schema…
1/1 regions updated.
Done.
0 row(s) in 2.2360 seconds 2 row(s) in 0. 0230 seconds

新增加新的列tel,alter也可以对列删除,对属性进行修改。

hbase(main):005:0> alter ‘student’ ,{‘NAME’=>’name’,VERSIONS=>’2′}

Updating all regions with the new schema…
1/1 regions updated.
Done.
0 row(s) in 2.0350 seconds

hbase(main):006:0> alter ‘student’,{NAME=>’tel’,METHOD=>’delete’}

Updating all regions with the new schema…
1/1 regions updated.
Done.
0 row(s) in 2.1230 seconds

修改原name列的VERSIONS属性为2。删除刚增加的tel列。

4.删除表

hbase(main):007:0> disable ‘student’

0 row(s)in 2.2930seconds

hbase(main):009:0> drop ‘student’

0 row(s)in 1.2530seconds
HBase( main) :023:0> list
TABLE
0 row(s)in 0.0150 seconds  ==>[]

最后可查看数据库状态,包括正在运行的节点,死亡节点等信息。

hbase(main) :025 :0> status

1 active master, 0 backup masters, 2

Task2 HBase数据操作

一、插入数据和修改

1.插入数据和修改

建立表student,两个列簇:name和num

hbase(main):001:0> create ‘student’,{NAME=>’name’},{NAME=>’num’}

hbase(main):002:0> list

插入两条数据:

hbase(main):003:0> put ‘student’,’rk1′,’name’,’Tom’

hbase(main):004:0> put ‘student’,’rk1′,’num’,’123456′

hbase(main):005:0> put ‘student’,’rk2′,’name’,’Sun’

hbase(main):006:0> put ‘student’,’rk2′,’num’,’123456′

hbase(main):007:0> put ‘student’,’rk3′,’name:cha’,’wangyu’

查看整个表记录

修改操作也是用put命令,就是重新添加内容把,把以前的内容覆盖。

语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>。其中,’table_name’为表名,’rk1’为rowkey,’name: cha ‘ name为列族,cha为列,’Tom’为值,同一个列族下可以有多个列,同一个rowkey视为同一行。

2.读取指定行、指定行中的列的信息

hbase(main):009:0> get ‘student’,’rk1′

COLUMN             CELL                                               
name:             timestamp=1596186987758, value=Tom                 
num:              timestamp=1596186991960, value=123456              
2 row(s) in 0.0630 seconds

hbase(main):009:0> get ‘student’,’rk1′,’name’

COLUMN             CELL                                               
name:             timestamp=1596186987758, value=Tom                 
1 row(s) in 0.0200 seconds

语法:get <table>,<rowkey>,[<family:column>,….]

3.scan命令扫描全表

语法:scan <table>, {COLUMNS => [ <family:column>,…. ], LIMIT => num}

注:数据导入时,要注意数据的格式,否则显示为十六进制。

hbase(main):013:0>scan ‘student’

ROW                COLUMN+CELL                                        
rk1               column=name:, timestamp=1596186987758, value=Tom   
rk1               column=num:, timestamp=1596186991960, value=123456 
rk2               column=name:, timestamp=1596186995797, value=Sun   
rk2               column=num:, timestamp=1596187000182, value=123456 
rk3               column=name:cha, timestamp=1596187003825, value=wangyu                                                 
3 row(s) in 0.0520 seconds

4.删除指定行中的列、指定行,清空表。

hbase(main):014:0>delete ‘student’,’rk2′,’name’

hbase(main):014:0>deleteall ‘student’,’rk2′

hbase(main):014:0>truncate ‘student’

Truncating ‘student’ table (it may take a while):
– Disabling table…
– Truncating table…
0 row(s) in 7.2190 seconds

语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名,这里需要注意,如果该列保存有多个版本的数据,将一并被删除。

使用deleteall命令,删除table_name表中rowkey002这行数据。

语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据。

使用truncate命令,删除table_name表中的所有数据。

语法:truncate <table> 其具体过程是:disable table -> drop table -> create table。

二、模糊查询

1.限制查询

hbase(main):003:0> put ‘student’,’rk1′,’name’,’Tom’

hbase(main):004:0> put ‘student’,’rk1′,’num’,’123456′

hbase(main):005:0> put ‘student’,’rk2′,’name’,’Sun’

hbase(main):006:0> put ‘student’,’rk2′,’num’,’123456′

hbase(main):007:0> put ‘student’,’rk3′,’name:cha’,’wangyu’

hbase(main):014:0> scan ‘student’,{COLUMNS=>’name’}

ROW                COLUMN+CELL                                        
rk1               column=name:, timestamp=1596187375037, value=Tom   
rk2               column=name:, timestamp=1596187384917, value=Sun   
rk3               column=name:cha, timestamp=1596187394040, value=wangyu                                                 
3 row(s) in 0.0310 seconds

hbase(main):002:0> scan ‘student’,{COLUMNS=>[‘name’,’num’],LIMIT=>2}

ROW                COLUMN+CELL                                         
rk1               column=name:, timestamp=1596187375037, value=Tom   
rk1               column=num:, timestamp=1596187380066, value=123456 
rk2               column=name:, timestamp=1596187384917, value=Sun   
rk2               column=num:, timestamp=1596187389628, value=123456 
2 row(s) in 0.0160 seconds

语法:scan <table> ,{COLUMNS=>’ column ‘}

count对表计数时INTERVAL: 每隔多少行显示一次count,默认是1000,CACHE:每次去取的缓存区大小,默认是10,调整该参数可提高查询速度,大表查询通过参数设置可以加快计算速度。

语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}

hbase(main):002:0> count ‘student’

3 row(s) in 0.6010 seconds=> 3

2.限制时间范围

hbase(main):004:0> scan ‘student’, {TIMERANGE => [1595397845355,1595397925166]}

ROW                COLUMN+CELL                                        
0 row(s) in 0.0200 seconds

时间戳是1970年01月01日00时00分00秒起至当下的总秒数。通常表示提供一份电子证据,以证明用户的某些数据的产生时间

3.PrefixFilter:rowKey前缀过滤

hbase(main):005:0> scan ‘student’,{FILTER=>”PrefixFilter(‘rk’)”}

ROW                COLUMN+CELL                                        
rk1               column=name:, timestamp=1596187375037, value=Tom   
rk1               column=num:, timestamp=1596187380066, value=123456 
rk2               column=name:, timestamp=1596187384917, value=Sun   
rk2               column=num:, timestamp=1596187389628, value=123456 
rk3               column=name:cha, timestamp=1596187394040, value=wangyu                                                 
3 row(s) in 0.0600 seconds

同时也有QualifierFilter:列名过滤器、TimestampsFilter:时间戳过滤器等,支持“且”操作。

ValueFilter:值确定查询(value=Tom)与模糊查询(value包含m)

hbase(main):005:0> scan ‘student’,FILTER=>”ValueFilter(=,’binary:Tom’)”

ROW                COLUMN+CELL                                        
rk1               column=name:, timestamp=1596187375037, value=Tom   
1 row(s) in 0.0480 seconds

hbase(main):006:0> scan ‘student’,FILTER=>”ValueFilter(=,’substring:m’)”

ROW                COLUMN+CELL                                        
rk1               column=name:, timestamp=1596187375037, value=Tom   
1 row(s) in 0.0270 seconds

三、批量导入/导出

1. ImportTsv工具

命令:bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv

Usage: importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>

首先数据存入到.csv文件,上传至hdfs服务器中。hbase调用MapReduce服务,当数据量较大时需等待。

[hadoop@master ~]$ hdfs dfs -put /opt/software/student.csv /input

[hadoop@master ~]$  hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=”,” -Dimporttsv.columns=HBASE_ROW_KEY,name,num student /input/student.csv

Hadoop平台中HBase

2.Export数据导出

命令:bin/hbase org.apache.hadoop.hbase.mapreduce.Export

Usage: <tablename> <hdfsdir>  

[hadoop@master ~]$ cd /usr/local/src/hbase/bin 

[hadoop@master bin]$ hbase org.apache.hadoop.hbase.mapreduce.Export student /output/hbase-data-back

Hadoop平台中HBase
Hadoop平台中HBase
Hadoop平台中HBase
到点睡觉了
版权声明:本站原创文章,由 到点睡觉了2022-01-07发表,共计9222字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)