赞
踩
简介: HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。可在廉价PC Server上搭建起大规模结构化存储集群。
HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。 HBase与传统数据库(RDBMS)的最大区别面向列。操作数据库,如果是索引访问用HBase+Hadoop
当前市场上有很多类似的序列化系统,如Avro、Google 的 Protocol Buffers、Facebook 的 Thrift。
Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。
HBase是Hadoop生态系统的一个组成部分。如图:
HBase与HDFS对比:
两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点; HDFS适合批处理场景但不支持数据随机查找,不适合增量数据处理,不支持数据更新。
HBase表的特点:
为什么要使用hbase?
HBase数据模型
表:Tables 由 rows 和 columns 组成。数据存放在带标签的表中。HBase中的每一张表,就是所谓的BigTable。稀疏表。
单元格:Table cells单元格有版本(Timestamp是HBase插入单元格时候的时间戳)。
时间戳( Timestamp ):时间戳,每次数据操作对应的时间戳,可以看作是数据的version number。是一个 64 位整数
列:列组成“列族”
列族:所有的列族成员有相同的前缀。物理上,所有的列族成员都一起存放在文件系统中。HBase实际上就是一个面向列族的存储器。Table在水平方向有一个或者多个列簇组成,一个列簇中可以有任意多个列组成
RowKey:二进制值byte[],按字典顺序排序。行键,Table的主键,Table中的记录按照Row Key排序
ColumnKey:二进制值byte[],按字典顺序排序。是表中每条记录的“主键”,方便快速查找
value:一个未解释的字节数组byte[]。
注意:表中的不同行可以拥有不同数量的成员。即支持“动态模式”模型
HBase数据模型中 行 的特点:
HBase数据模型中 列 的特点
HBase架构体系
Client:包含访问HBase的接口,client维护着一些cache 来加快对HBase的访问,比如region的位置信息
Master:可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
Region Server:
注意:
HBase中有两张特殊的Table:-ROOT-
和.META.
.META.:记录了用户表的Region信息,.META.可以有多个regoin
-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
Zookeeper中记录了-ROOT-表的location
Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数
据的位置去访问
启动HBase:
start-hbase.sh
启动HBase shell:
hbase shell
退出HBase shell:
quit
帮助命令:
help
查看集群状态
status
创建表:create '表名称', '列族名称1','列族名称2','列族名 称N'
create 'users','user_id','address','info'
添加记录:put '表名称', '行名称', '列名称:', '值'
put 'users','xiaoming','info:age','24';
查看记录:get '表名称', '行名称'
get 'users','xiaoming' #取得一个id的所有数据
get 'users','xiaoming','info' #获取一个id,一个列族的所有数据
get 'users','xiaoming','info:age' #获取一个id,一个列族中一个列的所有数据
查看表中的记录总数:count '表名称'
count 'users'
删除记录:delete '表名' ,'行名称' , '列名称'
delete 'users','xiaoming','info:age'
删除整行:deleteall '表名' , '行名称'
deleteall 'users','xiaoming'
删除一张表:先要屏蔽该表,才能对该表进行删除。1、disable '表名称'
。2、drop '表名称'
disable 'users'
drop 'users'
注意:修改表结构或者删除表,需要先disable
查看所有记录:scan "表名称"
scan 'test' #查看test表中的所有数据
查看某个表某个列中所有数据:scan "表名称" ,'列族名称:列名称'
scan 'test','info:age'
清空表:truncate '表名'
truncate 'users'
获取单元格数据的版本数据:
get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}
列出全部表:
list
得到表的描述:describe '表名'
describe 'users'
查看表的状态 :exists '表名'
exists 'users'
is_enabled 'users'
is_disabled 'users
使表有效或无:enable/disable '表名'
enable 'users'
disable 'users'
HBase的组件:
管理用户对Table的增、删、改、查操作
管理RegionServer的负载均衡、调整Region的分布
在Region Split后,将新Region分布到不同的RegionServer。
在RegionServer宕机后,该RegionServer上所管理的Region 由HMaster进行重新分配。
HBase的组件单元:
表空间:在关系数据库系统中,命名空间 namespace 指的是一个表的逻辑分组,同一组中的表有类似的用途。有两个默认表空间:
表:HBase以表的形式存储数据,表在 hdfs 上以文件夹形式存(HBase表组成模型在上面)
HBase vs Oracle
HBase写入数据流程:
Client通过Zookeeper调度获取表的元数据信息;
Cilent通过rpc协议与RegionServer交互,通过-ROOT-表与.META.表找到对应的对应的Region;
将数据写入HLog日志中,如出现意外可以同通过HLog恢复信息;
将数据写入Region的MemStore中,当MemStore达到阈值开始溢写,将其中的数据Flush成一个StoreFile;
MemStore不断生成新的StoreFile,当StoreFile的数量到达阈值后会出发Compact合并操作,将多个StoreFile合并成一个StoreFile;
StoreFile文件会不断增大,当达到阈值后会出发Split操作,把当前的Region且分为两个新的Region。父Region会下线,两个子Region会被HMaster分配到相应的RegionServer。
HBase查询数据流程:
Client访问Zookeeper,从ZK获取-ROOT-表的位置信息,通过访问-ROOT-表获取.META.表的位置,然后确定数据所在的HRegion位置;
Client访问HRegion所在的HRegionServer,通过HRegionServer获取需要查找的数据;
Client到HRegion的中去查找数据,首先到MemStore中查找,查到直接返回;查不到就去ClockCache中查找,查到直接返回;再查不到就去StoreFile中读数据,把读到的数据存入BlockCache中再返回Client。
内存优化:
HBase 操作过程中需要大量的内存开销,毕竟 Table 是可以缓存在内存中的,一般会分配整个可用内存的 70%给 HBase 的 Java 堆。但是不建议分配非常大的堆内存,因为 GC 过 程持续太久会导致 RegionServer 处于长期不可用状态,一般 16~48G 内存就可以了,如果因 为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。
rowkey优化的主要方式:
一条数据的唯一标识就是 RowKey,那么这条数据存储于哪个分区,取决于 RowKey 处 于哪个一个预分区的区间内,设计 RowKey 的主要目的 ,就是让数据均匀的分布于所有的 region 中,在一定程度上防止数据倾斜。
基础优化:
1、允许在 HDFS 的文件中追加内容
文件:hdfs-site.xml、hbase-site.xml
属性:dfs.support.append
解释:开启 HDFS 追加同步,可以优秀的配合 HBase 的数据同步和持久化。默认值为 true。
2、优化 DataNode 允许的最大文件打开数
文件:hdfs-site.xml
属性:dfs.datanode.max.transfer.threads
解释:HBase 一般都会同一时间操作大量的文件,根据集群的数量和规模以及数据动作, 设置为 4096 或者更高。默认值:4096
3、优化延迟高的数据操作的等待时间
文件:hdfs-site.xml
属性:dfs.image.transfer.timeout
解释:如果对于某一次数据操作来讲,延迟非常高,socket 需要等待更长的时间,建议把 该值设置为更大的值(默认 60000 毫秒),以确保 socket 不会被 timeout 掉。
4、优化数据的写入效率
文件:mapred-site.xml
属性:mapreduce.map.output.compress 、mapreduce.map.output.compress.codec
解释:开启这两个数据可以大大提高文件的写入效率,减少写入时间。第一个属性值修改为
true,第二个属性值修改为:org.apache.hadoop.io.compress.GzipCodec 或者其 他压缩方式。
5、设置 RPC 监听数量
文件:hbase-site.xml
属性:Hbase.regionserver.handler.count
解释:默认值为 30,用于指定 RPC 监听的数量,可以根据客户端的请求数进行调整,读写 请求较多时,增加此值。
6、优化 HStore 文件大小
文件:hbase-site.xml
属性:hbase.hregion.max.filesize
解释:默认值 10737418240(10GB),如果需要运行 HBase 的 MR 任务,可以减小此值, 因为一个 region 对应一个 map 任务,如果单个 region 过大,会导致 map 任务执行时间 过长。该值的意思就是,如果 HFile 的大小达到这个数值,则这个 region 会被切分为两个Hfile。
7、优化 HBase 客户端缓存
文件:hbase-site.xml
属性:hbase.client.write.buffer
解释:用于指定 Hbase 客户端缓存,增大该值可以减少 RPC 调用次数,但是会消耗更多内 存,反之则反之。一般我们需要设定一定的缓存大小,以达到减少 RPC 次数的目的。
8、指定 scan.next 扫描 HBase 所获取的行数
文件:hbase-site.xml
属性:hbase.client.scanner.caching
解释:用于指定 scan.next 方法获取的默认行数,值越大,消耗内存越大。
9、flush、compact、split 机制
当 MemStore 达到阈值,将 Memstore 中的数据 Flush 进 Storefile;compact 机制则是把 flush 出来的小文件合并成大的 Storefile 文件。split 则是当 Region 达到阈值,会把过大的 Region 一分为二。
#adduser hadoop //useradd #开头表示root操作
#cat /etc/passwd
#ls /home/
#su hadoop
chmod -R 777 /opt
tar zxvf /tmp/jdk-8u241-linux-x64.tar.gz
(tar zxvf filename可以解压缩.tar.gz
文件)#!/bin/bash
export JAVA_HOME=/opt/jdk
export PATH=.:$JAVA_HOME/bin:$PATH
systemctl status firewalld
systemctl stop firewalld
sestatus -v
或者 getenforce
setenforce 0
。0设置 SELinux 成为 permissive 模式,1设置为 enforcing 模式vim /etc/selinux/config, 将SELINUX=enforcing改为SELINUX=disabled
systemctl status sshd
ssh-keygen -t rsa
,生成文件在:~/ .ssh/
ssh localhost
。ssh远程登录服务使用的端口号是22start-dfs.sh
start-yarn.sh
。登录网络界面检查:http://192.168.100.11:50070start-hbase.sh
hbase shell
。检查hbase:http://192.168.100.11:16010python3
显示 Python 3.6.8 (default, Aug 7 2019, 17:28:10)
pip3 install thrift
yum install python3-devel
。Centos 7中安装软件包提示"python.h: 没有那个文件或目录", 可以安装python3-devel解决此问题pip3 install happybase
pip3 list
hbase-daemon.sh start thrift
ps aux|grep thrift
或 jps
下载安装Eclipse,Eclipse IDE for Java Developers
https://www.eclipse.org/downloads/packages/
下载安装jdk(Windows)
https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
下载安装Maven
https://maven.apache.org/download.cgi
设置jdk、maven环境变量:JAVA_HOME、CLASSPATH、PATH、MAVEN_HOME
验证jdk、maven安装:java -version、javac -version、mvn -version
修改maven配置:apache-maven-3.6.3\conf\settings.xml
<localRepository>本地路径</localRepository> <!-- 配置maven路径 -->
mvn help:system
成功提示:BUILD SUCESS
补充:
HBase高可用配置,涉及的配置文件名称backup-masters
H、PATH、MAVEN_HOME5. 验证jdk、maven安装:java -version、javac -version、mvn -version 6. **修改maven配置:**
apache-maven-3.6.3\conf\settings.xml`
<localRepository>本地路径</localRepository> <!-- 配置maven路径 -->
mvn help:system
成功提示:BUILD SUCESS
补充:
HBase高可用配置,涉及的配置文件名称backup-masters
HBase分布式安装时需要将配置文件中的HBase.cluster.distributed值修改为true
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。