HBase篇(1)-特性与应用场景

2023-11-17

结束了Zookeeper篇, 接下来我们来说下Google三驾马车之一BigTable的开源实现:HBase,要讲的内容暂定如下:

这是第一篇我们先不聊技术实现,只讨论特性和场景

hbase的特点

  • 千万级高并发
  • PB级存储
  • 非结构化存储
  • 动态列,稀疏列
  • 支持二级索引
  • 强一致性,可靠性,扩展性(CP系统,可用性做了一点让步)

场景

1. 写密集型应用,每天写入量巨大,而相对读数量较小的应用

2. 不需要复杂查询条件来查询数据的应用

使用rowkey,单条记录或者小范围的查询性能不错,大范围的查询由于分布式的原因,可能在性能上有点影响。

使用HBase的过滤器的话性能比较差。

3. 不需要关联的场景,HBase为NoSQL无法支持join

4. 可靠性要求高

master支持主备热切。

regionServer宕机,region会分配给在线的机器。

数据持久化在HDFS,默认3份,HDFS保证数据可靠性。

内存的数据若丢失可以通过Wal预写日志恢复。

5. 数据量较大,而且增长量无法预估的应用

HBase支持在线扩展,即使在一段时间内数据量呈井喷式增长,也可以通过HBase横向扩展来满足功能。

应用

  • 对象存储系统

HBase MOB(Medium Object Storage),中等对象存储是hbase-2.0.0版本引入的新特性,用于解决hbase存储中等文件(0.1m~10m)性能差的问题。这个特性适合将图片、文档、PDF、小视频存储到Hbase中。

  • OLAP的存储

Kylin的底层用的是HBase的存储,看中的是它的高并发和海量存储能力。kylin构建cube的过程会产生大量的预聚合中间数据,数据膨胀率高,对数据库的存储能力有很高要求。

Phoenix是构建在HBase上的一个SQL引擎,通过phoenix可以直接调用JDBC接口操作Hbase,虽然有upsert操作,但是更多的是用在OLAP场景,缺点是非常不灵活。

  • 时序型数据

openTsDB应用,记录以及展示指标在各个时间点的数值,一般用于监控的场景,是HBase上层的一个应用。

  • 用户画像系统

动态列,稀疏列的特性。用于描述用户特征的维度数是不定的且可能会动态增长的(比如爱好,性别,住址等);不是每个特征维度都会有数据

  • 消息/订单系统

强一致性,良好的读性能,至于hbase如何保证强一致性的后面的文章会详细说明。

  • feed流系统存储

见下面的一波分析。

feed流系统

前几天据说支持八个一线明星并发出轨的微博挂了....蹭个热度,上面的系统我就不一一说了,大家应该知道微博是典型的feed流系统,那我们来详细说下feed流系统。

什么是feed流系统

feed流系统有三个概念,如图(来自云栖社区)

feed:

一个终端发布的一些内容

  • 可以是用户发布的动态消息
  • 可以是广告系统推荐的广告
  • 也可以是系统本身推荐的一些公告

比如你在微博发了条动态,那这条动态就是feed

feeds流;

feeds流就是系统实时推送的根据了一定规则排序的信息流

比如你刷了下微博,在你的首页出现了按时间排好序的一堆新消息,那这就是feed流

feeds订阅;

这个比较简单,就是你通过应用,微博,朋友圈这些,关注了某个人,那就是订阅了Ta的feeds

Feed流系统的存储

Feed流系统中需要存储的内容大致可以分为两部分,

  • 账号关系数据(比如关注列表)
  • Feed消息内容

其实有很多方案实现,但是这篇说的是HBase,那我们就说说如何用HBase实现。

关注列表

关注列表就不重点讨论了,数据特点是:列数量不定,量大,关系简单,有序,性能要求高,可靠性要求高。互相关注,单向关注这种场景用二级索引很好实现。

Feed消息

数据的特点:

1.读多写少,举个栗子,看我文章的人里面有多少人是暗中观察的,不评论不点赞自己也不发文章的,这样“暗中观察”的同学占总用户的比例是很大的。

2.数据模型简单,消息时间,消息体,发布人,订阅人,很少会有需要关联的场景

3.高并发,波峰波谷式访问,Feed流系统属于社交类系统,热点来得快去得也快。

4.持久化可靠性存储
每个人发布的内容都是需要永久存储且不能丢失的,存储量会随着时间的推移会越来越大。需要系统有很强的扩展性和可靠性。

5.消息排序,HBase的rowKey按字典序排序正好适用于这个场景。比如rowkey可以设计成这样

<userId><timestamp><feedId>

这样获取某个用户发布的消息时就可以指定时间范围来scan,性能不错的同时还能保证时间线正确。

总结

从上面feed数据的特性可以看出,HBase是适合做feed流系统的,实际生产中也确实有feed流应用是用HBase来做的存储,

我这里只是一个初步的讨论,实际上还是有很多细节要考虑的,光靠HBase来实现肯定是远远不够的,它也有很多不适用的地方,要靠开发者自己去判断,

没有最好的只有最合适的,希望对大家有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase篇(1)-特性与应用场景 的相关文章

  • 使用 RDD 中的索引扫描 Spark 中的 Hadoop 数据库表

    那么如果数据库中有一张表如下所示 Key2 DateTimeAge AAA1 XXX XXX XXX AAA2 XXX XXX XXX AAA3 XXX XXX XXX AAA4 XXX XXX XXX AAA5 XXX XXX XXX A
  • Hbase快速统计行数

    现在我实现了行计数ResultScanner像这样 for Result rs scanner next rs null rs scanner next number 如果数据达到百万次计算量很大 我想实时计算我不想使用Mapreduce
  • Java中通过忽略开始行和结束行的一部分来扫描HBase行

    我的 HBase 行如下 ABC A1 20160101 ABC A2 20160102 ABC A3 20160103 XYZ A9 20160201 从我的Java代码中我知道第一部分ABC和最后一部分20160101 我没办法得到中间
  • SparkSQL+Hive+Hbase+Hbase集成不起作用

    当我尝试连接配置单元表 正在使用 时出现错误 通过 Hbase 集成创建 在 Spark 中 我遵循的步骤 Hive表创建代码 CREATE TABLE test sample id string name string STORED BY
  • 当在HBase中反转Scan时,哪个是startKey,哪个是stopKey?

    我使用的是 HBase 0 98 它允许以相反的顺序进行扫描 这是我的代码 scan new Scan eventTimeKey nowKey scan setCaching 1 setting this to 1 since I only
  • 如何在 Hbase 中连接两个表

    Problem 我是 Hbase 新手 遇到了需要连接两个表的情况 假设我有 Employee 表和 Department 表都是在 Hbase 中创建的 通过阅读 Hbase 的实际操作 我了解到我们无法连接 Hbase 中的表 解决方案
  • 高效查询Hbase

    我使用 Java 作为查询 Hbase 的客户端 我的 Hbase 表设置如下 ROWKEY HOST EVENT 21 1465435 host hst com clicked 22 1463456 hlo wrld com dragge
  • Spark 序列化错误:当我将 Spark Stream 数据插入 HBase 时

    我对 Spark 如何在数据格式方面与 HBase 交互感到困惑 例如 当我在下面的代码片段中省略 ERROR 行时 它运行良好 但是添加该行后 我发现了与序列化问题相关的 任务不可序列化 的错误 如何更改代码 发生错误的原因是什么 我的代
  • 在 HBase 中获取一组行的最网络有效的方法是什么?

    假设我有一组行键 作为一个集合 为这组行获取特定列族的最网络有效方法是什么 Using HTable get List 获取 http hbase apache org apidocs org apache hadoop hbase cli
  • 使用Java连接到远程HBase服务

    我有一个小示例代码 我在其中尝试建立与远程 HBase 实体的连接 该代码在未安装 HBase 的 Windows 计算机上运行 我尝试连接到已安装并运行该代码的远程 Ubuntu 服务器 下面代码片段中的 IP 当然只是一个占位符 代码如
  • HBase 上的 Thrift 有性能基准吗?

    我有一个可以将大量数据写入 hbase 的系统 系统是用c 编写的 发现hbase有其他语言的thrift接口 我的问题是 HBase 上的 Thrift 有性能基准吗 与java原生api相比 最劣势是什么 我推荐最近关于这个主题的两篇博
  • security.UserGroupInformation:MR 的 PrivilegedgedActionException 错误

    每当我尝试执行映射缩减作业以写入 Hbase 表时 我都会在控制台中收到以下错误 我正在从用户帐户运行 MR 作业 错误 security UserGroupInformation PriviledgedActionException 为
  • 如何在 hbase 中存储原始数据类型并检索

    如何使用 hbase api 存储和检索原始数据类型 我的任务是在 hbase 上保存随机事件 其中包含随机生成的不可预测的数据类型 并需要在我想要的时候取回它们 有人可以帮我解决这个问题吗 因为我对 hbase 和这些东西真的很陌生 这是
  • 如何将多个 QualifierFilter 应用于 HBase 中的一行

    我们想使用两个 QualifierFilters 过滤 HBase 表上的扫描 意味着我们只想获取表中确实具有特定列 col A 的行AND 某个其他列 col B 我们当前的方法如下所示 FilterList filterList new
  • Hbase连接zookeeper错误

    环境 Ubuntu 14 04 hadoop 2 2 0 hbase 0 98 7 当我启动hadoop和hbase 单节点模式 时 都成功 我还检查了hadoop的网站8088 hbase的网站60010 jps 4507 Seconda
  • 错误:org.apache.hadoop.hbase.MasterNotRunningException:null+hbase+hadoop

    我最近用两台机器 在ubuntu上 配置了hadoop集群 到目前为止效果很好 但是当我尝试在上面的 hadoop 集群上配置 hbase 时 它 显示错误 这就是我所做的 我有两台机器 192 168 1 110 Hadoop主站 192
  • 如何确定 HBase 表的大小?有什么命令可以这样做吗?

    我的 Hbase shell 上有多个表 我想将它们复制到我的文件系统上 有些表超过 100GB 但是 我的本地文件系统中只剩下 55GB 可用空间 因此 我想知道 hbase 表的大小 以便我可以仅导出小尺寸的表 任何建议表示赞赏 谢谢
  • HBase、Hadoop:如何估计 HBase 表或 Hadoop 文件系统路径的大小?

    我有多个 HBase 表 如何估计在 java 中使用的表的大致大小 一种方法是你必须使用java客户端访问hdfs 通常在 hbase文件夹 所有表格信息 将在场 Hadoop 外壳 你可以检查使用hadoop fs du h path
  • Janusgraph 0.3.2 + HBase 1.4.9 - 无法设置 graph.timestamps

    我在 Docker 容器中运行 Janusgraph 0 3 2 并尝试使用运行 HBase 1 4 9 的 AWS EMR 集群作为存储后端 我可以运行 gremlin server sh 但如果我尝试保存某些内容 我会得到粘贴在下面的堆
  • HBase Shell 日志记录

    使用 HBase shell 时 我收到大量日志记录 包括 INFO 和 DEBUG 消息 虽然这对于学习 HBase 内部结构来说很有趣 但它非常冗长并且可能会掩盖输出 我尝试过以多种不同的方式更改日志记录级别 包括所描述的here ht

随机推荐

  • docker启动mysql

    docker pull mysql docker run itd p 3306 3306 name mysql v root mysql data var lib mysql e MYSQL ROOT PASSWORD 123456 mys
  • mysql 类型 bigint_MySQL的bigint类型

    bigint支持的数字的大小范围为 19位 存电话号码 有符号范围 9223372036854775808 到 9223372036854775807 int支持的数字范围为 10位 有符号范围 2147483648 到 214748364
  • 如何在Ubuntu20下安装Android studio

    安装jdk 安装jdk 安装Android studio 的前提是要先配置好 jdk 环境 我这里下载的是 jdk 8u251 linux x64 tar gz 解压到指定文件夹下 tar zxvf jdk 8u251 linux x64
  • epoch、batch、batch size和mini-batch的区别

    epoch batch batch size和mini batch的区别 epoch batch batch size和mini batch都是深度学习中常见的名词 初学时经常混淆 在此整理 epoch 当一个完整的数据集经过神经网络一次
  • QSettings使用中出现的问题及正确示例

    为什么80 的码农都做不了架构师 gt gt gt 背景 使用QSettings读写配置文件 示例及需要注意的问题 写配置文件 QSettings settings Option ini QSettings IniFormat settin
  • [900]mysql字符串数字互转

    文章目录 字符串转数字 CAST 函数转化为整数 CAST 函数转化为浮点数 CONVERT方法转化为整数 CONVERT方法转化为浮点数 数字转为字符串 CONVERT方法转化为字符串 字符串转数字 最简单的方式就是直接在字符串后面 0
  • #systemverilog# 之 event region 和 timeslot 仿真调度(九)assign 赋值 和 always 组合赋值的调度区别

    有时候 我们会发现一个问题 举个最简单的例子 比如将两个信号进行简单的异或运算 该逻辑运算 我们可以使用 assign 数据流建模完成 也可以使用always 组合逻辑过程赋值语句实现 那仿真工具在对它进行调度的时候 有什么区别吗 不慌 今
  • Ubuntu安装可视化界面ElasticSearch-head插件

    1 下载地址 GitHub mobz elasticsearch head A web front end for an elastic search cluster 上传并解压 root zq virtual machine home e
  • 一次url请求的过程

    1 HTTP协议 超文本传输协议 Hyper Text Transfer Protocol HTTP 一个简单的请求 响应协议 指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应 2 域名解析 DNS Domain Name Sy
  • 如何开启bios虚拟化

    要开启 BIOS 虚拟化 首先需要进入 BIOS 设置 通常可以在电脑启动时按下 F2 或 Del 键进入 具体操作可能因电脑品牌和型号而异 在 BIOS 设置中 需要找到 虚拟化支持 或 硬件虚拟化 选项 并将其设置为 开启 有些电脑可能
  • 货币的教训——汇率与货币系列评论

    这本书中介绍了中国的人民币的具体的流转形式 就是不知到底准确否 2013 9 29
  • numpy广播机制

    NumPy的广播机制 文章目录 NumPy的广播机制 Broadcast 最简单的广播机制 稍微复杂的广播机制 广播机制到底做了什么 一个典型的错误案例 一个正确的经典示例 一种更便捷的计算方式 Broadcast 广播是numpy对不同形
  • 【计算机视觉

    文章目录 一 分割 语义相关 12篇 1 1 UniSeg A Unified Multi Modal LiDAR Segmentation Network and the OpenPCSeg Codebase 1 2 Learning S
  • IDEA导入eclipse项目

    第一步 File gt new gt Project from Existing Sources 导入已存在的项目 并选择要导入的文件或目录 第二步 选择eclipse选项 第三步 配置jdk 导入完成了 项目目录如图示 gt 开始配置mo
  • PCB 过孔简介

    做过 PCB 设计的最先了解的应该就是过孔了 因为有过孔的存在我们才能做出多层板 过孔应该是 PCB 中最简单的部分了 也是最容易被我们忽略的地方 常见的过孔分为两大类 1 用作各层之间的电气连接 2 用作器件的固定或定位 一 过孔的介绍
  • 如何判断三点共线

    如何判断三点共线 在二维坐标系中 给出三点A x1 y1 B x2 y2 C x3 y3 的坐标 判断三点共线的条件是 实质是判断有三个点组成的三角形面积为0 神爱世人 甚至将他的独生子 耶稣 赐给他们 叫一切信他的 不至灭亡 反得永生 圣
  • 智能制造面临的主要问题

    随着工业4 0的发展 工业互联网 智能制造 智能工厂等概念正在兴起 但从本质上讲 制造业的目标是利用大数据 人工智能 互联网等先进技术改造制造业 使制造业成为定制体验 创新交付的竞争核心 在逐步实施工业4 0和中国制造2025的背景下 国内
  • R语言-引用函数对象作为参数

    问题描述 如何在在R的函数中通过字符串调用别的函数 以下面为例子 testFun lt function Fun x lt 1 100 Fun x 解法 这个问题没什么其实很笨 就是想记录一下 1 直接调用 testFun lt funct
  • 文本后缀“SCRIPT_EXP”无效;未找到文文本运算符或文本运算符模板“operator ““““SCRIPT_EXP”

    今天下载了一份源码 然后在编译的时候出现了这个问题 我查阅了相关资料 解决方法有两个 下面列举一下 1 字符文件编码 Visual Studio编译器 首先选中代码当前页 然后文件 gt 打开 高级保存选项 选中GB2312 确定 2 空格
  • HBase篇(1)-特性与应用场景

    结束了Zookeeper篇 接下来我们来说下Google三驾马车之一BigTable的开源实现 HBase 要讲的内容暂定如下 这是第一篇我们先不聊技术实现 只讨论特性和场景 hbase的特点 千万级高并发 PB级存储 非结构化存储 动态列