• 【云原生】HBase on k8s 编排部署讲解与实战操作


    一、概述

    HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容、缩容和数据容灾,是大数据领域中 Key-Value 数据结构存储最常用的数据库方案。

    在这里插入图片描述

    二、开始编排部署(非高可用HDFS

    地址:https://artifacthub.io/packages/helm/hbase/hbase

    1)下载chart

    helm repo add hbase https://itboy87.github.io/bigdata-charts/
    
    # hbase version 2.4.13
    helm pull hbase/hbase --version 0.1.7
    
    • 1
    • 2
    • 3
    • 4

    2)构建镜像

    在下面连接hadoop高可用会重新构建镜像,这里就不重新构建镜像了,只是把远程的包推送到本地harbor仓库

    docker pull ghcr.io/fleeksoft/hbase/hbase-base:2.4.13.2
    
    # tag
    docker tag ghcr.io/fleeksoft/hbase/hbase-base:2.4.13.2 myharbor.com/bigdata/hbase-base:2.4.13.2
    
    # push
    docker push myharbor.com/bigdata/hbase-base:2.4.13.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3)修改yaml编排(非高可用HDFS)

    • hbase/values.yaml
    image:
      repository: myharbor.com/bigdata/hbase-base
      tag: 2.4.13.2
      pullPolicy: IfNotPresent
    
    ...
    
    conf:
      hadoopUserName: admin
      hbaseSite:
        hbase.rootdir:  "hdfs://hadoop-hadoop-hdfs-nn.hadoop:9000/hbase"
        hbase.zookeeper.quorum:  "zookeeper.zookeeper:2181"
    
    ...
    
    hbase:
      master:
        replicas: 2
    
      regionServer:
        replicas: 2
    
    # 禁用内部的hadoop
    hadoop:
      enabled: false
    
    # 禁用内部的zookeeper
    zookeeper:
      enabled: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • hbase/templates/hbase-configmap.yaml
    if [ {{ .Values.hadoop.enabled }} = true ];then
      NAMENODE_URL={{- printf "http://%s-hadoop-hdfs-nn:9870/index.html" .Release.Name }}
    else
      hadoop_url={{ index .Values.conf.hbaseSite "hbase.rootdir" }}
      hadoop_url=`echo $hadoop_url|awk -F '/' '{print $3}'|awk -F':' '{print $1}'`
      NAMENODE_URL=http://${hadoop_url}:9870/index.html
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4)开始部署

    # 先检查语法
    helm lint ./hbase
    
    # 开始安装
    helm install hbase ./hbase -n hbase --create-namespace
    
    • 1
    • 2
    • 3
    • 4
    • 5

    NOTES

    NAME: hbase
    LAST DEPLOYED: Sat Nov  5 15:44:14 2022
    NAMESPACE: hbase
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    1. You can get an HBASE Shell by running this command:
       kubectl exec -n hbase -it hbase-hbase-master-0 -- hbase shell
    
    2. Inspect hbase master service ports with:
       kubectl exec -n hbase describe service hbase-hbase-master
    
    3. Create a port-forward to the hbase manager UI:
       kubectl port-forward -n hbase svc/hbase-hbase-master 16010:16010
    
       Then open the ui in your browser:
    
       open http://localhost:16010
    
    4. Create a port-forward to the hbase thrift manager UI:
       kubectl port-forward -n hbase svc/hbase-hbase-master 9095:9095
    
       Then open the ui in your browser:
    
       open http://localhost:9095
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述
    HDFS
    在这里插入图片描述
    查看

    kubectl get pods,svc -n hbase -owide
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    5)测试验证

    测试主备切换,重启当前active master pod

    kubectl delete pod hbase-hbase-master-0 -n hbase
    
    • 1

    主备能正常切换
    在这里插入图片描述

    6)卸载

    helm uninstall hbase -n hbase
    # delete ns 
    kubectl delete ns hbase --force
    
    • 1
    • 2
    • 3

    三、开始编排部署(高可用 HDFS)

    1)下载chart 包

    helm repo add hbase https://itboy87.github.io/bigdata-charts/
    
    # hbase version 2.4.13
    helm pull hbase/hbase --version 0.1.7
    
    • 1
    • 2
    • 3
    • 4

    2)构建镜像

    这里是基于上面的镜像进行构建,只是把hadoop打包到镜像中,主要用的hadoop配置文件是core-site.yamlhdfs-site.yaml

    Dockerfile

    FROM myharbor.com/bigdata/hbase-base:2.4.13.2
    
    RUN mkdir -p /opt/apache
    
    ENV HADOOP_VERSION=3.3.2
    
    ADD hadoop-${HADOOP_VERSION}.tar.gz /opt/apache
    
    ENV HADOOP_HOME=/opt/apache/hadoop
    
    RUN ln -s /opt/apache/hadoop-${HADOOP_VERSION} $HADOOP_HOME
    
    ENV HADOOP_CONF_DIR=${HADOOP_HOME}/et/hadoop
    
    ENV PATH=${HADOOP_HOME}/bin:$PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    开始构建

    docker build -t myharbor.com/bigdata/hbase-hdfs-ha:2.4.13.2 . --no-cache
    
    ### 参数解释
    # -t:指定镜像名称
    # . :当前目录Dockerfile
    # -f:指定Dockerfile路径
    #  --no-cache:不缓存
    
    # 推送到harbor
    docker push myharbor.com/bigdata/hbase-hdfs-ha:2.4.13.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3)修改配置

    • hbase-hdfs-ha/values.yaml
    image:
      repository: myharbor.com/bigdata/hbase-hdfs-ha
      tag: 2.4.13.2
      pullPolicy: IfNotPresent
    
    ...
    
    conf:
      hadoopUserName: admin
      hbaseSite:
        hbase.rootdir: "hdfs://myhdfs/hbase"
        hbase.zookeeper.quorum: "zookeeper.zookeeper:2181"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • hbase-hdfs-ha/templates/hbase-configmap.yaml
    if [ {{ .Values.hadoop.enabled }} = true ];then
      NAMENODE_URL={{- printf "http://%s-hadoop-hdfs-nn:9870/index.html" .Release.Name }}
    else
      NAMENODE_URL=http://hadoop-ha-hadoop-hdfs-nn-1.hadoop-ha:9870:9870/index.html
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 先检查语法
    helm lint ./hbase-hdfs-ha
    
    # 开始安装
    helm install hbase-hdfs-ha ./hbase-hdfs-ha -n hbase-hdfs-ha --create-namespace
    
    • 1
    • 2
    • 3
    • 4
    • 5

    NOTES

    NAME: hbase-hdfs-ha
    LAST DEPLOYED: Sat Nov  5 17:23:20 2022
    NAMESPACE: hbase-hdfs-ha
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    1. You can get an HBASE Shell by running this command:
       kubectl exec -n hbase-hdfs-ha -it hbase-hdfs-ha-hbase-master-0 -- hbase shell
    
    2. Inspect hbase master service ports with:
       kubectl exec -n hbase-hdfs-ha describe service hbase-hdfs-ha-hbase-master
    
    3. Create a port-forward to the hbase manager UI:
       kubectl port-forward -n hbase-hdfs-ha svc/hbase-hdfs-ha-hbase-master 16010:16010
    
       Then open the ui in your browser:
    
       open http://localhost:16010
    
    4. Create a port-forward to the hbase thrift manager UI:
       kubectl port-forward -n hbase-hdfs-ha svc/hbase-hdfs-ha-hbase-master 9095:9095
    
       Then open the ui in your browser:
    
       open http://localhost:9095
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述
    HDFS
    在这里插入图片描述
    查看

    kubectl get pods,svc -n hbase-hdfs-ha
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    5)测试验证

    测试主备切换,重启当前active master pod

    kubectl delete pod hbase-hbase-master-0 -n hbase
    
    • 1

    主备能正常切换
    在这里插入图片描述

    6)卸载

    helm uninstall hbase-hdfs-ha -n hbase-hdfs-ha
    # delete ns 
    kubectl delete ns hbase-hdfs-ha --force
    
    • 1
    • 2
    • 3

    git 地址:https://gitee.com/hadoop-bigdata/hbase-on-k8s

    HBase on k8s 编排部署讲解与实战操作就先到这里了,有疑问的小伙伴欢迎留言或私信,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~

  • 相关阅读:
    STM32外部中断大问题
    深入了解Java 8 新特性:Stream流的实践应用(二)
    PPT文件不能编辑,除了编辑限制,还有这个原因!
    SpringBoot利用validation做参数校验
    Linux之分区【详细总结】
    鱼眼相机去畸变(图像拉直/展开/矫正)算法及实战总结
    如何在USGS下载Landsat 8-9影像(2022年版)
    Grafana 重置 admin 密码
    FFmpeg进阶: 音频滤镜大全
    针对pycharm中keras问题,求解答
  • 原文地址:https://blog.csdn.net/qq_35745940/article/details/127703687