码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 大数据组件之Hbase(待补充)


    我记得我刚工作那年19年的春天,对hbase还是比较恐惧的,因为里面存储的是字节,后来我专门去当讲师,去学习,克服了恐惧,了解了原理,再后来在安全公司专门用hbase对他企业级的有了更多的理解。所以作为我最喜欢的库之一,写了很多文档,但是没有一个汇总,这篇就是我对hbase的汇总吧。

    作为一个组内分享使用,目的是,让同事们,看完之后能知道Hbase的前因后果,以及使用场景,选型时的瓶颈,以及能够使用。

    根据实际业务场景来,来了问题,先调研(选型组件),瓶颈,熟悉组件原理,安装与使用组件。

    目录

    1.hbase和其他组件的对比

    2.hbase的瓶颈

    3.hbase内部构造

    4.hbase搭建

    修改配置文件env.sh

    修改配置文件site.xml

    配置从节点regionservers

    分发到其他机器,环境变量,hbase文件

    启动hbase

    5.hbase使用


    1.hbase和其他组件的对比

    大数据的常用数据库,hbase,hive,kudu,clickhouse关系数据库我就不对比了,因为查询速度不是一量级的。

    hive是基于mapreduce的,数据存储在hdfs上,能和hbase关联做映射,但是查询基于mr和spark速度最慢,和presto连接后,查询速度变快。但是本质上这个库是不快的,并且不支持随机读写,比如我要改数据就不行,3.0后移除了。最稳定,批处理能力强。

    kudu支持随机读写,能读数据也能改数据,批处理能力不及hive,和impala一起查询,经常把内存搞崩,查询速度比较快。支持更新操作,和impala一起查询,很方便。适合经常更新的数据库,对实时性要求也高的。

    hbase,查询速度非常快,2亿条数据取1条只要1秒,支持随机读写,查询只能根据rowkey查询,集成phoenix后,支持sql查询,但是影响速度,数据可选择hdfs或者本地磁盘。适合单一业务的存储,不适合复杂业务。尤其不适合各种关联的。

    clickhouse,查询速度非常快,由于单条查询,利用整机的cpu,对于多条查询,资源吃紧,不太适合当作接口提供。单表查询非常快。适合作为宽表。操作方便,自带查询。其他的3个组件不关联其他的组件,简直是难用。

    --------------------

    名称                    读                  写                   资源消耗                资源维护         缺点

    hive                  慢                  慢                     非常低(稳定)          中                 速度慢

    hbase               快                 快(300w/s)        中                             中              不适合复杂查询

    kudu                 快                 快                      很高                         中               资源消耗大

    clickhouse        快                 快                      高                             低              不适合多表查询

    优点及使用场景

    hive:数据仓库的构建,因为稳定,适合晚上跑全量离线业务

    hbase:适合实时场景比较高,读写量比较大,查询结构不是很复杂的数据,存ods或根据key的简单业务,如我想立马获得某个id的数据,或者某个时间点的数据,可以把他想象成一个超级大的hashMap使用。

    kudu:可作为mysql的升级替代品,查询消耗内存较高,不是很稳定

    clickhouse:作为宽表的查询使用,适合实时sql分析,比如我要每几个小时,更新一次全量的分析数据,那可以先用clickhouse先sql做探测,sql写好了,用hive去写定时任务去跑。如果用clickhouse去跑,那可能当时clickhouse跑的时候,其他的服务没有资源,会被影响。也适合只要一次的数据,比如需要测试这个方案可不可行,先统计下某次的数据。

    对比:

    Hbase、Kudu和ClickHouse横向对比V2.0_陈舟的舟的博客-CSDN博客_clickhouse kudu

    2.hbase的瓶颈

    写入瓶颈

    之前多线程开了2000个线程跑,发现他的一台hbase机器的瓶颈是300w左右,4台机器在跑,每台机器500个线程。每个线程处理1w*20w的数据。超过300w后的数据就会出现连接问题,然后重试。

    读取瓶颈

    目前没有发现读取速度的问题,单个读取和scan(rowstart-rowend)获取非常快。全表的扫描速度,计数测试,并不快。

    多线程hbase插入(千亿级)_我要用代码向我喜欢的女孩表白的博客-CSDN博客_java多线程hbase

    3.hbase内部构造

    首先先说最重要的,hbase的rowkey。

    hbase是基于key查询的,那么他是怎么进行key查询的,首先他用了ascii编码,将key进行了排序,所以你看到的是这样的。

    并且字段内容中文的,被16进制编码

    key是唯一的,设计的原则,hbase会把连续性的数据存在一起,key的设计尽量分散,否则可能将某年的数据全部存到了一个节点中。如果查询某年的数据,如果使用scan,速度会更快,如果使用filter则会变慢。如果开头不是时间,那么只能用filter,但是能解决分散问题,但是get何时都不会慢。关于批量扫描,权衡业务设计rowkey

    key是64字节,不能过长。

    value,存储值,value是一个列簇,为什么叫列簇,因为一个value能存多个列,比如上图的value就是info。info中的列名创建了一个name。

    cs相当于列簇,一个列簇里面可以有很多内容,我们通常把一块独立的业务数据,存储在某个列簇中,这样想获得某块业务的数据就直接可以获取,但是获取多表关联类似的业务,不是hbase的使用范围,如果需要这样做,请结合其他数据库,建立映射关系,在进入hbase中查询。

    以上就是hbase的主要内容

    HBASE快的原因是,可以在查询的适合将数据定位到指定的regionServer中,在到指定的region中

    更多内容请参考:

    Hbase史上最详细原理总结_二十同学的博客-CSDN博客_hbase原理

    4.hbase搭建

    Hbase版本2.10(cdh6.3.2保持一致)

    还没下好,暂时用的国内资源2.18,下的快,安装如出一辙

    绿色部分改成自己对应的内容

    hbase的各台机器,时间必须保持一致,当超出一定范围,hbase会宕机

    下载地址:

    Index of /dist/hbase/2.1.0

    hbase数据存储,存储在hdfs,hbase集群管理依赖于zookeeper

    注:hbase存储当然也可以磁盘,并且内部有zookeeper,为了方便备份,我们使用hdfs,为了方便管理和容错,我们使用zookeeper,zookeeper外部集群可靠性强

    一般大数据,如spark这些都依赖zookeeper,大数据的很多组件集群都依赖zookeeper,很多(hive,hbase)计算的存储也都依赖于hadoop

    Zookeeper集群搭建比较简单(3.4.x)

    zookeeper搭建_我要用代码向我喜欢的女孩表白的博客-CSDN博客

    hadoop搭建(3.x)

    配置单节点hadoop 边搭边写(含hadoop集群搭建)_我要用代码向我喜欢的女孩表白的博客-CSDN博客

     

     

    【上传】到服务端某个目录,并且【解压】

    这里上传的目录是/software

    1. tar -zxvf hbase-2.1.8-bin.tar.gz
    2. mv hbase-2.1.8 hbase2

    配置环境变量

    vi /etc/profile

    修改内容如下

    ============

    export HBASE_HOME=/software/hbase2

    export PATH=$PATH:$HBASE_HOME/bin

    ============

    更新环境变量

    source /etc/profile

    这个时候,就可以用单节点的hbase了,输入hbase shell即可进入hbase客户端

    修改配置文件env.sh

    1. cd /software/hbase2/conf
    2. vi hbase-env.sh

    ============

    #指定java环境的位置

    export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera

    #关闭自带的zk

    export HBASE_MANAGES_ZK=false

    ============   

    修改配置文件site.xml

    vi hbase-site.xml

       指定,hdfs的存储目录,外部zk位置

       备份个数,集群节点

    ==============

        

        

            hbase.rootdir

            

            hdfs://hadoop1:9000/hbase

        

        

        

            hbase.cluster.distributed

            true

        

        

        

        

            hbase.zookeeper.quorum

            hadoop1:2181,hadoop1:2181,hadoop3:2181

        

        

        

            dfs.replication

            2

        

        

        

            hbase.zookeeper.property.dataDir

            /software/zookeeper/zkData

        

        

        

            hbase.master.info.port

            16010

        

        

            

                    hbase.regionserver.info.port

                    16030

            

        

        

            hbase.unsafe.stream.capability.enforce

            false

        

        

          hbase.wal.provider

          filesystem

        

    =====================

    配置从节点regionservers

    vi regionservers

    =============

    localhost

    hadoop2

    hadoop3

    =============

    分发到其他机器,环境变量,hbase文件

    我写的分发脚本,你也可以scp

    1. sh /ssync /software/hbase2/
    2. sh /ssync /etc/profile

    启动hbase

    每个节点都启动zk(集群),然后每个节点都启动hbase,那么当一个hmaster宕机后,则会自动替换

    1. cd /software/hbase2/bin
    2. ./start-hbase.sh

    结果查看:

    输入jps,查看hadoop1结果

    hadoop2和hadoop3

    5.hbase使用

    shell基本命令

    Hbase基本(常用)命令-------长文(适合学习全局)_我要用代码向我喜欢的女孩表白的博客-CSDN博客

    hbase shell Hbase模糊查询id不根据时间_我要用代码向我喜欢的女孩表白的博客-CSDN博客

    java

    Hbase JavaApi 批量获取数据(scan)和插入代码(put) 代码_我要用代码向我喜欢的女孩表白的博客-CSDN博客_hbase 批量scan

    hbase java Api Scan Limit ----小短文(含分页实现思路)_我要用代码向我喜欢的女孩表白的博客-CSDN博客_hbase limit

    多线程hbase插入(千亿级)_我要用代码向我喜欢的女孩表白的博客-CSDN博客_java多线程hbase

    python使用happybase

    python操作Hbase导入导出_我要用代码向我喜欢的女孩表白的博客-CSDN博客

    Python连接Hbase并且查循数据(自用)_我要用代码向我喜欢的女孩表白的博客-CSDN博客_python连接hbase查询

  • 相关阅读:
    工厂从自动化到数字孪生,图扑能干什么?
    为什么学校互联网专业教的只是出社会都没用?
    微信H5跳转微信小程序
    设计原则四:里氏替换原则
    C语言每日一题(6):求五位数中的变种水仙花数
    C++指针基本概念及函数指针详解
    我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")
    PyTorch框架中torch、torchvision、torchaudio与python之间的版本对应关系(9月最新版)
    集成学习实战:基于集成学习方法完成鸢尾花卉品种预测详细教程
    江门車馬炮汽车金融中心 11月11日开张
  • 原文地址:https://blog.csdn.net/qq_38403590/article/details/126785214
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号