第四周 大数据学习-深圳市模具厂
第四周
Hbase 。
Hbase -> Google bigtable 开源实现 ---2008年----> apache hadoop 下面的项目
采用的公司 : Facebook Intel yahoo baidu alibaba tencent 360 等等 nosql 数据库
SQL (Structured Query Language) 数据库,指关系型数据库。
主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。
NoSQL(Not Only SQL)泛指非关系型数据库。
主要代表:MongoDB,Redis,CouchDB。 supersech hbase , kylin , chiohouse phesto
关系型数据库的特点: 面向行的, Nosql 是面向列的。
高并发状态下: 分库分表 读写分离 带来数据一致性问题 ,海量数据实现出来很复杂,后期迁移也很复杂。
高可用,可靠性,可伸缩性的措施: 主备 、 主从 、 多主。 本身的可扩展性很差。 增加节点或者宕机要做迁移。
Hbase 首先是一个大表。
1.关系型数据库理论 - ACID
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,
所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、
隔离性(isolation,又称独立性)、持久性(durability)。
A – Atomicity – 原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。
C – Consistency – 一致性
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,
这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
I – Isolation – 隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时
由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、
读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
D – Durability – 持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
关系型数据库严格遵循ACID理论。
但当数据库要开始满足横向扩展、高可用、模式自由等需求时,需要对ACID理论进行取舍,不能严格遵循ACID。
以CAP理论和BASE理论为基础的NoSQL数据库开始出现。
2.分布式系统理论
2.1 分布式系统介绍
分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式是NoSQL数据库的必要条件。
分布式系统由独立的服务器通过网络松散耦合组成的。每个服务器都是一台独立的PC机,服务器之间通过内部网络连接,内部网络速度一般比较快。因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。此外,因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。比如,对分布式应用来说,采用不同编程语言开发带来的单个应用服务的性能差异,跟网络开销比起来都可以忽略不计。
因此,分布式系统每个节点一般不采用高性能的服务器,而是使用性能相对一般的普通PC服务器。提升分布式系统的整体性能是通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)实现。
分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。企业级应用需求经常随时间而不断变化,这也对企业级应用平台提出了很高的要求。企业级应用平台必须要能适应需求的变化,即具有可扩展性。比如移动互联网2C应用,随着互联网企业的业务规模不断增大,业务变得越来越复杂,并发用户请求越来越多,要处理的数据也越来越多,这个时候企业级应用平台必须能够适应这些变化,支持高并发访问和海量数据处理。分布式系统有良好的可扩展性,可以通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业的业务增长带来的计算需求增加。
2.2 分布式存储的问题 – CAP理论
如果我们期待实现一套严格满足ACID的分布式事务,很可能出现的情况就是系统的可用性和严格一致性发生冲突。在可用性和一致性之间永远无法存在一个两全其美的方案。由于NoSQL的基本需求就是支持分布式存储,严格一致性与可用性需要互相取舍,由此延伸出了CAP理论来定义分布式存储遇到的问题。
CAP理论告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P:Partitiontolerance)这三个基本需求,并且最多只能满足其中的两项。
对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统。因此架构师需要在C和A之间寻求平衡。
HBase 的物理存储
HBase 表中的所有行都是按照行键的字典序排列的。
因为一张表中包含的行的数量非常多,有时候会高达几亿行,所以需要分布存储到多台服务器上。
因此,当一张表的行太多的时候,HBase 就会根据行键的值对表中的行进行分区,每个行区间构成一个“分区(Region)”,
包含了位于某个值域区间内的所有数据,如图 1 所示。
图 1 HBase的Region存储模式图
Region 是按大小分割的,每个表一开始只有二个 Region,随着数据不断插入到表中,Region 不断增大,
当增大到一个阈值的时候,Region 就会等分为两个新的 Region。
当表中的行不断增多时,就会有越来越多的 Region,如图 2 所示。
图 2 HBase的Region分裂示意
Region 是 HBase 中数据分发和负载均衡的最小单元,默认大小是 100MB 到 200MB。
不同的 Region 可以分布在不同的 Region Server 上,但一个 Region 不会拆分到多个 Region Server 上。
每个 Region Server 负责管理一个 Region 集合。
如图 3 所示。
图 3 HBase的Region分布模式
Region 是 HBase 在 Region Server 上数据分发的最小单元,但并不是存储的最小单元。
事实上,每个 Region 由一个或者多个 Store 组成,每个 Store 保存一个列族的数据。
每个 Store 又由一个 memStore 和 0 至多个 Store File 组成,如图 4 所示。
Store File 以 HFile 格式保存在 HDFS 上。
图 4 HBase的Region存储模式
HBase 的逻辑架构
在分布式的生产环境中,HBase 需要运行在 HDFS 之上,以 HDFS 作为其基础的存储设施。
HBase 的上层是访问数据的 Java API 层,供应用访问存储在 HBase 中的数据。
HBase 的集群主要由 Master、Region Server 和 Zookeeper 组成,
具体模块如图 5 所示。
图 5 HBase的系统架构
1)Master
Master 主要负责表和 Region 的管理工作。
表的管理工作主要是负责完成增加表、删除表、修改表和查询表等操作。
Region 的管理工作更复杂一些,Master 需要负责分配 Region 给 Region Server,协调多个 Region Server,检测各个 Region Server 的状态,并平衡 Region Server 之间的负载。
当 Region 分裂或合并之后,Master 负责重新调整 Region 的布局。如果某个 Region Server 发生故障,Master 需要负责把故障 Region Server 上的 Region 迁移到其他 Region Server 上。
HBase 允许多个 Master 结点共存,但是这需要 Zookeeper 进行协调。当多个 Master 结点共存时,只有一个 Master 是提供服务的,其他的 Master 结点处于待命的状态。
当正在工作的 Master 结点宕机时,其他的 Master 则会接管 HBase 的集群。
2)RegionServer
HBase 有许多个 Region Server,每个 Region Server 又包含多个 Region。Region Server 是 HBase 最核心的模块,负责维护 Master 分配给它的 Region 集合,并处理对这些 Region 的读写操作。
Client 直接与 Region Server 连接,并经过通信获取 HBase 中的数据。
HBase 釆用 HDFS 作为底层存储文件系统,Region Server 需要向 HDFS 写入数据,并利用 HDFS 提供可靠稳定的数据存储。
Region Server 并不需要提供数据复制和维护数据副本的功能。
3)Zookeeper
Zookeeper 的作用对 HBase 很重要。
首先,Zookeeper 是 HBase Master 的高可用性(High Available,HA)解决方案。
也就是说,Zookeeper 保证了至少有一个 HBase Master 处于运行状态。
Zookeeper 同时负责 Region 和 Region Server 的注册。
HBase 集群的 Master 是整个集群的管理者,它必须知道每个 Region Server 的状态。
HBase 就是使用 Zookeeper 来管理 Region Server 状态的。
每个 Region Server 都向 Zookeeper 注册,由 Zookeeper 实时监控每个 Region Server 的状态,并通知给 Master。
这样,Master 就可以通过 Zookeeper 随时感知各个 Region Server 的工作状态。
需要搭建 ZooKepper 集群 , 采取奇数作为基础, 要不断选取出唯一的领导者 。
然后在搭建 Hbase 集群。
Hlog = Mysql 中的 bingLog
Hbase 逻辑架构
安装 Hbase
1、下载软件从 hbase.apache.com
2、上传到 \bigdata\tools
3、tar -zxvf hbase-1.2.3tar.gz
4、cd /bigdata/tools/hbase1.2.3/config
5、vi hbase-env.sh
export ...
6、vi hbase-site.xml
我们上课说的: start-hbase.sh
查看: jsp 或者 http://192.168.1.119:16030
安装一个插件 Phoenix , 就可以用 mysql 数据库的命令看了 , 等于是一个 shell .
API可以在 Java后端做软件查看 。
第四周, 卢老师笔记--------------------------------------------------------------------------------------------------
HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
利用PC搭建大规模的结构化存储集群。
HBase -> Google Bigtable开源实现。GFS <- HDFS 2006 powerset jim
2008 Apache Hadoop
Intel
Yahoo
baidu
alibaba
tencent
360
回顾一下传统关系型数据库
1、有事务的保障 ACID 原子性、一治性、隔离性、持久性
2、丰富的数据类型和sql操作
3、严格的数据类型,及行式存储
关系型数据库在高并发、大数据应对方式:
高并发:
措施:分库分表 、读写分离
带来数据一致性问题
海量数据:
措施:分库分表
实现复杂,后期迁移复杂
路由自定义
高可用、可靠、可伸缩、
措施:主备、主从、多主
本身扩展性差,增加节点宕机需要做数据迁移
HBase特点:
大表:一个表有上亿行,上百万列
面向列:面向列族的存储,列族独立检索
稀疏:对于空(null)的列,不占用空间
。。。
分布式数据库hbase特点:
基于列式高效存储
强一致数据访问
高可靠
高性能
可伸缩,自由切分、迁移
Schema free
RowKey
:与nosql数据库一样,row key是用来检索记录的主键。
而且可以访问hbase table中行,只有三方法:
1、通过单个row key进行访问
2、通过row key的range进行访问
3、全表扫描
row key行键,64kb,实际应用长度一般10~100ytes,在hbase内部,row key保存为字节数组。存储时,数据按row key的字典顺序排序存储。
Columns family
列族:
hbase表中的每个列,都归属于某个列族。
列族是表的schema的一部分,而列不是,必须在使用表之前进行定义。
列名都以列族作为前缀。
courses:history, courses:math都属于courses这个列族。
Time Stamp
时间戳:
hbase中通过row和columns确定的为一个存储单元:cell
每个cell都保存着同一份数据的多个版本。版本通过时间戳来做索引。时间戳的类型是64位整型。
时间戳也可以由hbase系统进行赋值,可以精确到毫秒,当然也可以由客户显示赋值。
每个cell中,不同版本的数据按时间倒序排序,最新的数据排在最前面。为了避免数据存在过多版本造成的管理负担,hbase提供两种回收方式,一是保存数据最后的n个版本,二保存最近一段时间内版本(比如最近7天),用户可以针对每个列族进行设置。
Cell
由row key + column ,version唯一确定单元,cell中的数据是没有类型的,全是字节码形式存储。
Cell的内容是不可分割的字节数组。
无类型、字节码。
物理存储
在hbase table中所有的行都按row key的字典序排列。
table在行的方向上分割为多个hregion
Region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一定阀值时候,Hregion就会分成两个新hregion
HRegion是Hbase中分布式存储和负载均衡的最小单元,最小单元就表示不同的Hregion可以分布在不同的hregion server上,但一个hregion是不会折分到多个server
Store:
Hregion虽然是分布式存储的最小单元,但并不是存储的最小元,在下层还有store,而store是以hfile的格式保存在hdfs上。
HFile:
1、Data Block
保存表中的数据,这部分可以被压缩。
2、Meta Block
保存用户自定义的kv对,可以被压缩
3、Data Block Index
Data Block索引,每条索引的key是被索引的block的第一条记录的key
4、Meta Block Index
Meta Block索引.
5、Trailer
是定长的,保存每一段的偏移量。在读取一个hfile时,会首先读取Trailer,Trailer保存了每个段的起始位置,然后,DataBlockIndex会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需要从内存中找到key所在的blok,通过一次磁盘io,可以将整个block读取到内存中,再找到需要的key。DataBlockInde采用LRu机制淘汰。
HFile的DataBlock,MetaBlock通常采用压缩方式进行存储,压缩后可以减少磁盘io,相应的cpu的开支也会减少。
6、File Info
是HFile的元信息,不被压缩,用记可以在这一段添加自己的元信息。
目前HFile的压缩支持两种方式:GZip、Lzo
Hlog:
Hlog类似于mysql 中的binlog,用来做灾难恢复,hlog记录了所有数据的变更,一但数据修改,都可以在log里面进行恢复。
注意:每个Region Server维护一个Hlog,而不是每个Region一个
这样不同的Region的日志会混合在一起,这样做的目的,是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数。所以可以提高对table的写的性能。
Hlog 文件就是一个hadoop squence file ,squence file的key是hlogkey的对象,hlogkey记录了写入数据的归属信息。除了table和region名字之外,同时还包括sequence number和time stamp,time stamp是写入时间,sequence number和的起始值为0,或者是最近一次存储文件 系统的sequence number。
Client:
访问hbase接口,维护着region位置的缓存信息。
Zookeeper:
保证任何时候,集群中只有一个master
存储所有Region的寻址入口。
实时监控Region Server的状态,将上下线信息通知master
存储hbase的schema,包括有哪些table,每个table有哪些column family
Master
为Region Server分配region
负载region server的负载均衡
发现失效的region server并重新分析其上的region
GFS上的垃圾文件回收
处理schema更新请求。
Region Server
维护master分配给它的region,处理io请求
负责切分过大的region,可以看到client访问hbase上数据的过程并不需要master参与。
HBase安装部署与配置:
单机、集群
1、上传hbase安装包
2、解压hbase文件 tar -zxvf hbase-1.2.3.tar.gz
3、cd /bigdata/tools/hbase1.2.3/conf
4、修改hbase-env.sh
export JAVA_HOME=/bigdata/tools/jdk1.7
export HBASE_CLASSPATH=/bigdata/tools/hbase1.2.3/conf
export HBASE_MANAGERS_ZK=true
5、修改hbase-site.xml
6、配置region servers文件及hbase环境变量
regionservers文件增加集群节点ip
192.168.1.119
192.168.1.120
192.168.1.121
配置hbase环境变量
export HBASE_HOME=/bigdata/tools/hbase1.2.3/
export PATH=$PATH:/bigdata/tools/hbase1.2.3/bin
source /etc/profile
7、启动hbase
start-hbase.sh
8、查看hbase进程
jsp
DataNode
SecondaryNamenode
NameNode
ResourceManger
NodeManager
HRegionServer
Hmaster
JobTracker
TaskTracker
QuorumpeerMain
9、通过http页面进行查看
http://192.168.1.119:16030
hbase shell基本用法:
1、建立一个表scores,有两个列族,grad和courese
create 'scores','grade','courese'
2、查看hbase中的所有的表:
list
3、查看表结构:
describe 'scores'
4、按设计的表结构插入值:
put 'scores','tom','grade','5'
put 'scores','tom','courese:math','97'
put 'scores','Jim','courese:art','87'
put 'scores','Jim','grade','4'
5、根据键值查询数据
get 'scores','Jim'
get 'scores','Jim','grade'
6、查看表中所有数据
scan 'scores'
7、删除指定数据
delete 'scores','Jim','grage'
8、修改表结构
disable 'scores'
alter 'scores', NAME=>'info'
enable 'scores'
9、统计行数
count 't1'
10、删除表
disable 'scores'
drop 'scores'
API
1、初始化配置
publice class HBaseTest{
private static Configuration conf = null;
Cinfuguration HBASE_CONF = new Configuration()
HBASE_CONF.set('hbase.master','192.168.1.119:60000')
HBASE_CONF.set('hbase.zookeeper.quorum','hsslave1,hsslave2,hsslave3')
.set('hbase.zookeeper.property.clientport','2181')
conf = HBaseconfiguration.create(HBASE_CONF)
}
2、创建一张表
public static void createTable(String tableName,String[] familys)throws Exception{
HBaseAdmin admin = new HBaseAdmin(conf)
HTableDescripor tableDes = new HTbaleDescriptor(tableName)
tableDes.addFamily(new HColumnDescriptor(familys[i]))
admin.createTable(tableDes)
}
3、插入一条数据
4、删除一行数据
5、查询一条记录
6、查询所有数据
3、删除一张表
-------------------------------------------------------------------------------------------