Hadoop之HBase的高级功能
1. 多版本version
从HBase0.96之后,版本值改为1,之前是3.
1. 如果需要使用多版本数据,如何配置?
1. 修改表结构
alter 'yangjianbo',{NAME=>'info',VERSIONS=>'3'}
2. 插入多版本数据,同一rowkey
put 'yangjianbo','s001','info:name','zhangxueyou'
put 'yangjianbo','s001','info:name','gutianle'
put 'yangjianbo','s001','info:name','zhengyijian'
3. 查看所有版本的数据
get 'yangjianbo','s001',{COLUMN=>'info:name',VERSIONS=>3}
4. 插入第四条数据
put 'yangjianbo','s001','info:name','liudehua'
当第四条数据插入以后,第一条数据就被清除了
2. 多版本数据是如何区别的呢?
通过时间戳进行区别
2. 快照
1. 快照的作用
可以当做一种备份方式,默认已开启快照
2. 如何配置快照
1. 生成快照
snapshot 'yangjianbo','yangjianbo_20220708' 表名,快照名
2. 查看快照
list_snapshots
SNAPSHOT TABLE + CREATION TIME yangjianbo_20220708 yangjianbo (2022-07-08 15:37:00 +0800) 1 row(s) Took 0.0589 seconds => ["yangjianbo_20220708"]
3. 克隆快照
clone_snapshot 'yangjianbo_20220708','yangjianbo_new'
4. 还原快照
disable 'yangjianbo' 禁用原来的表
restore_snapshot 'yangjianbo_20220708' 恢复指定的快照
enable 'yangjianbo' 启用原来的表
5. 删除快照
delete_snapshot 'yangjianbo_20220708'
6. 迁移快照到其它集群上
hbase snapshot export --snapshot 'yangjianbo_20220708' --copy-to hdfs://172.16.1.229:9000/newbase
迁移报错: 必须是另外一个集群,同一个集群不能迁移
3. Bulk Loading
1. 工作流程
1. 使用HBase自带的importtsv工具生成HBase底层可以识别的StoreFile文件
2. 通过completebulkload工具将生成的文件加载到HBase的表中,整个加载过程就是一个MapReduce的任务
2. 操作步骤
1. 在HBase创建对应的表
create 'emp_bulk','info','money'
2. 用户数据都保存在csv文件中
15,yangjianbo,manager,1,1984/09/22,1000,200,70 16,zhangyan,manager,1,1989/02/02,1000,300,70 1,wangshiqiang,zongjian,0,1985/01/02,2000,400,70 0,yinzong,laoban,0,1976/02/03,100000,20,0
3. 将csv文件上传至hdfs
hdfs dfs -put emp.csv /test
4. importtsv生成HFile
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \ -Dimporttsv.columns=HBASE_ROW_KEY,info:ename,info:job,info:mgr,info:hiredate,money:sal,money:comm,info:deptno \ -Dimporttsv.separator="," \ -Dimporttsv.bulk.output=hdfs://172.16.1.229:9000/bulkload/empoutput \ emp \ hdfs://172.16.1.229:9000/test/emp.csv
5. 使用completebulkload命令完成HFile数据加载
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://172.16.1.229:9000/bulkload/empoutput emp_bulk
6. 查看一下表内容
scan 'emp_bulk'
4. 权限管理
1. 权限类型
Read 允许对某个scope有读取权限
Write 允许对某个scope有写入权限
Execute 允许对某个scope有执行权限
Create 允许对某个scope有建表和删表权限
Admin 允许对某个scope进行管理操作,如balance,split,snapshot等
2. 权限作用范围
superuser 超级用户,一般为HBase用户,有所有的权限
global 全局权限,针对所有的HBase表都有权限
namespace 命名空间级别权限
table 表级别权限
columnFamily 列族级别权限
cell 单元格级别权限
3. 启用用户权限功能
在hbase-site.xml添加参数
<property> <name>hbase.security.authorization</name> <value>true</value> </property> <property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.hadoop.hbase.security.access.AccessController</value> </property> <property> <name>hbase.coprocessor.region.classes</name> <value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value> </property> <property> <name>hbase.superuser</name> <value>hbase,root,hadoop</value> </property>
4. 授权用户某个表的只读权限
grant 'username','R','表名'
grant 'yangjianbo','R','yangjianbo'
在操作系统上创建用户yangjianbo,然后切换到该用户下,执行插入数据,会有报错,因为权限不足
hbase(main):003:0> put 'yangjianbo','s002','info:name','houzhen' ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions (user=yangjianbo, scope=default:yangjianbo, family=info:name, params=[table=default:yangjianbo,family=info:name],action=WRITE) For usage try 'help "put"' Took 1.3255 seconds
5. 授权用户某个表的读写权限
grant 'username','RW','表名'
grant 'yangjianbo','RW','yangjianbo'
6. 授予用户某个命名空间的RWXCA权限
grant 'username','RWXCA','@空间名'
grant 'yangjianbo','RWXCA','@default'
7. 收回用户的权限
revoke 'yangjianbo','@default' 收回用户在默认空间的权限
revoke 'username','表名' 收回用户在表上的权限
5. 备份和还原
HBase常用的备份方案: snapshots,Replication,Export/Import,CopyTable,HTable API和Offline backup of HDFS data
1. Export/Import
内置的一个功能,整个导入导出过程就是一个MapReduce任务
1. 导出数据的语法
hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <HDFS outputdir>
hbase org.apache.hadoop.hbase.mapreduce.Export yangjianbo /test/ceshi 将yangjianbo表,导出到hdfs的/test/ceshi目录下
2. 导入数据的语法
hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <HDFS inputdir>
hbase org.apache.hadoop.hbase.mapreduce.Import yangjianbo_20220711 /test/ceshi
2. CopyTable
也是一个MapReduce任务从源表读取数据,并将其输出到HBase的另一张表中,这张表可以在本地集群,也可以在远程集群
主要作用:集群内部表备份,远程集群备份,表数据增量备份,部分结构数据备份
1. 本地复制
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=yangjianbo_new2 yangjianbo 新表yangjianbo_new2,原表yangjianbo
2. 远程复制
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=yangjianbo_new2 --peer.adr=远端zookeeper地址:2181:/hbase yangjianbo
3. 增量备份
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=<起始时间戳> --endtime=<结束时间戳> --new.name=yangjianbo_new2 yangjianbo
6. 主从复制
1. 介绍
HBase的主从复制是master-push,即主集群推送方式
一个主集群可以复制给多个从集群
主从复制是异步的
2. 原理
主集群会将WAL日志按照顺序读取,并将读取的WAL日志的offset偏移量记录到zookeeper中;
主集群向从集群发送读取出来的WAL日志的offset偏移量;
从集群的Region Server收到这些信息后,会使用HBase的客户端将这些信息写入表中
3. 配置
1. 主从集群都要开启复制功能,在配置文件hbase-site.xml,加入下面的内容,并重启hbase
<property> <name>hbase.replication</name> <value>true</value> </property>
2. 主从集群都要创建相同的表结构
create 'yangjianbo','info'
3. 在主集群上打开表的列族的复制特性
disable 'yangjianbo'
alter 'yangjianbo', {NAME => 'info',REPLICATION_SCOPE => '1'}
4. 在主集群上设置向哪个从集群复制数据
add_peer '10',CLUSTER_KEY=>"从集群IP:2181:/hbase"
或者add_peer '10','从集群IP:2181:/hbase'

浙公网安备 33010602011771号