标签(空格分隔): hadoop
前言
hbase是什么 是以hdfs作为数据支撑的列式数据库。
hbase怎么用 可以使用命令行和api完成调用
hbase与传统数据库的比较 这里在于大数据量的前提下,当然本身数据库也可以分库分表,但需要额外的技术支持才可以。
1、传统数据库遇到的问题:
1)数据量很大的时候无法存储
2)没有很好的备份机制
3)数据达到一定数量开始缓慢,很大的话基本无法支撑
2、HBASE优势:
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑
2)数据存储在hdfs上,备份机制健全
3)通过zookeeper协调查找数据,访问速度块。
什么是hbase
hbase是一个列式数据库是高可用、高性能、面向列、可伸缩的分布式存储系统。
安装
1. 上传
首先确保用户是hadoop,用工具将hbase安装包hbase-0.99.2-bin.tar.gz上传到/home/hadoop下,确保hbase-0.99.2-bin.tar.gz的用户是hadoop,如果不是,执行chown命令,见上文 当前最新版本已到2了。
2. 解压
su – hadoop
tar –zxvf hbase-0.99.2-bin.tar.gz
3. 重命名
mv hbase-0.99.2 hbase
4. 修改环境变量
1、 在master机器上执行下面命令:
su – root
vi/etc/profile
添加内容:
export HBASE_HOME=/home/hadoop/hbase
export PATH=
P
A
T
H
:
PATH:
PATH:HBASE_HOME/bin
执行命令:
source /etc/profile
su – hadoop
2、在其他机器上执行上述操作。
5. 修改配置文件
su – hadoop
将配置文件 上传到/home/hadoop/hbase/conf文件夹下。
每个文件的解释如下:
hbase-env.sh
export JAVA_HOME=/usr/jdk //jdk安装目录
export HBASE_CLASSPATH=/home/hadoop/hadoop/conf //hadoop配置文件的位置
export HBASE_MANAGES_ZK=true
#如果使用独立安装的zookeeper这个地方就是false
hbase-site.xml
<configuration>
<property>
<name>hbase.master</name> #hbasemaster的主机和端口
<value>master1:60000</value>
</property>
<property>
<name>hbase.master.maxclockskew</name> #时间同步允许的时间差
<value>180000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs:// hadoop-cluster1/hbase</value>#hbase共享目录,持久化hbase数据
</property>
<property>
<name>hbase.cluster.distributed</name> #是否分布式运行,false即为单机
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>#zookeeper地址
<value>slave1, slave2,slave3</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>#zookeeper配置信息快照的位置
<value>/home/hadoop/hbase/tmp/zookeeper</value>
</property>
</configuration>
Regionservers //是从机器的域名
slave1
slave2
slave3
6. 把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
cp /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml /home/hadoop/hbase/conf
cp /home/hadoop/hadoop/etc/hadoop/core-site.xml /home/hadoop/hbase/conf
7. 发送到其他机器
su - hadoop
scp –r /home/hadoop/hbase hadoop@slave1:/home/hadoop
scp –r /home/hadoop/hbase hadoop@slave2:/home/hadoop
scp –r /home/hadoop/hbase hadoop@slave3:/home/hadoop
8. 启动
su – hadoop
start-hbase.sh
hmater主备: 在hmaster之外的机器选一台启动 local-master-backup.sh start 2(第几个master)
9. 查看
进程:jps
进入hbase的shell:hbase shell
退出hbase的shell:quit
页面:http://master:60010/
如果无法访问则在hbase-site.xml重新配置添加如下配置项即可访问
<property>
<name>hbase.master.info.port</name>
<value>60010</value><!--默认的hmaster web访问端口-->
</property>
相关文档
http://abloz.com/hbase/book.html#config.files 中文文档
或者访问下https://hbase.apache.org/book.html 英文文档
这里中文文档的版本有点低
hbase中有什么(怎么设计的可以有以上的优势)
hbase跟hadoop有点像,hadoop有namenode和datanode,而hbase也分为hmaster和Hregionserver,hmaster主节点可以有多个节点,hregionserver从节点可以实现横向扩容。
HBaseMaster
HMaster 负责给HRegionServer分配区域,并且负责对集群环境中的HReginServer进行负载均衡,HMaster还负责监控集群环境中的HReginServer的运行状况,如果某一台HReginServer down机,HBaseMaster将会把不可用的HReginServer来提供服务的HLog和表进行重新分配转交给其他HReginServer来提供,HBaseMaster还负责对数据和表进行管理,处理表结构和表中数据的变更,因为在 META 系统表中存储了所有的相关表信息。并且HMaster实现了ZooKeeper的Watcher接口可以和zookeeper集群交互。
HRegionServer
HReginServer负责处理用户的读和写的操作。HReginServer通过与HBaseMaster通信获取自己需要服务的数据表,并向HMaster反馈自己的运行状况。当一个写的请求到来的时候,它首先会写到一个叫做HLog的write-ahead log中。HLog被缓存在内存中,称为Memcache,每一个HStore只能有一个Memcache。当Memcache到达配置的大小以后,将会创建一个MapFile,将其写到磁盘中去。这将减少HReginServer的内存压力。当一起读取的请求到来的时候,HReginServer会先在Memcache中寻找该数据,当找不到的时候,才会去在MapFiles 中寻找。
也就是说Hmaster是负责管理数据的存储位置信息,HRegionServer本身有缓存数据,另外还有持久化数据,它直接与hdfs进行数据交互。
数据模型
逻辑模型
rowkey:类似行数据库的主键,数据类型可以为任意字符串最大64kb,在hbase中数据的访问形式有三种 通过rowkey,全盘扫描,通过rowkey的range正则。
列族: 列族:列是唯一的cell,通过这种结构定义的列式数据库,列可以无限拓展。
cell: 列族:列 是数据的最小组成单元,通过此才能获取到对应的数据。比如c:a c:b a,b是列 都属于这个列族。
物理模型
Table在行的方向上分割为多个HRegion,每个HRegion分散在不同的RegionServer中。
每个HRegion由多个Store构成,每个Store由一个MemStore和0或多个StoreFile组成,每个Store保存一个Columns Family StoreFile以HFile格式存储在HDFS中。
扩展阅读
行数据库和列数据库。
行数据库:按行存储,没索引就需要整表扫描,有索引则需要耗费资源构建索引,数据量太大还需要分库分表。
列数据库:按列存储,列存储就可以集中存储某一列的数据在一个文件因同一类型可做到高效压缩,数据即索引,只访问对应的列信息减少io,并且hbase结合hfds可做到数据分区存储增加并发访问能力。
下图是行列数据库的比较:
#下一节
shell及api操作,hbase的原理。