(1)安装部署hbase
1:安装zookeeper
(1)将压缩包拷贝进主目录。
打开终端
将压缩包解压安装
但未输入安装路径,默认安装在当前目录。
mv命令将zookeeper 改名,再用mv命令将zookeeper转移到/usr/local
cd命令进入/usr/local。Ls查看当前目录。
用chown命令赋予hadoop用户使用当前目录的权限。
但是因为当前用户是guan所以后面发生权限不够的问题。文件夹无法建立。
重新赋予guan用户使用当前目录的权限。
(2)将Zookeeper的安装路径添加到系统的环境变量之中
使用vim ~/bashrc打开根目录配置文件。
然后,在该文件的尾部添加如下信息,并通过source命令来使配置生效。
(3)配置Zookeeper存储数据的目录和日志输出目录
通过如下命令在Zookeeper安装文件下创建一个data和log文件
然后,通过如下命令将Zookeeper存储数据的目录修改为创建的data文件
在文件中将存储数据的目录修改为创建的data文件
接着使用如下命令打开zkEnv.sh文件,然后修改其中的输出日志的路径配置
在在打开的zkEnv.sh文件中,找到ZOO_LOG_DIR的设置,然后修改为如下
然后用zkServer.sh start 启动Zookeeper
2:安装hbase
(1)进入压缩包所在文件夹,解压并安装
sudo tar –zxvf hbase-1.5.0-bin.tar.gz -C /usr/local
(2)将Hbase的安装路径添加到系统的环境变量之中,如图最后两行。
用source保存后,输入如下的命令来查看Hbase的版本,并验证Hbase是否安装成功
3,伪分布式环境配置
(1)进入hbase的conf目录,修改hbase-env.sh文件
通过vim命令打开hbase-env.sh文件,在该文件的顶部添加如下信息
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161//JAVA的安装路径
export HBASE_MANAGES_ZK=false//这个是为了配置不使用自带的zookeeper
(2)进入hbase的conf目录,修改hbase-site.xml文件
通过vim命令打开hbase-site.xml文件,然后在该文件的<configuration>标签内添加如下信息。
Localhost:9000/hbase 为Hbase数据在HDFS中的存储位置:根目录下hbase文件夹
(3)将Zookeeper的一个配置文件复制到Hbase配置文件所在的目录
(4)启动hbase
在Linux终端输入start-hbase.sh命令来启动Hbase,在启动之前我们必须首先启动HDFS和Zookeeper
在Hbase 和Zookeeper启动的情况下,Hbase 无法正常启动。
经过检查
是java安装路径和版本不正确。
重新配置hbase-env.sh文件,将改文件顶部的JAVA_HOME换为本机java的安装路径
修改过后,重新启动hbase成功
安装完成。
(二)、总结hbase的基本原理
- Hbase 是Bigtable的开源实现,是Hadoop的重要分支,是建立在HDFS之上的一个分布式、面向列的开源数据库系统;具有高可靠性、高性能、列存储、可伸缩、实时读写等重要特征。
- Hbase与传统数据库的区别。
传统关系型数据库系统:
关系数据库系统:支持关系模型的数据库系统,通过集合、代数等数学运算来对数据库中的数据进行处理。
关系模型:是指用二维表的形式表示实体和实体间联系的数据模型。
SQL语言:常见关系型数据库系统均使用SQL用于创建和删除数据库、增加修改更新和删除数据库中的数据
供结构化查询语言,非过程化编程语言
使得具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口
缺点:可扩展性差,无法较好的支持海量数据的存储
难以支持海量数据的高并发读写访问。
Hbase数据库系统:
一种NoSQL数据库系统
不支持SQL查询语言,也缺乏了传统关系型数据库所具有的特性和遵循的机制
借鉴了谷歌的BigTable的设计,并通过Java语言进行开发,是BigTable的开源实现
提供面向列、可伸缩的分布式存储
运行于HDFS之上,是Hadoop的重要组件
解决了HDFS只适合于批量访问不能随机访问的问题。
相同点:同传统的关系型数据库系统一样,利用表格来组织数据
每个表由行和列组成
不同点:(1)Hbase表增加了列族和时间戳的概念
(2) Hbase允许某个列族或者某个列族下的某个列的数据为空
(3) Hbase使用了命名空间这一概念:
传统数据库系统使用数据库来组织不同的表,以及实现权限管理
Hbase使用命名空间来对表进行管理
Hbase中建立表之前,可以先建立命名空间,并指定所建立的表所属的命名空间。
如果在建表时不指定命名空间,则将表放入默认的default命名空间
3,Hbase数据模型的两种视图:
逻辑视图
反映数据逻辑上的组织结构
逻辑结构便于人们理解
物理视图
反映数据的存储结构
逻辑上:Hbase的表是一个稀疏表,允许表中的单元格为空。
Hbase按行键将一个大表的数据划分为不同的范围
一个范围内的同一个列族的数据存储到一个文件中
不同列族的文件是分离的。,
4,Hbase是如何将数据存储的?
1,首先,Hbase将表分割成不同Region进行分布式存储
Hbase将表中的所有行按照行键进行字典排序
按行分割为多个Region
每个Region都保存着一个表的一段连续的数据,并记录了它的起始行键和结束行键
Hbase将它们分发给集群中的不同节点进行存储和管理
Region是Hbase数据存储和管理的基本单元
每个Region只会存在于一个节点中,而每个节点则可能会放置多个Region。
2,其次,Hbase建立三级映射关系来定位Region
Meta表:以“表名+开始行键+ RegionID”作为行键,每一行记录了一个Region的信息以及Region所在的节点的地址等信息,建立起Region与集群节点的对应关系
Root表:建立META表的Region与它所在的节点之间的对应关系
3,最后,基于META表与root表的数据访问
首先,获取ROOT表的位置,从ROOT表中获取对应的META表的Region以及该Region所在节点
然后,从相应节点*问META表,获取要访问的Region所在的节点
在获得Region所在的节点位置之后,用户通过客户端直接与数据所在的节点连接来读写数据,整个过程不需要连接集群的主节点,减少了主节点的负载压力。
5,Hbase的运行架构
Zookeeper
在分布式环境下提供高性能和高可靠的协调服务的程序组件
Hmaster
分配Region到集群的各个HRegionServer
监控各个HRegionServer的状况,调整Region的分布实现负载均衡,发现失效的HRegionServer并重新分配其上的Region
维护ROOT表和META表,记录各个HRegionServer上Region的变化信息
管理用户对建表和对表进行变更的操作
HRegionServer
分布式集群中单个计算节点上负责管理本地存储的Region的进程
HRegionServer与Zookeeper交互,定期上传节点的负载状况,比如节点的内存使用状态、在线状态的Region等信息。
当用户定位到HRegionServer所管理的Region时,HRegionServer负责与用户客户端连接来提供对数据的读写访问。
(1)数据在节点的写入和存储
在进行存储时,每个Region由一个或者多个Store组成,每个Store存储该Region一个列族的所有键值对数据
每个Strore又由一个memStore和0至多个StoreFile组成
memStore是内存缓存中的文件,StoreFile是磁盘中的文件
用户写入数据时数据首先会放在缓存的memStore中,当memStore满了以后会写入磁盘形成一个StoreFile进行持久化。
(2)Storefile的压缩合并
当StoreFile增长到一定数量之后,StoreFile会通过压缩合并到一起形成一个StoreFile
在合并的过程中,会进行版本合并和数据删除操作
这也说明:Hbase的更新和删除操作都是在后期StoreFile的合并中实现和完成的
Hbase将随机写的操作转化成顺序写操作,以支持对数据的随机修改!
(3)Region的分裂
StoreFile的不断合并最终会形成一个非常大的StoreFile。
当StoreFile大到一定程度便会触发其所在的Region的分裂成两个新的Region,新的Region会被HMaster重新分配到相应的节点上,而老的Region就会下线。
(4)写操作的日志记录
每个HRegionServer有一个日志记录对象Hlog
一个HRegionServer下的所有Region共享一个Hlog对象
写入memStore的数据必须首先写入到Hlog的文件
Hlog文件会定期的更新,删除已经写入磁盘的数据
(5)数据的查找与读取
每个HRegionServer存在一个缓存区域供数据的读取操作
当客户端定位到HRegionServer下的某个Region并发起数据读取请求时,HRegionServer首先根据行键查询读缓存中是否有需要读取的数据,如果没有则进入磁盘到的Hfile中进行查找
当Hbase读取磁盘上某一条数据时,Hbase会将整个Hfile的一个数据块读到缓存中
这里Hfile的数据块和HDFS的数据块是两个独立的概念。HFile块的默认大小是64KB。用户还可以在列族层面对Hfile数据块的大小进行设置。