- Hadoop系列文章
- Hbase概述
- Hbase部署
- 单机模式
- 集群模式
- Hbase Shell
Hadoop系列 (一):在CentOS中搭建hadoop环境(伪分布式)
Hadoop系列 (二):完全分布式搭建(腾讯云服务器+阿里云服务器)
Hadoop系列 (三):HDFS详细介绍
Hadoop系列 (四):Yarn详细介绍
Hadoop系列 (五):MapReduce详细介绍
Hadoop系列 (六):Spark搭建
Hadoop系列 (七):ZooKeeper详细介绍
Hbase概述Hbase是建立在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,通过利用Hadoop的文件系统提供容错能力。与Hive不同的时,通过Hbase可以进行实时读写或者随机访问大规模的数据集。
Hbase是可以提供实时计算的分布式数据库,数据被保存在HDFS分布式文件系统上,由HDFS保证期高容错性。
Hbase上的数据是以StoreFile(HFile)二进制流的形式存储在HDFS上block块中;但是HDFS并不知道的Hbase用于存储什么,它只把存储文件认为是二进制文件,也就是说,Hbase的存储数据对于HDFS文件系统是透明的。
| HDFS | Hbase |
|---|---|
| HDFS适于存储大容量文件的分布式文件系统。 | Hbase是建立在HDFS之上的数据库。 |
| HDFS不支持快速单独记录查找。 | Hbase提供在较大的表快速查找 |
| HDFS提供了高延迟批量处理;没有批处理概念。 | Hbase提供了数十亿条记录低延迟访问单个行记录(随机存取)。 |
| HDFS提供的数据只能顺序访问。 | Hbase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。 |
在部署Hbase部署之前,需要配置好jdk以及zookeeper。详细可以参考我的历史文章,有详细说明。
单机模式Hbase下载
#下载文件 [hadoop@master software]$ wget https://dlcdn.apache.org/hbase/stable/hbase-2.3.6-bin.tar.gz #解压到指定目录 [hadoop@master software]$ sudo tar -zxvf hbase-2.3.6-bin.tar.gz -C /opt/hbase --strip-components 1 #更改文件夹权限为hadoop [hadoop@master opt]$ sudo chown -R hadoop:hadoop hbase
配置hbase环境变量
# 编辑.bash_profile 在文件末尾添加一下内容 #set hbase env export Hbase_HOME=/opt/hbase export PATH=$PATH:$Hbase_HOME/bin
创建data及pids目录
[hadoop@master hbase]$ mkdir data [hadoop@master hbase]$ mkdir pids
编辑配置文件
在/opt/hbase/conf/hbase-env.sh文件中添加以下内容:
# hbase-env.sh export JAVA_HOME=/usr/local/java/jdk1.8.0_291 export HADOOP_HOME=/opt/hadoop export Hbase_HOME=/opt/hbase export Hbase_CLASSPATH=/opt/hadoop/etc/hadoo export Hbase_PID_DIR=/opt/hbase/pids export Hbase_MANAGES_ZK=false #不启动hbase自带的zookeeper集群
/opt/hbase/confhbase-site.xml文件中添加以下内容:
启动
注意:单机版Hbase启动时,要确保zookeeper不在运行,因为Hbase和Zookeeper会运行在同一个JVM里面,如果zookeeper启动后,再启动Hbase,会报错:Could not start ZK at requested port of 2181. ZK was started at port: 2182
集群模式节点规划
| 服务/机器 | master | slave1 | slave2 |
|---|---|---|---|
| NameNode | Y | ||
| DataNode | Y | Y | Y |
| Zookeeper | Y | Y | Y |
| RegionServer | Y | Y | Y |
| Hbase Master | Y |
修改配置文件
在上面单机模式的基础上,修改hbase-site.xml文件:
hbase.rootdir hdfs://master:9000/hbase hbase.zookeeper.property.clientport 2181 Property from ZooKeeper'sconfig zoo.cfg. The port at which the clients will connect. hbase.master.info.port 60010 zookeeper.session.timeout 120000 hbase.zookeeper.property.dataDir /opt/zookeeper hbase.zookeeper.quorum master,slave1 hbase.tmp.dir /opt/hbase/data hbase.cluster.distributed true
修改文件regionservers
[hadoop@master conf]$ pwd /opt/hbase/conf # vim regionservers # 删除里面的localhost,添加以下内容 master slave1
文件分发
将文件分发到slave1和slave2上
# 打包hbase文件夹,文件有点大,压缩减少分发时间 [hadoop@master opt]$ sudo tar zcvf hbase.tar.zip hbase #分发到slave1 [hadoop@master opt]$ scp hbase.tar.zip hadoop@slave1:/home/hadoop/software/ hbase.tar.zip 100% 260MB 741.8KB/s 05:58 #在slave1上,解压文件到/opt/hbase目录下 [hadoop@slave1 opt]$ sudo tar -zxvf hbase.tar.zip -C /opt/hbase/ --strip-components 1
启动
查看slave1
注:全部进程启动顺序
-
启动master服务器上的hadoop,hdfs,yarn等
[hadoop@master ~]$ start-all.sh WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds. WARNING: This is not a recommended production deployment configuration. WARNING: Use CTRL-C to abort. Starting namenodes on [master] Starting datanodes Starting secondary namenodes [slave1] Starting resourcemanager Starting nodemanagers [hadoop@master ~]$ jps 3216 ResourceManager 3362 NodeManager 2690 NameNode 3715 Jps 2827 DataNode
-
启动master上的zookeeper
[hadoop@master bin]$ sh zkServer.sh start ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [hadoop@master bin]$ jps 3216 ResourceManager 3362 NodeManager 2690 NameNode 3955 Jps 3859 QuorumPeerMain 2827 DataNode
-
启动slave1上的zookeeper
[hadoop@slave1 bin]$ sh zkServer.sh start ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [hadoop@slave1 bin]$ jps 1632 Jps 1446 NodeManager 1320 SecondaryNameNode 1230 DataNode 1583 QuorumPeerMain
-
启动master上hbase
[hadoop@master bin]$ start-hbase.sh SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.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] running master, logging to /opt/hbase/logs/hbase-hadoop-master-master.out SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.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] master: running regionserver, logging to /opt/hbase/logs/hbase-hadoop-regionserver-master.out slave1: running regionserver, logging to /opt/hbase/logs/hbase-hadoop-regionserver-slave1.out [hadoop@master bin]$ jps 3216 ResourceManager 4513 HRegionServer 3362 NodeManager 2690 NameNode 3859 QuorumPeerMain 4282 HMaster 5035 Jps 2827 DataNode [hadoop@master bin]$
Hbase WEB UI界面
停止Hbase
# 先停止regionserver hadoop@master bin]$ hbase-daemons.sh stop regionserver master: running regionserver, logging to /opt/hbase/logs/hbase-hadoop-regionserver-master.out slave1: running regionserver, logging to /opt/hbase/logs/hbase-hadoop-regionserver-slave1.out master: stopping regionserver. slave1: stopping regionserver. #再停止stop-hbase.sh [hadoop@master bin]$ stop-hbase.sh [hadoop@master bin]$ jps 3216 ResourceManager 3362 NodeManager 2690 NameNode 12039 QuorumPeerMain 13899 Jps 2827 DataNode [hadoop@master bin]$ # 如果stop时等待时间过长,可以试下 ./hbase-daemon.sh stop master # 再执行 ./stop-hbase.sh # 愿意是:为保证集群的可靠性,要启动多个HMasterHbase Shell
- 连接到Hbase
-
显示Hbase Shell帮助信息
键入“help”并按“Enter”,以显示Hbase Shell的一些基本用法信息以及几个示例命令。请注意,表名、行、列都必须用引号字符括起来。
-
创建表
hbase:001:0> create 'test', 'cf' 0 row(s) in 0.4170 seconds => Hbase::Table - test
-
列出表信息
hbase:002:0> list 'test' TABLE test 1 row(s) in 0.0180 seconds => ["test"]
-
存放数据
hbase:003:0> put 'test', 'row1', 'cf:a', 'value1' 0 row(s) in 0.0850 seconds hbase:004:0> put 'test', 'row2', 'cf:b', 'value2' 0 row(s) in 0.0110 seconds hbase:005:0> put 'test', 'row3', 'cf:c', 'value3' 0 row(s) in 0.0100 seconds
-
删除表
hbase:008:0> disable 'test' 0 row(s) in 1.1820 seconds hbase:009:0> enable 'test' 0 row(s) in 0.1770 seconds
-
退出Hbase Shell
要退出Hbase Shell并断开与群集的连接,请使用该“quit”命令。Hbase仍然在后台运行。



