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'

posted @ 2022-07-11 16:23  奋斗史  阅读(309)  评论(0)    收藏  举报