前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据环境搭建-HBase和Zookeeper

大数据环境搭建-HBase和Zookeeper

作者头像
码客说
发布2022-04-26 08:31:07
2.4K0
发布2022-04-26 08:31:07
举报
文章被收录于专栏:码客

前言

Hbase与 Zookeeper 的关系

HBase 主要用ZooKeeper来实现 HA 选举主备集群主节点的切换系统容错、meta-region 管理Region 状态管理分布式 SplitWAL 任务管理等。

下载地址

https://dlcdn.apache.org/hbase/2.4.11/

HBase的部署方式包括:

部署模式

说明

单机模式

常用于本地开发

伪集群模式

使用HBase自带的zookeeper

集群模式

使用HBase自带的zookeeper

集群模式

单独安装zookeeper

HBase的安装

本文的HBase安装是在Hadoop已经安装好的基础上实现的,所以之前要导出JAVA_HOME、HADOOP_HOME( 单机模式不需要,伪分布式模式和分布式模式需要)等环境变量以及配置好SSH互信等。

代码语言:javascript
复制
tar -zxvf hbase-2.4.11-bin.tar.gz
mkdir -p /data/tools/bigdata/
mv hbase-2.4.11 /data/tools/bigdata/
cd /data/tools/bigdata/hbase-2.4.11

HBase的配置

公共配置

环境变量

代码语言:javascript
复制
cd /etc/profile.d/

创建配置文件

代码语言:javascript
复制
vi /etc/profile.d/my_env.sh

内容设置为

代码语言:javascript
复制
# HBase
export HBASE_HOME=/data/tools/bigdata/hbase-2.4.11
export PATH=$PATH:$HBASE_HOME/bin

配置生效

代码语言:javascript
复制
source /etc/profile

查看是否生效

代码语言:javascript
复制
echo $HBASE_HOME

查看hbase版本 :

代码语言:javascript
复制
hbase version

单机模式

配置hbase-env.sh 在hbase-env.sh添加如下内容

代码语言:javascript
复制
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export HBASE_MANAGES_ZK=true

说明:

其中 HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要单独的zookeeper HBASE_MANAGES_ZK=false则表示使用独立部署的zookeeper。

配置hbase-site.xml

代码语言:javascript
复制
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>file:///data/tools/bigdata/zdata/hbase</value>
    </property>
</configuration>

说明:

hbase.rootdir,用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。

此配置中HBase直接使用默认的文件系统。

启动和停止

代码语言:javascript
复制
$HBASE_HOME/bin/start-hbase.sh
$HBASE_HOME/bin/stop-hbase.sh

伪集群模式

配置hbase-env.sh 在hbase-env.sh添加如下内容

代码语言:javascript
复制
export JAVA_HOME=$JAVA_HOME
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_MANAGES_ZK=true

export HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要单独的部署zookeeper。

export HBASE_CLASSPATH="", 表示使用hdfs作为HBase的储存。

配置hbase-site.xml

代码语言:javascript
复制
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://localhost:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
</configuration>

说明:

base.rootdir,用于指定HBase数据的存储位置,此时已经使用了hdfs。 hbase.cluster.distributed设置集群处于分布式模式;

启动和停止

启动HBase

代码语言:javascript
复制
$HBASE_HOME/bin/start-hbase.sh

停止HBase

代码语言:javascript
复制
$HBASE_HOME/bin/stop-hbase.sh

启动HDFS

代码语言:javascript
复制
$HADOOP_HOME/sbin/start-dfs.sh

停止HDFS

代码语言:javascript
复制
$HADOOP_HOME/sbin/stop-dfs.sh

集群模式(使用自带的Zookeeper)

配置hbase-env.sh 在hbase-env.sh添加如下内容

代码语言:javascript
复制
export JAVA_HOME=$JAVA_HOME
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_MANAGES_ZK=true

HBASE_MANAGES_ZK=true,表示使用hbase自带的zookeeper。

配置hbase-site.xml

代码语言:javascript
复制
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>master:6000</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>slave1:2181,slave2:2181,slave3:2181</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property</name>
        <value>/data/tools/bigdata/zdata/zookeeper/data</value>
    </property>
</configuration>

说明:

  • base.rootdir 用于指定HBase数据的存储位置;
  • hbase.cluster.distributed 设置集群处于分布式模式;
  • hbase.master 指定hbase的hmaster的主机名和端口 ;
  • base.zookeeper.quorum 指定使用zookeeper的主机地址,必须是奇数个;
  • hbase.zookeeper.property 指定zookeeper数据存储目录,默认路径是/tmp,如果不配置,重启之后数据将被清空。

配置regionservers 在regionservers文件中添加HBase的slave节点,类似hadoop中的slaves,一行一个。

代码语言:javascript
复制
slave1
slave2
slave3

启动和停止 启动(包括启动hdfs和hbase)

代码语言:javascript
复制
$HBASE_HOME/sbin/start-dfs.sh
$HBASE_HOME/bin/start-hbase.sh

停止(包括停止hbase和hdfs)

代码语言:javascript
复制
$HBASE_HOME/bin/stop-hbase.sh
$HBASE_HOME/sbin/stop-dfs.sh

HBase启动成功之后:

master节点上的进程有:HMaster slave节点上的进程有:HRegionServer、HQuorumPerr

集群模式(单独安装Zookeeper)

安装zookeeper zookeeper的下载和解压这里不赘述,直接开始zookeeper集群的配置。 首先,导出zookeeper环境编辑,添加如下内容到~/.bash_profile中

代码语言:javascript
复制
export ZOOKEEPER_HOME=/data/tools/bigdata/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin

解压zookeeper之后,进入conf目录,拷贝生成zoo.cfg cp zoo_sample.cfg zoo.cfg

配置zoo.cfg。在zoo.cfg中添加如下内容

代码语言:javascript
复制
clientPort=2181
dataDir=/data/tools/bigdata/zdata/zookeeper
server.1=master:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888

说明:

第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888。 分发解压的zookeeper到slave2、slave3

复制到其它服务器上

代码语言:javascript
复制
scp -r /data/tools/bigdata/zookeeper-3.4.10 slave2:/data/tools/bigdata/zookeeper-3.4.10
scp -r /data/tools/bigdata/zookeeper-3.4.10 slave3:/data/tools/bigdata/zookeeper-3.4.10

创建数据目录

代码语言:javascript
复制
ssh root@master 'mkdir -p /data/tools/bigdata/zdata/zookeeper'
ssh root@slave2 'mkdir -p /data/tools/bigdata/zdata/zookeeper'
ssh root@slave3 'mkdir -p /data/tools/bigdata/zdata/zookeeper'

写入myid

代码语言:javascript
复制
ssh root@master  'echo 1 > /data/tools/bigdata/zdata/zookeeper/zk_data/myid'
ssh root@slave2  'echo 2 > /data/tools/bigdata/zdata/zookeeper/zk_data/myid'
ssh root@slave3  'echo 3 > /data/tools/bigdata/zdata/zookeeper/zk_data/myid'

注意:本文部署的zookeeper集群包含三个节点,分别是master、slave1、slave2。

写入myid的值要和zoo.cfg中server后数值对应。 启动、停止、查看zookeeper状态

代码语言:javascript
复制
ssh root@master   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh start'
ssh root@slave2   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh start'
ssh root@slave3   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh start'

状态

代码语言:javascript
复制
ssh root@master   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh status'
ssh root@slave2   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh status'
ssh root@slave3   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh status'

停止

代码语言:javascript
复制
ssh root@master   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh stop'
ssh root@slave2   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh stop'
ssh root@slave3   '/data/tools/bigdata/zookeeper-3.4.10/bin/zkServer.sh stop'

配置hbase-env.sh

代码语言:javascript
复制
export JAVA_HOME=$JAVA_HOME
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_MANAGES_ZK=false

其中HBASE_MANAGES_ZK=false,表示不使用hbase自带的zookeeper,而使用独立部署的zookeeper。 配置hbase-site.xml

代码语言:javascript
复制
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>master:6000</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>slave1:2181,slave2:2181,slave3:2181</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property</name>
        <value>/data/tools/bigdata/zdata/zookeeper/data</value>
    </property>
</configuration>

说明:

  • base.rootdir 用于指定HBase数据的存储位置;
  • hbase.cluster.distributed 设置集群处于分布式模式;
  • hbase.master 指定hbase的hmaster的主机名和端口 ;
  • hbase.zookeeper.quorum 指定使用zookeeper的主机地址,必须是奇数个;
  • hbase.zookeeper.property 指定zookeeper数据存储目录,默认路径是/tmp,如果不配置,重启之后数据将被清空。

配置regionservers 在regionservers文件中添加HBase的slave节点,类似hadoop中的slaves,一行一个。

代码语言:javascript
复制
slave1
slave2
slave3

启动和停止 先启动zookeeper,参考上述“启动、停止、查看zookeeper状态”。 启动(包括启动hdfs和hbase)

代码语言:javascript
复制
$HBASE_HOME/sbin/start-dfs.sh
$HBASE_HOME/bin/start-hbase.sh

停止(包括停止hbase和hdfs)

代码语言:javascript
复制
$HBASE_HOME/bin/stop-hbase.sh
$HBASE_HOME/sbin/stop-dfs.sh

HBase启动成功之后: master节点上的进程有:HMaster、QuorumPeerMain slave节点上的进程有:HRegionServer、QuorumPeerMain 说明:hbase的master节点和slave节点中都出现了QuorumPeerMain(就是zookeeper进程)而不是QuorumPeer进程,表示此时hbase使用的是独立的zookeeper。

HBase的操作

下面的操作主要是在hbase的shell中操作的,进入hbase shell

代码语言:javascript
复制
hbase shell

创建表

代码语言:javascript
复制
create 't_student','s_name','s_sex','s_age','s_dept','s_course'

# 创建表示指定保存的版本数
create 't_teacher',{NAME=>'username',VERSIONS=>5}

查看表详情

代码语言:javascript
复制
describe 't_student'

显示所有的表

代码语言:javascript
复制
list

插入数据

代码语言:javascript
复制
put 't_student','95001','s_name','LiYing'
put 't_student','95001','s_sex','Male'
put 't_student','95001','s_course:math','80'
put 't_student','95001','s_course:english','90'

put 't_student','95002','s_name','ZhangYiDa'
put 't_student','95002','s_sex','Femal'
put 't_student','95002','s_course:math','90'
put 't_student','95002','s_course:english','70'

注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。

当运行命令:put ‘t_student’,’95001’,’s_name’,’LiYing’时,即为t_student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。

查询数据 HBase中有两个用于查看数据的命令:

  1. get命令,用于查看表的某一行数据;
  2. scan命令用于查看某个表的全部数据

示例

代码语言:javascript
复制
get 't_student','95001'
get 't_student','95001','s_course'
get 't_student','95001','s_course:math'

scan 't_student'

删除数据 在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是: ① delete用于删除一个数据,是put的反向操作; ② deleteall操作用于删除一行数据。

代码语言:javascript
复制
delete 't_student','95001','s_sex'
deleteall 't_student','95001'

修改数据 在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。下面是一个操作的例子:

代码语言:javascript
复制
hbase(main):034:0> get 't_student','95001'
COLUMN                             CELL                                                                                             
 s_name:                            timestamp=1537497681798, value=LiYing                                                           
 s_sex:                             timestamp=1537497682400, value=Male                                                            
 s_course:english                    timestamp=1537497872225, value=90                                                             
 s_course:math                       timestamp=1537497681859, value=80                                                               
4 row(s) in 0.0310 seconds

hbase(main):035:0> put 't_student','95001','s_course:english','100'
0 row(s) in 0.0130 seconds

hbase(main):036:0> get 't_student','95001'
COLUMN                             CELL                                                                                             
 s_name:                            timestamp=1537497681798, value=LiYing                                                           
 s_sex:                             timestamp=1537497682400, value=Male                                                             
 s_course:english                    timestamp=1537498062541, value=100                                                             
 s_course:math                       timestamp=1537497681859, value=80                                                               
4 row(s) in 0.0130 seconds

删除表 删除表有两步,第一步先让该表不可用,第二步删除表。直接drop未disable的表会失败。

代码语言:javascript
复制
disable 't_student'
drop 't_student'

查询历史的表

代码语言:javascript
复制
create 't_teacher',{NAME=>'username',VERSIONS=>5}

put 't_teacher','91001','username','Mary'
put 't_teacher','91001','username','Mary1'
put 't_teacher','91001','username','Mary2'
put 't_teacher','91001','username','Mary3'
put 't_teacher','91001','username','Mary4'  
put 't_teacher','91001','username','Mary5'

get 't_teacher','91001',{COLUMN=>'username',VERSIONS=>5}

hbase(main):064:0> get 't_teacher','91001',{COLUMN=>'username',VERSIONS=>5}
COLUMN                             CELL                                                                                             
 username:                         timestamp=1537498459746, value=Mary5                                                             
 username:                         timestamp=1537498455244, value=Mary4                                                             
 username:                         timestamp=1537498455193, value=Mary3                                                             
 username:                         timestamp=1537498455174, value=Mary2                                                             
 username:                         timestamp=1537498455149, value=Mary1                                                             
5 row(s) in 0.0110 seconds

退出hbase

代码语言:javascript
复制
exit

Hive与Hbase集成

配置

编辑hive-site.xml配置文件,

添加hive.zookeeper.quorum, hbase.zookeeper.quorum属性

代码语言:javascript
复制
<property>
  <name>hive.zookeeper.quorum</name>
  <value>master,node1,node2</value>
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>master,node1,node2</value>
</property>

编辑hive-env.sh文件,添加HADOOP_HOME, HBASE_HOME属性

代码语言:javascript
复制
export HADOOP_HOME=/data/tools/bigdata/hadoop-2.7.7
export HBASE_HOME=/data/tools/bigdata/hbase-2.4.11

命令启动hive,如不报错表示hive与hbase整合成功

代码语言:javascript
复制
hive

操作

hbase中创建表

代码语言:javascript
复制
create 't_user', 'info'
put 't_user','1','info:name','xiaoming'
put 't_user','1','info:sex','man'

在hive中创建一张hbase与hive的映射表, 建表语句如下

代码语言:javascript
复制
create external table t_user (
        id string,
        name string,
        sex string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:sex")
TBLPROPERTIES("hbase.table.name" = "t_user")

通过hive客户端查询该表的数据

代码语言:javascript
复制
select * from t_user;

结果

代码语言:javascript
复制
hive> select * from t_user;
OK
1       xiaoming   man
Time taken: 2.172 seconds, Fetched: 1 row(s)

hbase中加一条数据

代码语言:javascript
复制
put 't_user','2','info:name','test'
put 't_user','2','info:sex','123456'

hive再次查询

代码语言:javascript
复制
select * from t_user;

结果

代码语言:javascript
复制
hive> select * from t_user;
OK
1       xiaoming   man
2       test    123456
Time taken: 0.408 seconds, Fetched: 2 row(s)

至此,hive与hbase集成成功.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • HBase的安装
  • HBase的配置
    • 公共配置
      • 单机模式
        • 伪集群模式
          • 集群模式(使用自带的Zookeeper)
            • 集群模式(单独安装Zookeeper)
            • HBase的操作
            • Hive与Hbase集成
              • 配置
                • 操作
                相关产品与服务
                TDSQL MySQL 版
                TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档