命令行部署#

前提#

  1. 提前已经部署完成HDFS集群以及Zookeeper集群

    Zookeeper安装部署请参考:Zookeeper 部署,假定Zookeeper服务部署在zookeeper1,zookeeper2,zookeeper3上。

    HDFS安装部署请参考:HDFS 部署。HDFS nameservice地址假定为hdfs://oushu

  2. 若需要配置kerberos认证,那么需要提前部署好KDF服务:kerberos 部署。假定配置的默认域为OUSHU.COM

  3. oushu1, oushu2, oushu3机器上需要配置hbase的yum源,具体步骤如下:

    使用root用户登陆oushu1,从yum源所在机器获取repo文件

    scp oushu@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
    

    追加yum源所在机器信息到/etc/hosts文件

    安装lava命令行管理工具:

    yum clean all
    yum makecache
    yum install -y lava
    

    创建一个hostfile文件,包含cluster中的所有机器:

    touch ~/hostfile
    

    编辑hostfile文件内容如下(集群各机器的hostname):

    oushu1
    oushu2
    oushu3
    

    和集群内其他机器交换公钥:

    lava ssh-exkeys -f ~/hostfile -p ********
    

    将repo文件分发给集群内其他机器:

    lava scp -f ~/hostfile /etc/yum.repos.d/oushu.repo =:/etc/yum.repos.d
    
  4. 如果Zookeeper和HDFS部署在其它节点,那么需要在/etc/hosts中添加机器映射

    192.168.1.14 zookeeper1
    192.168.1.15 zookeeper2
    192.168.1.16 zookeeper3
    192.168.1.17 hdfs1
    192.168.1.18 hdfs2
    192.168.1.19 hdfs3
    

部署HBase#

所有节点执行yum install安装hbase

    lava ssh -f ~/hostfile -e "sudo yum install -y hbase"

安装完成之后,会自动生成以下路径:

名称

路径

HBase安装目录

/usr/local/oushu/hbase

HBase配置目录

/usr/local/oushu/conf/hbase

HBase日志目录

/usr/local/oushu/log/hbase

Phoenix安装目录

/usr/local/oushu/phoenix

配置#

创建数据目录#

  • 登录HDFS所在集群,若HDFS开启了kerberos配置,那么需要进行认证操作

    sudo su - hdfs
    kinit -kt /etc/security/keytabs/hdfs.keytab hdfs
  • 登录HDFS所在集群,创建HBase集群存放数据的根目录/hbase,并赋予权限

    sudo su - hdfs
    hdfs dfs -mkdir /hbase
    hdfs dfs -chown -R hbase:hbase /hbase

配置依赖集群#

  • 若需要配置kerberos认证,所有安装hbase的机器需要安装kerberos的客户端

    lava ssh -f ~/hostfile "sudo yum install -y krb5-libs krb5-workstation"
  • 登录oushu1机器,从kerberosserver上获取/etc/krb5.conf文件,然后分发到所有要安装hbase的机器

    scp root@kerberosserver:/etc/krb5.conf /etc/krb5.conf
    lava scp -f ~/hostfile /etc/krb5.conf =:/etc/krb5.conf

备注

Kerberos中hostname不支持大写,如果hostname带大写字母,请将hostname改为小写字母

  • 创建principal并分发keytab

    su - root
    kadmin.local
    addprinc -randkey hbase/oushu1@OUSHU.COM
    addprinc -randkey hbase/oushu2@OUSHU.COM
    addprinc -randkey hbase/oushu3@OUSHU.COM
    xst -k /etc/hbase.keytab hbase/oushu1@OUSHU.COM
    xst -k /etc/hbase.keytab hbase/oushu2@OUSHU.COM
    xst -k /etc/hbase.keytab hbase/oushu3@OUSHU.COM
    
  • 登录oushu1机器,从kerberosserver上获取keytab文件,然后分发到所有要安装hbase的机器

  scp root@kerberosserver:/etc/hbase.keytab /usr/local/oushu/hbase/conf/hbase.keytab
  lava scp -f ~/hostfile /usr/local/oushu/hbase/conf/hbase.keytab =:/usr/local/oushu/hbase/conf/hbase.keytab
  lava ssh -f ~/hostfile -e "chown hbase:hbase /usr/local/oushu/hbase/conf/hbase.keytab"

修改配置文件#

配置文件的路径都在/usr/local/oushu/conf/hbase,文件描述如下:

文件名

作用描述

hbase-env.sh

程序启动环境变量

hbase-site.xml

HBase配置参数

  • 登录oushu1机器,配置hbase-env.sh文件

export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
export JAVA_HOME="/usr/lib/jvm/java"
export HBASE_MANAGES_ZK="false"
export HBASE_LOG_DIR="/usr/local/oushu/log/hbase"
  • 将hbase-env.sh分发到所有机器

lava scp -f ~/hostfile /usr/local/oushu/conf/hbase/hbase-env.sh =:/usr/local/oushu/conf/hbase/hbase-env.sh
  • 登录oushu1机器,配置hbase-site.xml文件

<configuration>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://oushu/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>zookeeper1,zookeeper2,zookeeper3</value>
    </property>
</configuration>
  • 为hbase-site.xml文件增加kerberos的相关配置

<!-- hbase配置kerberos安全认证 -->
<property>
    <name>hbase.security.authentication</name>
    <value>kerberos</value>
</property>
<!-- 配置hbase rpc安全通信 -->
<property>
    <name>hbase.rpc.engine</name>
    <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
</property>
<property>
    <name>hbase.coprocessor.region.classes</name>
    <value>org.apache.hadoop.hbase.security.token.TokenProvider</value>
</property>
<!-- hmaster配置kerberos安全凭据认证 -->
<property>
    <name>hbase.master.kerberos.principal</name>
    <value>hbase/_HOST@OUSHU.COM</value>
</property>
<!-- hmaster配置kerberos安全证书keytab文件位置 -->
<property>
    <name>hbase.master.keytab.file</name>
    <value>/usr/local/oushu/hbase/conf/hbase.keytab</value>
</property>
<!-- regionserver配置kerberos安全凭据认证 -->
<property>
    <name>hbase.regionserver.kerberos.principal</name>
    <value>hbase/_HOST@OUSHU.COM</value>
</property>
<!-- regionserver配置kerberos安全证书keytab文件位置 -->
<property>
    <name>hbase.regionserver.keytab.file</name>
    <value>/usr/local/oushu/hbase/conf/hbase.keytab</value>
</property>
  • 将hbase-site.xml分发到所有机器

lava scp -f ~/hostfile /usr/local/oushu/conf/hbase/hbase-site.xml =:/usr/local/oushu/conf/hbase/hbase-site.xml
  • 若HDFS是HA模式,那么需要将HDFS集群的core-site.xml和hdfs-site.xml文件分发到hbase的conf目录

lava scp -f ~/hostfile /usr/local/oushu/conf/hdfs/core-site.xml =:/usr/local/oushu/conf/hbase/core-site.xml

lava scp -f ~/hostfile /usr/local/oushu/conf/hdfs/hdfs-site.xml =:/usr/local/oushu/conf/hbase/hdfs-site.xml

启动#

登陆oushu1机器,使用root用户创建~/hbasemaster~/regionserver文件

touch ~/hbasemaster
touch ~/regionserver

hbasemaster文件包含

oushu1
oushu2

regionserver文件包含

oushu1
oushu2
oushu3

启动HMaster

lava ssh -f ~/hbasemaster -e "sudo -u hbase /usr/local/oushu/hbase/bin/hbase-daemon.sh start master"

启动HRegionserver

lava ssh -f ~/regionserver -e "sudo -u hbase /usr/local/oushu/hbase/bin/hbase-daemon.sh start regionserver"

检查状态#

登录oushu1,oushu2,oushu3节点,使用jps查询进程是否存活。

oushu1,oushu2节点应该有HMasterHRegionserver进程存在。oushu3节点应该有HRegionserver进程存在

su - hbase
jps

简单测试#

登录oushu1节点,进入hbase shell客户端

ssh oushu1
su - hbase
hbase shell

若配置了kerberos认证,则需要执行kinit获取认证信息,然后进入客户端

su - hbase
kinit -k -t /xx.keytab xx/hostname@OUSHU.COM
hbase shell

创建一张test表,并简单操作,看是否可用

hbase:008:0> create 'p_test', 'f1';
Created table p_test
Took 0.6230 seconds
=> Hbase::Table - p_test

hbase:009:0> put 'p_test', '1001', 'f1:name', 'wang';
Took 0.1461 seconds

hbase:010:0> scan 'p_test';
ROW                        COLUMN+CELL
 1001                      column=f1:name, timestamp=2022-11-03T16:17:01.050, value=wang
1 row(s)
Took 0.0296 seconds

hbase:011:0> describe 'p_test';
Table p_test is ENABLED
p_test
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP_DELETED_CELLS => 'FA
LSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', BL
OCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

1 row(s)
Quota is disabled
Took 0.0257 seconds

使用sqlline.py命令在phoenix端创建一张p_test表,查看是否可用

0: jdbc:phoenix:> create table p_test(id bigint primary key, name varchar);
No rows affected (0.713 seconds)

0: jdbc:phoenix:> upsert into p_test values (1, 'p1');
1 row affected (0.04 seconds)

0: jdbc:phoenix:> select * from p_test;
+----+------+
| ID | NAME |
+----+------+
| 1  | p1   |
+----+------+
1 row selected (0.053 seconds)

0: jdbc:phoenix:> !quit
Closing: org.apache.phoenix.jdbc.PhoenixConnection

注册到skylab(可选)#

HBase将要安装的机器需要通过机器管理添加到skylab中,如果您尚未添加,请参考:注册机器

在oushu1节点修改/usr/local/oushu/lava/conf配置server.json,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:lava安装

{
  "server": "localhost:1612",
  "admin": "localhost:1652"
}

创建一个request文件,包含HBase cluster信息:

touch ~/hbase-register.json

编辑json文件内容如下:

{
  "data": {
    "name": "hbaseserver", 
    "group_roles": [
      {
        "role": "hbase.master",
        "cluster_name": "hbase",
        "group_name": "hbasemaster",
        "machines": [
          {
            "id": 1,
            "name": "oushu1",
            "subnet": "lava",
            "data_ip": "192.168.1.11",
            "manage_ip": "192.168.1.11",
            "assist_port": 1622,
            "ssh_port": 22
          },{
            "id": 2,
            "name": "oushu2",
            "subnet": "lava",
            "data_ip": "192.168.1.12",
            "manage_ip": "192.168.1.12",
            "assist_port": 1622,
            "ssh_port": 22
          }
        ]
      },
      {
        "role": "hbase.regionserver",
        "cluster_name": "hbase",
        "group_name": "hbaseregionserver",
        "machines": [
          {
            "id": 1,
            "name": "oushu1",
            "subnet": "lava",
            "data_ip": "192.168.1.11",
            "manage_ip": "192.168.1.11",
            "assist_port": 1622,
            "ssh_port": 22
          },{
            "id": 2,
            "name": "oushu2",
            "subnet": "lava",
            "data_ip": "192.168.1.12",
            "manage_ip": "192.168.1.12",
            "assist_port": 1622,
            "ssh_port": 22
          },{
            "id": 3,
            "name": "oushu3",
            "subnet": "lava",
            "data_ip": "192.168.1.13",
            "manage_ip": "192.168.1.13",
            "assist_port": 1622,
            "ssh_port": 22
          }
        ]
      }
    ]
  }
}

配置文件说明,整个json分为3部分:

  • 第一部分name,为集群名称,个性化填写。

  • 第二部分为group_roles,对于HBase来说,是2个角色,hbase.master和hbase.regionserver,不可修改。

  • 第三部分,为每个角色添加机器,需要添加的机器信息可以通过下面的方式获得。

在平台基础组件lava所安装的机器执行(端口和用户名按照lava配置修改):

psql lavaadmin -p 4432 -U oushu -c "select m.id,m.name,s.name as subnet,m.private_ip as data_ip,m.public_ip as manage_ip,m.assist_port,m.ssh_port from machine as m,subnet as s where m.subnet_id=s.id;"

获取到所需的机器信息,根据服务角色对应的节点,将机器信息添加到machines数组中。

在oushu1节点调用lava命令注册集群:

lava login -u oushu -p Oushu6@China
lava onprem-register service -s HBase -f ~/hbase-register.json

如果返回值为:

Add service by self success

则表示注册成功,如果有错误信息,请根据错误信息处理。

例如skylab部署在192.168.1.10,访问

http://192.168.1.10:3000/main/Deploy/hbase

从页面登录后,在自动部署模块对应服务中可以查看到新添加的集群,同时列表中会实时监控HBase进程在机器上的状态。