没有合适的资源?快使用搜索试试~ 我知道了~
Hbase
资源推荐
资源详情
资源评论
一、概述:
Hbase 高并发的读写优化问题-M:
https://blog.csdn.net/u013939918/article/details/70833480
LSM 树-M
� 哈希存储引擎 是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺
序扫描,对应的存储系统为 key-value 存储系统。对于 key-value 的插入以及查询,哈
希表的复杂度都是 O(1),明显比树的操作 O(n)快,如果不需要有序的遍历数据,哈希表
就是 your Mr.Right
� B 树存储引擎是 B 树(关于 B 树的由来,数据结构以及应用场景可以看之前一篇博文)
的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶
子节点之间的指针),对应的存储系统就是关系数据库(Mysql 等)。
� B+树
根节点和枝节点很简单,分别记录每个叶子节点的最小值,并用有一个指针指向叶子节点。
叶子节点里每个键值都指向真正的数据块(如 oracle 里的 rowId),每个叶子节点都有前指
针和后指针,这是为了做范围查询时,叶子节点间可以直接跳转,从而避免再去回溯至枝
节点和根节点。
B+树最大的性能问题是会产生大量的随机 IO,随着新数据的插入,叶子节点会慢慢分裂,
逻辑上连续的叶子节点在物理上往往不连续,甚至分离的很远,但做范围查询时,会产生
大量读随机 IO.
� LSM 树(Log-Structured Merge Tree)存储引擎和 B 树存储引擎一样,同样支持增、
删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有
利有弊,LSM 树和 B+树相比,LSM 树牺牲了部分读性能,用来大幅提高写性能。
通过以上的分析,应该知道 LSM 树的由来了,LSM 树的设计思想非常朴素:将对数据的修改
增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍
微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可
能需要先看是否命中内存,否则需要访问较多的磁盘文件。极端的说,基于 LSM 树实现的
HBase 的写性能比 Mysql 高了一个数量级,读性能低了一个数量级。
LSM 树原理把一棵大树拆分成 N 棵小树,它首先写入内存中,随着小树越来越大,内存中的
小树会 flush 到磁盘中,磁盘中的树定期可以做 merge 操作,合并成一棵大树,以优化读性
能。
以上这些大概就是 HBase 存储的设计主要思想,这里分别对应说明下:
� 因为小树先写到内存中,为了防止内存数据丢失,写内存的同时需要暂时持久化到磁盘,
对应了 HBase 的 MemStore 和 HLog
� MemStore 上的树达到一定大小之后,需要 flush 到 HRegion 磁盘中(一般是 Hadoop
DataNode),这样 MemStore 就变成了 DataNode 上的磁盘文件 StoreFile,定期 H
RegionServer 对 DataNode 的数据做 merge 操作,彻底删除无效空间,多棵小树在这
个时机合并成大树,来增强读性能
LSM tree,理论上,可以是内存中树的一部分和磁盘中第一层树做 merge,对于磁盘中的树
直接做 update 操作有可能会破坏物理 block 的连续性,但是实际应用中,一般 lsm 有多层,
当磁盘中的小树合并成一个大树的时候,可以重新排好顺序,使得 block 连续,优化读性
能。
Hbase 在实现中,是把整个内存在一定阈值后,flush 到 disk 中,形成一个 file,这个 file 的
存储也就是一个小的 B+树,因为 hbase 一般是部署在 hdfs 上,hdfs 不支持对文件的
update 操作,所以 hbase 这么整体内存 flush,而不是和磁盘中的小树 merge update,这个
设计也能讲通了。内存 flush 到磁盘上的小树,定期也会合并成一个大树。整体上 hbase 就
是用 lsm tree 的思路。
Hbase 中 meta 表存储在哪?
WAL:(Write Ahead Log),很简单,因为数据是先写到内存中,如果断电,内存中的数据会
丢失,因此为了保护内存中的数据,需要在磁盘上先记录 logfile,当内存中的数据 flush 到
磁盘上时,就可以抛弃相应的 Logfile.
Memstor,storefile LSM 树就是一堆小树,在内存中的小树即 memstore 每次 flush,内存中
的 memstore 变成磁盘上一个新的 storefile.
1.HBASE 概述
hbase 基于 Google 的 BigTable 论文,是建立的==hdfs==之上,提供高可靠性、高性能、
列存储、基于 NoSQL、可伸缩、实时读写的分布式数据库系统。在需要==实时读写随机
==访问超大规模数据集时,可以使用 hbase。
1.1hbase 的特点:
海量存储
可以存储大批量的数据
列式存储
Hbase 表的数据是基于列族进行存储的,列族在的列的方向上的划分。
极易扩展
底层依赖 HDFS,当磁盘空间不足的时候,只需要动态增加 datanode 节点服务(机器)
就可以了
可以通过增加服务器来提高集群的存储能力
高并发
支持高并发的读写请求
稀疏
稀疏主要是针对 Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据
为空的情况下,是不会占用存储空间的。
数据的多版本
Hbase 表中的数据可以有多个版本值,默认情况下是根据版本号去区分,版本号就是
插入数据的时间戳。
数据类型单一
所有的数据在 hbase 中以字节数组进行存储。
Hbase 的整体架构
a. client(客户端)
Client 包含了访问 Hbase 的接口,还维护了对应的 cache 来加速 hbase 的访问,比如
cache 的.META 元数据的信息。
b. zookeeper 集群
作用:1).实现了 Hmaster 的高可用 2).保存 hbase 的元数据信息,是所有 hbase 表的寻
址入口。3)监控 hbase 集群节点的上下线。Regionserver 启动的时候向 zk 注册一个目
录,一旦监控不到就删除目录。
c. Hmaster(hbase 集群老大) 角色
作用:1).维护集群的元数据信息 2).维护整个集群的负载均衡 3).为 HregionServer 分配
region 4).发现失效的 Region,并将其分配到正常的 HregionServer 上
d. HregionServer 角色-定期向 zookeeper 进行通信-发心跳,进行报活。
作用:1).负责管理 Region 2).接受客户端的读写数据请求 3).管理 region 的切分和合并
Region
Hbase 集群分布式存储的最小单元
Hbase 表的数据模型
hbase 包含组件
a. 行键 - RowKey - 即 hbase 表的主键,table 中的记录按照 rowkey 的字典序进行排
序。访问 hbse 中的数据有三种方式:1).通过单一行键访问. 2).通过一组行键访问 3).
全表扫描
b.列族 - Column Family
hbase 表中的每个列,都归属与某个列族。列族是表的 schema 的一部分(而列不
是),必须代使用表之前定义。在建表时声明,不能后期增加,如果需要增加只能 alter
表.一个列族可以包含一个或多个列
c.列 - Column
属于列族,是列族下面的具体列,可以动态增加列,不需要提前声明
d.单元格-cell
通过 row 和 columns 确定的一个存储单元为一个 cell。每个 cell 都保存着一个数
据的多个版本,版本通过时间戳来区别—{ row key,column( =+ ),version}
数据都以二进制形式存储,没有数据类型的区别
e.时间戳-TimeStamp
每次数据操作对应的时间戳,可以看作是数据的 version number 版本号
Hbase 的安装、配置、启动、停止
安装配置
1、下载安装包
http://archive.apache.org/dist/hbase/1.2.1/hbase-1.2.1-bin.tar.gz
hbase-1.2.1-bin.tar.gz
2、规划安装目录
/opt/bigdata
3、上传安装包到服务器
4、解压安装包到指定的规划目录
tar -zxvf hbase-1.2.1-bin.tar.gz -C /opt/bigdata
5、重命名解压目录
mv hbase-1.2.1 hbase
6、修改配置文件
1)、需要把 hadoop 中的配置 core-site.xml 、hdfs-site.xml 拷贝到 hbase 安装目录下的
conf 文件夹中
2)、修改 conf 目录下配置文件
a.修改 hbase-env.sh
export JAVA_HOME=/opt/bigdata/jdk ----添加 java 环境变量
export HBASE
MANAGES
ZK=FALSE --指定使用外部的 zk 集群
b.修改 hbase-site.xml
<configuration>
<!-- 指定 hbase 在 HDFS 上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
</property>
<!-- 指定 hbase 是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定 zk 的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>
c.修改 regionservers
node2 node3 --指定 regionserver 节点
d.修改 backup-masters
node2
7、配置 hbase 的环境变量
export HBASE_HOME=/opt/bigdata/hbase export PATH=$PATH:$HBASE_HOME/bin
8、分发 hbase 目录和环境变量到其他节点
scp -r hbase node2:/opt/bigdata
scp -r hbase node3:/opt/bigdata
scp /etc/profile node2:/etc scp /etc/profile nod3:/etc
9、让所有节点的 hbase 环境变量生效
在所有节点执行
source /etc/profile
启动
� 前提条件:先启动 hadoop 和 zk 集群
� 启动 hbase
o start-hbase.sh
启动脚本
剩余50页未读,继续阅读
资源评论
大数据侠客
- 粉丝: 708
- 资源: 76
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 解析机器人_安卓.apk
- 基于matlab实现的关于雷达恒虚警检测一些问题的程序仿真.rar
- 基于matlab实现的函数-对滑动轴承由油膜剪切力产生的摩擦力用matlab进行求解.rar
- 基于matlab实现的滑动轴承的雷诺方程求解与偏心率和承载能力的关系.rar
- 整理2010-2020年各省农村居民消费价格指数
- 基于matlab实现的基于粒子群算法的交通路径研究matlab源程序时间窗车辆路径规划PSO-VRPTW.rar
- 基于matlab实现的雷达的恒虚警检测技术,二维cfar,采用十字形取数法.rar
- 基于matlab实现的雷达的恒虚警检测程序,这里你可以进行雷达信号的恒虚警检测.rar
- 基于matlab实现的雷达CFAR恒虚警检测二维信号仿真
- 基于matlab实现的计算无量纲非线性油膜力,无量纲形势的函数,易于调用,滚动轴承支撑的碰磨转子.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功