Hadoop集群(四) Hbase搭建
一、HBase是什么
-
HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。
-
HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。
-
它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。
-
人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。
- hbase单表可以有百亿行,百万列,数据矩阵横向和纵向两个纬度所支持的数量级都非常具有弹性
- 一张表列簇不会超过5个,每个列簇中的列数没有限制,列只有插入数据后存在,列在列簇中是有序的
hbase的特性
HBase 和 HDFS
HDFS |
HBase |
---|---|
HDFS是适于存储大容量文件的分布式文件系统。 | HBase是建立在HDFS之上的数据库。 |
HDFS不支持快速单独记录查找。 | HBase提供在较大的表快速查找 |
它提供了高延迟批量处理;没有批处理概念。 | 它提供了数十亿条记录低延迟访问单个行记录(随机存取)。 |
它提供的数据只能顺序访问。 | HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。 |
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:
- 表是行的集合。
- 行是列族的集合。
- 列族是列的集合。
- 列是键值对的集合。
HBASE架构设计模型
举例说明
二、HBase安装和搭建
1.下载解压安装
#下载cdh版本 wget http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.9.3.tar.gz # 解压安装包 tar xf hbase-1.2.0-cdh5.9.3.tar.gz -C /opt/ mv hbase-1.2.0-cdh5.9.3 /opt/hbase # 创建目录 mkdir -p /opt/hbase/{log,pid,tmp}
2、配置 HBase 环境变量
#编辑文件/etc/profile.d/hbase.sh。 # HBASE ENV export HBASE_HOME=/opt/hbase export PATH=$PATH:$HBASE_HOME/bin #使HADOOP环境变量生效 source /etc/profile.d/hbase.sh
3.配置 hbase-env.sh
编辑 /opt/hbase/conf/hbase-env.sh
export JAVA_HOME=JAVA_HOME=/usr/java/jdk1.8.0_11 export HBASE_CLASSPATH=/opt/hadoop/etc/hadoop export HBASE_LOG_DIR=/home/hbase/log export HBASE_PID_DIR=/home/hbase/pid export HBASE_MANAGES_ZK=false #如果ssh端口不是22,需要添加以下参数 #export HBASE_SSH_OPTS="-p 40022" #以下参数依照服务器配置修改 export HBASE_HEAPSIZE=2G export HBASE_OFFHEAPSIZE=1G
4.配置region服务器 regionservers
编辑文件/opt/hbase/conf/regionservers
,修改为如下。
zkh01
zkh02
zkh03
5、配置列式存储 hbase-site.xml
编辑文件/opt/hbase/conf/hbase-site.xml
,修改为如下。
<configuration> <!--本地文件系统的临时文件夹,可以修改为一个更为持久的目录--> <property> <name>hbase.tmp.dir</name> <value>/opt/hbase/tmp</value> </property> <!--region服务器的共享目录,用来持久存储HBase的数据 --> <property> <name>hbase.rootdir</name> <value>hdfs://ns/hbase</value> </property> <!--HBase集群的运行模式,false表示单机模式,true表示集群模式--> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!--HBase Master应该绑定的端口--> <property> <name>hbase.master.port</name> <value>60000</value> </property> <!--HBase RegionServer绑定的端口--> <property> <name>hbase.regionserver.port</name> <value>60020</value> </property> <!--HBase RegionServer的Web UI服务端口--> <property> <name>hbase.regionserver.info.port</name> <value>60030</value> </property> <!--zookeeper集群的ip地址--> <property> <name>hbase.zookeeper.quorum</name> <value>192.168.67.101:2181,192.168.67.102:2181,192.168.67.103:2181</value> </property> <!--ZooKeeper的zoo.cfg配置文件中的属性,ZooKeeper面向客户端服务的端口--> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <!--ZooKeeper会话超期时间--> <property> <name>zookeeper.session.timeout</name> <value>120000</value> </property> <!--ZooKeeper的zoo.cfg配置文件中的属性,ZooKeeper集群中单个节点接收的单个客户端请求的并发数--> <property> <name>hbase.zookeeper.property.maxClientCnxns</name> <value>300</value> </property> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> </configuration>
6.将配置好的安装包复制到其他节点
scp -r hbase junesu@zkh02:/opt
scp -r hbase junesu@zkh03:/opt
三、HBase 启动
1.在zkh01执行
/opt/hbase/bin/start-hbase.sh
2、检查 HBase
[junesu@zkh01 opt]$ jps 11200 HRegionServer 1553 DataNode 1442 NameNode 1958 DFSZKFailoverController 25625 Jps 11067 HMaster 1757 JournalNode
3、HBase 的 WEB 界面
访问 http://zkh01:60010/master-status
访问 http://zkh02:60030/rs-status
4、进入 hbase shell 验证
[junesu@zkh01 ~]# hbase shell SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017 hbase(main):001:0> list TABLE 0 row(s) in 0.2210 seconds => [] hbase(main):002:0> status 1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load