1、B站学习视频:尚硅谷HBase教程(hbase框架快速入门)_哔哩哔哩_bilibili
2、简书---Hbase学习笔记:Hbase学习笔记 - 简书
3、简书---Hbase学习笔记(二):HBase学习笔记(二) - 简书
4、简书---Hbase介绍三(配置文件详解):Hbase介绍三(配置文件详解) - 简书
5、简书---Hbase 常用参数:hbase 常用参数 - 简书
6、简书---HBase客户端:四、HBase客户端 - 简书
7、简书---HBase运维:十二、HBase运维 - 简书
8、C语言中文网---HBase是什么?:HBase是什么?(对HBase介绍的比较全面)
0x01. 简介
1、定义
HBase是一种分布式、可扩展、支持海量数据存储的一个NoSQL数据库,相较于HDFS可以进行随机写操作。
什么是NoSQL:非结构化数据库(非关系型数据库),
2、物理存储结构
通过时间戳覆盖文件
3、数据模型
1、Name Space
命名空间,类似于关系型数据库的database概念,每个命名空间下存在多个表。HBase有两个自带的命名空间,分别是hbase和default,hbase中存放着HBase内置的表,default表是默认使用的命名空间。
2、Region
类似于关系数据库中表的概念,在HBase俗称表的切片。
3、Row
HBase表中的每行数据都由一个RowKey 和 多个Column(咧)组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索。
4、Column
HBase中每个列都由Column Family (列族)和Column Qualifier (列限定符)进行限定
5、Time Stamp
时间戳,唯一标识。每条数据写入时,如果不指定时间戳,系统会自动添加。
4、HBase的基本架构
架构角色
1、Region Server
Region Server为Region的管理者。主要作用---对数据的操作:get、put、delete
2、Master
Master是所有Region Server的管理者。主要作用---对表的操作,create、delete、alter
3、Zookeeper
HBase通过Zookeeper来做master的高可用、Region Server的监控、元数据的入口以及集群配置的维护工作
4、HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用的支持
5、高可用性(Backup Masters)
1、启用backup-master
#:hbase-daemon.sh start master
2、自动启用
backup-master
在conf目录下创建backup-masters文件
输入HBase 主机名
0x02. HBase Shell操作
Hbase Shell命令操作分为DDL和DML两组命令
DDL:
1、判断表是否存在
2、创建表
3、创建命名空间
4、删除表
DML:
1、插入数据
2、查数据(get)
3、查数据(scan)
4、删除数据
常用命令:
1、bin/start-hbase.sh 进入shell界面
2、ctrl + backspace 删除命令
3、create 'stu' 创建列族
4、list 查看 列族
5、drop 删除
6、scan 扫描表
Hbase用户权限管理
HBase提供五个权限标识符:(RWXCA)
读R - represents read privilege.
写W - represents write privilege.
执行X - represents execute privilege.
创建C - represents create privilege.
管理员A - represents admin privilege.
1. 通过grant命令赋予权限
语法:
grant <user> <permissions> [<table> [<column family> [<column; qualifier>]]
用法示例:
授权:
hbase(main):012:0> grant 'Administrator','RWCA','emp'(表名)
0 row(s) in 0.1740 seconds
权限查看
hbase(main):014:0> user_permission 'emp'(表名)
hbase(main):014:0> user_permission 'emp'
User Namespace,Table,Family,Qualifier:Permission(命名空间、表、族、限定符:权限)
Administrator default,emp,,: [Permission: actions=READ,WRITE,CREATE,ADMIN]
root default,emp,,: [Permission: actions=READ,WRITE,EXEC,CREATE,ADMIN]
2 row(s) in 0.0640 seconds
2. 权限收回
语法:
revoke <user> [<table> [<column family> [<column; qualifier>]]
hbase(main):014:0> revoke 'Administrator','emp
'0 row(s) in0.1860seconds
指定hbase集群的端口
在hbase_env.sh中增加
export HBASE_SSH_OPTS="-p 2222"
0x03. 备份数据
参考链接:HBase原理 – snapshot 快照_jast_zsh的博客-CSDN博客_hbase snapshot 原理
参考链接:Hbase snapshot_tiny@ant的博客-CSDN博客
hbase提供了很简单的一种通过snapshot方式进行打快照和恢复快照.同时也可以通过这种方式定期的备份hbase数据,以防数据丢失.
一、hbase表级备份原理
对当前表做快照,可以使用恢复快照命令将表到某个时间点。
Snapshot 命令通常在秒级即可完成、快照只生成一些元数据,不会对文件本身产生影响。HBase 提供导出快照功能,可以将快照文件导出到另外的HBase集群进行恢复。也可以在原集群进行恢复。恢复在秒级完成。目前仅支持对当前时间点做全量快照,无法增量备份。
HBase 配置支持快照功能:
<property> <name>hbase.snapshot.enabled</name> <value>true</value> </property>
启动hbase shell
bin/hbase shell
执行快照命令
snapshot 'myTable','myTable20200220'
列出快照
list_snapshots
删除快照
delete_snapshot 'myTable20200220'
恢复某一个快照
restore_snapshot 'myTable20200220'
也可以很方便的将快照导出到另外一个集群
bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://hadoop-data-2:8082/hbase -mappers 16
0x04. HBase 安全审计------Apache Ranger:统一授权管理框架
原文链接:Apache Ranger:统一授权管理框架_自知自省的博客-CSDN博客
1. 简介
Apache Ranger 是一个用在 Hadoop 平台上并提供操作、监控、管理综合数据安全的框架。Ranger 的愿景是在 Apache Hadoop 生态系统中提供全面的安全性。 目前,Apache Ranger 支持以下 Apache 项目的细粒度授权和审计:
- Apache Hadoop
- Apache Hive
- Apache HBase
- Apache Storm
- Apache Knox
- Apache Solr
- Apache Kafka
- YARN
对于上面那些受支持的 Hadoop 组件,Ranger 通过访问控制策略提供了一种标准的授权方法。作为标准,Ranger提供了一种集中式的组件,用于审计用户的访问行为和管理组件间的安全交互行为。
最新版本的Apache Ranger已经支持Elasticsearch等组件。
2. Apache Ranger访问条件
Apache Ranger访问策略模型由两个主要组件组成:对策略所应用的资源的规范,例如HDFS文件和目录,Hive数据库、表、列,HBase表、列族和列等;以及特定用户和组的访问条件规范。
3. 允许、拒绝和排除条件
Apache Ranger支持以下访问条件:
1、允许
2、从允许中排除
3、拒绝
4、从拒绝中排除
这些访问条件使您可以设置细粒度的访问控制策略。
例如,您可以允许“财务”组中的所有用户访问“财务”数据库,但是拒绝对“实习生”组中的所有用户进行访问。假设“实习生”组的成员之一“斯科特”需要处理需要访问“财务”数据库的任务。在这种情况下,您可以添加“拒绝拒绝”条件,该条件将允许用户“ scott”访问“财务”数据库。下图显示了如何在Apache Ranger中设置此策略:
4. 为策略启用拒绝条件
默认情况下,策略中的拒绝条件是禁用的,必须启用后才能使用。
- 在Ambari> Ranger> CONFIGS> ADVANCED> Custom ranger-admin-site中,添加:
ranger.servicedef.enableDenyAndExceptionsInPolicies=true
- 重新启动Ranger。
5. 访问条件的策略评估
将按特定顺序评估Apache Ranger策略,以确保可预测的结果(如果没有允许访问的访问策略,则通常会拒绝授权请求)。下图显示了策略评估工作流程:
6. 使用Ranger控制台、打开和关闭Ranger控制台
要打开Ranger控制台,请登录到Ranger门户网站http://your_ranger_server_address >:6080(例如,http://dw-weekfield.hortonworks.com:6080)。要登录,请输入您的用户名和密码,然后单击“登录”。
管理员控制台主页
管理员登录控制台
登录后,您的用户名将显示在游侠控制台的右上角
要退出游骑兵控制台,请单击您的用户名,然后选择退出。
7. Ranger控制台导航
当您登录到Ranger控制台时,将显示基于资源的策略的服务管理器页面。您可以使用此页面为Hadoop资源(HDFS、HBase、Hive等)创建服务,并向这些资源添加访问策略。
单击顶部菜单中的Access Manager将打开基于资源的策略页面的服务管理器,并显示一个子菜单,其中包含指向基于资源的策略、基于标记的策略和报告的链接(当您将鼠标移到Access Manager链接上时,也会显示该子菜单)
Access Manager > Resource Based Policies – 打开基于资源的策略页面的服务管理器。您可以使用此页面为资源(HDFS、HBase、Hive等)创建服务,并向这些服务添加访问策略。
Access Manager > Tag Based Policies – 打开基于标记的策略页面的服务管理器。可以使用此页面创建基于标记的服务,并向这些服务添加访问策略。使用基于标记的策略使您能够跨多个Hadoop组件控制对资源的访问,而无需在每个组件中创建单独的服务和策略。
Access Manager > Reports – 打开报告页面。您可以使用此页面为基于策略名称、资源、组和用户名的资源和基于标记的策略生成用户访问报告。
Audit – 您可以使用审计页面在资源级别监视用户活动,还可以根据用户、组或时间设置条件审计。审计页面包括访问、管理、登录会话、插件选项卡、插件状态、用户同步情况等。
Settings – 允许您管理和分配用户和组的策略权限。在设置上单击或传递鼠标会显示一个子菜单,其中有指向用户/组和权限页的链接。
0x05. HBase配置AES加密
原文链接:HBase配置AES加密_create17的博客-CSDN博客_hbase加解密
一、前言
为了避免第三方非法访问我们的重要数据,我们可以给HBase配置加密算法,目前HBase只支持使用aes加密算法,用于保护静态的HFile和WAL数据。
HBase配置的AES加密是一种端到端的加密模式,其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密。这个功能作用就是保证处于加密空间内的数据不被非法查询,只有经过认证的客户端才能查看解密内容。
详情可以参考HBase官方文档:
http://hbase.apache.org/book.html#hbase.encryption.server
二、AES算法简介
这里只是对AES算法的一个简单说明。
AES是一个对称加密算法,如下图所示:
下面简单介绍下各个部分的作用与意义:
密钥K
用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,实际中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到AES密钥,然后发送方和接收方用AES密钥来通信。
密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。
AES加密函数
设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。
AES解密函数
设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。
三、配置步骤
接下来主要介绍需要在hbase-site.xml文件内增加哪些配置。最后通过ambari页面将自定义配置加到hbase-site.xml中。分为以下几步:
- 使用keytool实用程序为AES加密创建适当长度的密钥。
cd /usr/hdp/3.0.1.0-187/hbase/conf/
# 生成hbase.jks
keytool -keystore hbase.jks -storetype jceks -storepass admin123 -genseckey -keyalg AES -keysize 128 -alias hbase
- hbase.jks:表示生成的jks文件存储路径。
- admin123:代表存储的密码。
- AES:表示加密的类型,目前仅支持AES。
- 128:表示密钥的长度,AES支持128位长度。
- hbase:为密钥文件的别名。
- 在密钥文件上设置适当的权限,并将其分发给所有HBase服务器。 上一个命令在/usr/hdp/3.0.1.0-187/hbase/conf/目录下创建了一个名为hbase.jks的文件。设置此文件的权限和所有权,以便只有HBase服务帐户用户可以读取该文件,并将密钥安全地分发给所有HBase服务器。
# 在每台机器上执行以下命令:
cd /usr/hdp/3.0.1.0-187/hbase/conf
chmod 600 hbase.jks
chown hbase:hadoop hbase.jks
# 通过scp命令将文件传输到各节点的指定位置
scp -r hbase.jks root@xxx:/usr/hdp/3.0.1.0-187/hbase/conf
# 拷贝完成后,也需要设置文件的相关权限,600。
- 配置HBase daemons
在集群的hbase-site.xml中设置以下属性,配置HBase守护程序以使用由KeyStore文件支持的密钥提供程序或检索集群主密钥。在下面的示例中,admin123为密码,可自定义。
# 自定义hbase-site:
hbase.crypto.keyprovider=org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider
hbase.crypto.keyprovider.parameters=jceks:///usr/hdp/3.0.1.0-187/hbase/conf/hbase.jks?password=admin123
默认情况下,HBase服务帐户名称将用于解析群集主密钥。但是,您可以使用任意别名(在keytool命令中)存储它。在这种情况下,请将以下属性设置为您使用的别名。
# 自定义hbase-site:
hbase.crypto.master.key.name=hbase
您还需要确保您的HFile使用HFile v3,以便使用透明加密。这是HBase 1.0以后的默认配置。对于以前的版本,请在hbase-site.xml文件中设置以下属性。
# 自定义hbase-site:
hfile.format.version=3
- 配置Configure WAL encryption
通过设置以下属性,在每个RegionServer的hbase-site.xml中配置WAL加密。您也可以将这些包含在HMaster的hbase-site.xml中,但是HMaster没有WAL并且不会使用它们。
# 自定义hbase-site:
hbase.regionserver.hlog.reader.impl=org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader
hbase.regionserver.hlog.writer.impl=org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter
hbase.regionserver.wal.encryption=true
- 配置hbase-site.xml文件的权限。
由于密钥库密码存储在hbase-site.xml中,因此需要确保只有HBase用户可以使用文件所有权和权限读取hbase-site.xml文件。
chmod -R 600 hbase-site.xml
- 将上述配置添加到自定义hbase-site中,重启HBase服务。
- 创建加密类型为AES的表。
**格式:**create ‘<table name>’, {NAME => ‘<column family name>’, ENCRYPTION => ‘AES’}
create 'hbase_1102', {NAME=>'cf1', ENCRYPTION => 'AES'}, {NAME=>'cf2'}
put'hbase_1102', '001','cf1:name','Tom'
put'hbase_1102', '001','cf1:gender','man'
put'hbase_1102', '001','cf2:chinese','90'
put'hbase_1102', '001','cf2:math','91'
put 'hbase_1102', '001','cf2:math','91', 1557566858555
# 删除hbase的一条数据
delete 'hbase_1102', '001', 'cf2:math'
# 根据时间戳来获取数据
get 'hbase_1102','001',{COLUMN=>'cf2:math',TIMESTAMP=>1555768605232}
四、总结
HBase目前只支持AES加密,它是一种端到端的加密模式,其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密。这个功能作用就是保证处于加密空间内的数据不被非法查询,只有经过认证的客户端才能查看解密内容。