IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据组件之Hbase(整体分享) -> 正文阅读

[大数据]大数据组件之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

tar -zxvf hbase-2.1.8-bin.tar.gz

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

cd /software/hbase2/conf

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位置

???备份个数,集群节点

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

<configuration>

????<!-- ?此目录regionserver共享的目录,用来持久存储HBase的数据,其默认值为:${hbase.tmp.dir}/hbase,如果不修改默认值,数据将会在集群重启时丢失。 -->

????<property>

????????<name>hbase.rootdir</name>

????????<!-- 设置Hadoop master-->

????????<value>hdfs://hadoop1:9000/hbase</value>

????</property>

????<!-- 设置hbase集群为分布式集群 -->

????<property>

????????<name>hbase.cluster.distributed</name>

????????<value>true</value>

????</property>

????

????<!-- 设置zookeeper集群,用英文逗号分隔 -->

????<property>

????????<name>hbase.zookeeper.quorum</name>

????????<value>hadoop1:2181,hadoop1:2181,hadoop3:2181</value>

????</property>

????<!-- hbase备份的副本数,不能超过datanode的节点数。

?????????hbase的数据备份数需要再hbase-site.xml配置文件中单独设置,否则hbase写入的数据regionServer只会保存一份! -->

????<property>

????????<name>dfs.replication</name>

????????<value>2</value>

????</property>

????<!-- Zookeeper元数据的存储目录,需要和Zookeeper的zoo.cfg 配置的一致 -->

????<property>

????????<name>hbase.zookeeper.property.dataDir</name>

????????<value>/software/zookeeper/zkData</value>

????</property>

????<!-- 指定HBase Master Web页面访问端口,默认端口号16010 -->

????<property>

????????<name>hbase.master.info.port</name>

????????<value>16010</value>

????</property>

????<!-- 指定HBase RegionServer Web页面访问端口,默认端口号16030 -->

????????<property>

????????????????<name>hbase.regionserver.info.port</name>

????????????????<value>16030</value>

????????</property>

????<!-- 解决启动HMaster无法初始化WAL的问题 -->

????<property>

????????<name>hbase.unsafe.stream.capability.enforce</name>

????????<value>false</value>

????</property>

????<property>

??????<name>hbase.wal.provider</name>

??????<value>filesystem</value>

????</property>

</configuration>

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

配置从节点regionservers

vi regionservers

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

localhost

hadoop2

hadoop3

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

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

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

sh /ssync /software/hbase2/

sh /ssync /etc/profile

启动hbase

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

cd /software/hbase2/bin

./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查询

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:04:35  更:2022-09-15 02:04:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:56:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码