HBase(一)——HBase介绍
HBase介绍
1、关系型数据库与非关系型数据库
(1)关系型数据库

 关系型数据库最典型的数据机构是表,由二维表及其之间的联系所组成的一个数据组织
 优点:
 1、易于维护:都是使用表结构,格式一致
 2、使用方便:SQL语言通用,可用于复杂查询
 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
 缺点:
 1、读写性能比较差,尤其是海量数据的高效率读写
 2、固定的表结构,灵活度稍欠
 3、高并发读写需求,传统关系型数据库,硬盘IO是一个很大的瓶颈
(2)非关系型数据库

 非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或键值对
 优点:
 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片 形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘
 3、高扩展性
 4、成本低:nosql数据库部署简单,基本都是开源软件
 缺点:
 1、不提供sql支持,学习和使用成本较高;
 2、无事务处理
 3、数据结构相对复杂,复杂查询方面稍欠
2、HBase简介
	Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
 HBase的全称是Hadoop Database,是一个高可靠性,高性能、面向列、可伸缩、实时读写的分布式数据库。
 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务。
 主要用来存储非结构化和半结构化数据的松散数据(列存NoSQL数据库)。
 注意:NoSQL的全称是Not Only SQL,泛指非关系型数据库。
3、HBase数据模型

(1)rowkey
 (1)决定一行数据,每行记录的唯一标识
 (2)按照字典序排序
 (3)RowKey只能存储64K的字节数据
(2)Column Family & Qualifier
 (1)HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
 (2)列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入;
 (3)权限控制、存储以及调优都是在列族层面进行的;
 (4)HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
(3)TimeStamp时间戳
 (1)在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
 (2)时间戳的类型是 64位整型。
 (3)时间戳可以由HBase(在数据写入时自动)赋值,此时间戳是精确到毫秒的当前系统时间。
 (4)时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
(4)Cell
 (1)由行和列的坐标交叉决定;
 (2)单元格是有版本的;
 (3)单元格的内容是未解析的字节数组;
					1、由{row key, column( = +), version} 唯一确定的单元。
					2、cell中的数据是没有类型的,全部是字节数组形式存贮。
4、HBase架构

角色介绍:
(1)Client
 1、包含访问HBase的接口并维护cache来加快对HBase的访问。
(2)Zookeeper
 1、保证任何时候,集群中只有一个活跃master
 2、存储所有region的寻址入口
 3、实时监控region server的上线和下线信息,并实时通知master
 4、存储HBase的schema和table元数据
(3)Master
 1、为region server分配region
 2、负责region server的负载均衡
 3、发现失效的region server并重新分配其上的region
 4、管理用户对table的增删改操作
(4)RegionServer
 1、region server维护region,处理对这些region的IO请求
 2、region server负责切分在运行过程中变得过大的region
regionserver组件介绍
(1)region
 1、HBase自动把表水平划分成多个区域(region),每个region会保存一个表里某段连续的数据
 2、每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阈值的时候,region就会等分会两个新的region(裂变)
 3、当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver 上。
(2)Memstore与storefile
 1、一个region由多个store组成,一个store对应一个CF(列族)
 2、store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
 3、当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major ),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
 4、当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
 5、客户端检索数据,先在memstore找,找不到去blockcache,找不到再找storefile
注意问题:
 1、HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
 2、HRegion由一个或者多个Store组成,每个store保存一个columns family。
 3、每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。
			
5、HBase读写流程
(1)读流程
 1、客户端从zookeeper中获取meta表所在的regionserver节点信息
 2、客户端访问meta表所在的regionserver节点,获取到region所在的regionserver信息
 3、客户端访问具体的region所在的regionserver,找到对应的region及store
 4、首先从memstore中读取数据,如果读取到了那么直接将数据返回,如果没有,则去blockcache读取数据
 5、如果blockcache中读取到数据,则直接返回数据给客户端,如果读取不到,则遍历storefile文件,查找数据
 6、如果从storefile中读取不到数据,则返回客户端为空,如果读取到数据,那么需要将数据先缓存到blockcache中(方便下一次读取),然后再将数据返回给客户端。
 7、blockcache是内存空间,如果缓存的数据比较多,满了之后会采用LRU策略,将比较老的数据进行删除。
(2)写流程
 1、客户端从zookeeper中获取meta表所在的regionserver节点信息
 2、客户端访问meta表所在的regionserver节点,获取到region所在的regionserver信息
 3、客户端访问具体的region所在的regionserver,找到对应的region及store
 4、开始写数据,写数据的时候会先想hlog中写一份数据(方便memstore中数据丢失后能够根据hlog恢复数据,向hlog中写数据的时候也是优先写入内存,后台会有一个线程定期异步刷写数据到hdfs,如果hlog的数据也写入失败,那么数据就会发生丢失)
 5、hlog写数据完成之后,会先将数据写入到memstore,memstore默认大小是64M,当memstore满了之后会进行统一的溢写操作,将memstore中的数据持久化到hdfs中,
 6、频繁的溢写会导致产生很多的小文件,因此会进行文件的合并,文件在合并的时候有两种方式,minor和major,minor表示小范围文件的合并,major表示将所有的storefile文件都合并成一个,具体详细的过程,后续会讲解。
HBase(一)——HBase介绍的更多相关文章
- HBase shell 命令介绍
		
HBase shell是HBase的一套命令行工具,类似传统数据中的sql概念,可以使用shell命令来查询HBase中数据的详细情况.安装完HBase之后,如果配置了HBase的环境变量,只要在sh ...
 - 【转】HBase 超详细介绍
		
---恢复内容开始--- http://blog.csdn.net/frankiewang008/article/details/41965543 1-HBase的安装 HBase是什么? HBase ...
 - HBase 超详细介绍
		
1-HBase的安装 HBase是什么? HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到 ...
 - Hbase学习Hbase基础介绍
		
一.产生背景 自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像Hadoop的解决方案.Hadoop使用分布式文件系统,用 ...
 - Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型
		
Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...
 - HBase学习-HBase原理
		
1.系统架构 1.1 图解 从HBase的架构图上可以看出,HBase中的组件包括Client.Zookeeper.HMaster.HRegionServer.HRegion.Store.MemS ...
 - Hbase理论&&hbase shell&&python操作hbase&&python通过mapreduce操作hbase
		
一.Hbase搭建: 二.理论知识介绍: 1Hbase介绍: Hbase是分布式.面向列的开源数据库(其实准确的说是面向列族).HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hb ...
 - 大数据技术之_11_HBase学习_01_HBase 简介+HBase 安装+HBase Shell 操作+HBase 数据结构+HBase 原理
		
第1章 HBase 简介1.1 什么是 HBase1.2 HBase 特点1.3 HBase 架构1.3 HBase 中的角色1.3.1 HMaster1.3.2 RegionServer1.3.3 ...
 - 【HBase】HBase Getting Started(HBase 入门指南)
		
入门指南 1. 简介 Quickstart 会让你启动和运行一个单节点单机HBase. 2. 快速启动 – 单点HBase 这部分描述单节点单机HBase的配置.一个单例拥有所有的HBase守护线程- ...
 - Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误
		
1:Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误,是因为jar包冲突了,所以对于和hadoop的jar包冲 ...
 
随机推荐
- 【Python】学习笔记十二:模块
			
模块(module) 在Python中,一个.py文件就是一个模块.通过模块,你可以调用其它文件中的程序 引入模块 先写一个first.py文件,内容如下: def letter(): print(' ...
 - javadoc生成文档
			
标签(空格分隔): javadoc java生成html的文档: 要生成注释文档html格式,java里面提供一个工具:javadoc 例如: javadoc -d myhelp -author -v ...
 - solr的访问权限管理及ubuntu下iptables的设置
			
Apache Solr 是一个开源的搜索服务器,该平台默认允许匿名访问,攻击者可读取平台中各类敏感信息.之前考虑过增加账号密码访问,但是没有搞定,所以采用了曲线救国的方式,设置solr服务器只允许部分 ...
 - c++11多线程---线程操作
			
1.等待线程执行完成 join() 方法数会阻塞主线程直到目标线程调用完毕,即join会直接执行该子线程的函数体部分. 2.暂停线程(线程休眠) 使用std::this_thread::sleep_f ...
 - springBoot 动态注入bean(bean的注入时机)
			
springBoot 动态注入bean(bean的注入时机) 参考博客:https://blog.csdn.net/xcy1193068639/article/details/81517456
 - EDM杂谈:第一个屏幕的定义和特点
			
在EDM营销中,经常会碰到第一个屏幕这个概念.这是什么意思呢?博主跟大家介绍一下. 图一:博文配图 这个主要是指用户在打开邮件时不需要滚动屏幕就可以看到的邮件内容.因为用户第一眼就可以看到,因此这部分 ...
 - Jquery Ajax调用asmx出错问题
			
1.//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释. [System.Web.Script.Services.ScriptService] 这个 ...
 - 【漏洞复现】局域网 ARP 中间人攻击 获取他人账号密码
			
日期:2019-07-18 14:24:42 更新: 作者:Bay0net 介绍:如何在局域网内,窃取其他用户的账号密码? 0x01. 漏洞环境 攻击工具 arpspoof 基本用法: arpspoo ...
 - Failure to find com.oracle:ojdbc6:jar:11.2.0.1.0
			
报错原因:oracle的ojdbc.jar是收费的,maven的中央仓库是没有的,需要下载到本地,然后打包进maven仓库 1.下载ojdbc6-11.2.0.1.0.jar包 http://cent ...
 - adb 性能测试(内存)
			
内存测试: 1.使用数据线将手机与电脑连接: 2.手机打开待测APP,即打开进程: 3.打开cmd命令,获取设备列表:输入adb devices; 4.进入该设备的shell环境,输入:adb -s ...