介绍
HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容、缩容和数据容灾,是大数据领域中 Key-Value 数据结构存储最常用的数据库方案。
下载
下载链接
Hadoop和Hbase有版本对应关系,之前使用了Hadoop3.3.1,这里选择Hbase2.4.14
构建hadoop镜像
touch Dockerfile
FROM amd64/buildpack-deps:buster-curl as installer
RUN set -x &&\
curl -SL --output /var/tmp/hbase.tar.gz http://mirrors.aliyun.com/apache/hbase/2.4.13/hbase-2.4.13-bin.tar.gz?spm=a2c6h.25603864.0.0.1ff092c5wfx4JS &&\
tar -xzvf /var/tmp/hbase.tar.gz -C /usr/local &&\
mv /usr/local/hbase-2.4.13 /usr/local/hbase &&\
rm -rf /var/tmp/hbase.tar.gz
FROM chenchongbiao/hadoop:v1
ENV HBASE_HOME=/usr/local/hbase
ENV PATH=$PATH:$HBASE_HOME/bin
WORKDIR $HBASE_HOME
COPY --from=installer ["/usr/local/hbase", "/usr/local/hbase"]
单机模式
修改配置文件
hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk1.8
export HBASE_MANAGES_ZK=true
/hbase/conf/hbase-site.xml
<property>
<!--默认的rootdir会导致每次start-hbash.sh将重置清空HBase数据 -->
<name>hbase.rootdir</name>
<value>file:///usr/local/hbase/tmp</value>
</property>
运行
touch standalone.yml
version: '3'
services:
linux01:
image: chenchongbiao/hbase:v1
working_dir: /usr/local/hbase
container_name: linux01
hostname: linux01
volumes:
- ./standalone/conf/hbase-env.sh:/usr/local/hbase/conf/hbase-env.sh
- ./standalone/conf/hbase-site.xml:/usr/local/hbase/conf/hbase-site.xml
- ./standalone/bin/start-hbase.sh:/usr/local/hbase/bin/start-hbase.sh
restart: always
运行单机模式。
sudo docker-compose -f standalone.yml up -d
进入容器
sudo docker exec -it linux01 bash
启动hbase
bin/start-hbase.sh
进入shell
hbase shell
退出
exit
伪分布模式
修改配置文件
hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk1.8
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
hbase/con/hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
pseudo.yml
version: '3'
services:
linux01:
image: chenchongbiao/hbase:v1
working_dir: /usr/local/hbase
container_name: linux01
hostname: linux01
volumes:
- ../hadoop/pseudo/conf/core-site.xml:/usr/local/hadoop/etc/hadoop/core-site.xml
- ../hadoop/pseudo/conf/hdfs-site.xml:/usr/local/hadoop/etc/hadoop/hdfs-site.xml
- ../hadoop/pseudo/conf/hadoop-env.sh:/usr/local/hadoop/etc/hadoop/hadoop-env.sh
- ../hadoop/sbin:/usr/local/hadoop/sbin
- ./pseudo/conf/hbase-env.sh:/usr/local/hbase/conf/hbase-env.sh
- ./pseudo/conf/hbase-site.xml:/usr/local/hbase/conf/hbase-site.xml
- ./pseudo/conf/regionservers:/usr/local/hbase/conf/regionservers
- ./bin/start-hbase.sh:/usr/local/hbase/bin/start-hbase.sh
ports:
- "9870:9870"
- "16010:16010"
restart: always
regionservers
linux01
运行
运行伪分布模式
sudo docker-compose -f pseudo.yml up -d
进入容器
sudo docker exec -it linux01 bash
先启动hadoop再启动hbase,因为我会把容器删掉,所以重新启动时,需要先进行名称节点格式化
hdfs namenode -format
启动hdfs
../hadoop/sbin/start-dfs.sh
启动hbase
bin/start-hbase.sh
退出
退出shell
exit
停止hbase
hbase-daemon.sh stop master
stop-hbase.sh
停止hadoop
stop-dfs.sh
分布式模式
不管是Hadoop还是HBase,三种运行模式的区别主要在于配置文件
另外,因为ZooKeeper的特性要求必须是奇数个节点。
修改配置文件
hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk1.8
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
export HBASE_HOME=/usr/local/hbase
export HADOOP_HOME=/usr/local/hadoop
export HBASE_LOG_DIR=/usr/local/hbase/logs #Hbase日志目录
hbase/conf/hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/hbase/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>linux01,linux02,linux03</value>
<description>配置zookeeper集群地址,不要指定znode路径,HBase会默认将元数据放在根znode</description>
</property>
regionservers
三个节点名
linux01
linux02
linux03
运行
运行分布式模式。
sudo docker-compose -f cluster.yml up -d
进入主节点容器。
sudo docker exec -it linux01 bash
名称节点格式化。
hdfs namenode -format
开起hadoop集群。
../hadoop/sbin/start-all.sh
启动hbase
start-hbase.sh
## 进入hbase
hbase shell
退出
exit
停止hbase
hbase-daemon.sh stop master
stop-hbase.sh
停止hadoop
../hadoop/sbin/stop-all.sh