查看原文
其他

探究HDFS、Hive和HBase:区别、联系及应用场景解析

ruby ruby的数据漫谈
2024-09-27
摘要:在Hadoop生态系统中,HDFS(Hadoop Distributed File System)、Hive和HBase是核心组件,它们各自扮演着不同的角色,并在大数据处理和存储方面发挥重要作用。但是在实际使用场景下,有些人对这三个组件的应用场景会存在混淆的时候,例如,HIVE是用来存储数据的? 为什么Hbase存储数据不能用来离线跑批?为什么hive可以离线跑批,不适合实时查询??本文就这些问题,将对这三个组件进行逐一介绍,包括它们的主要作用、相互关系以及应用场景。


  • 三个组件各自作用‍‍
  • 相互关系
  • 应用场景




01

HDFS、Hive、Hbase的组件的各自作用


HDFS‍


HDFS是Hadoop生态系统的分布式文件系统,用于存储海量数据,并通过分布式方式实现高容错性。HDFS采用横向扩展的方式,将文件切分成多个块,分布在集群的多个节点上。HDFS的主要作用是提供高效、可靠的分布式存储,适用于大数据存储和批量处理场景。HDFS适用于存储大量结构化和非结构化数据,如网站日志、传感器数据等。


Hive


Hive是一个基于Hadoop的数据仓库工具,提供了类似于SQL的查询语言(HiveQL),将查询转化为MapReduce任务执行在Hadoop集群上。它将存储在HDFS中结构化的数据映射为数据库、表和分区的概念,使得非技术人员可以方便地进行数据查询和分析。HDFS中存储的数据是文件形式,不是数据库形式,不能直接进行SQL分析。


HBase‍‍‍

HBase是一个面向列的分布式数据库,运行在Hadoop集群之上。它提供了高可靠性、高性能的随机实时读写操作,并适合处理超大规模的非结构化和半结构化数据。Hbase一个分布式的基于列式存储的数据库,基于Hadoop的hdfs存储,zookeeper进行管理。Hbase适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。基于的表包含rowkey,时间戳,和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本.场景的场景是HBase可以用于存储用户行为数据和实时推荐。HBase适合存储和检索大量实时生成的日志数据。



02

三个组件的相互联系



Hive和HBase都是建立在HDFS之上的,可以直接访问HDFS中的数据。Hive通过类SQL语法将查询转化为MapReduce任务访问HDFS里面的数据文件进行查询处理。HBase则是一个独立的分布式数据库,通过HBase客户端直接与HBase进行交互。Hbases的数据文件也是存在HDFS上,只不过它存储数据格式是按照列式存储的。‍‍‍‍‍‍‍‍‍


hdfs里面的结构化数据文件里面存储的类似我们的表的数据,只不过数据是按照指定的格式存储在txt这种类似文件的文本文件中,但是hive可以把文件映射成表,直接访问数据。

而列式存储的特点如下图所示,是它的存储文件的形式,即按照rowkey 来存储,每一行的列不固定,可能随机变动。


  • Name Space

命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。

  • Row

HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。

  • Column

HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。

  • Time Stamp

用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。


以上就是hive 和hbase的区别,主要是存储数据格式、存储的内容,以及访问数据的方式不通。



03

组件的应用场景上的区别


摘要中提到为什么hive 可以作为离线跑批,但是不适合做实时查询,而hbase可以作为实时查询,为什么不能作为离线跑批了?


主要有两个方面的原因


1、hive访问的HDFS的里面的结构化数据,并没有做其它特殊的处理,依赖mapreduce的分布式作业能力,所以它可以作为跑批处理,就是大批量的数据处理。对于时延要求并不是很高。而hbase 访问数据是通过RowKey快速检索到需要的数据。所以访问数据很快,适合做实时数据检索和查询。


2、hive 里面提供hivesql语言,支持聚会,关联,复杂过滤,join等复杂的逻辑计算,适合用来做跑批的业务逻辑计算和处理。而hbase 没有聚合,关联,复杂的嵌套查询的语法,他只能处理简单的查询和过滤。语法上不适合做跑批处理。‍‍‍‍‍‍‍‍‍‍‍‍‍


类如:


基于行键的查询:

  1. 单行查询:

GET 'table_name', 'row_key'
  1. 范围查询:

SCAN 'table_name', {STARTROW => 'start_row_key', ENDROW => 'end_row_key'}
  1. 前缀查询:

SCAN 'table_name', {FILTER => "PrefixFilter('prefix_value')"}

列族和列修饰符的查询:

  1. 列族查询:

SCAN 'table_name', {COLUMNS => 'column_family'}
  1. 列修饰符查询:

SCAN 'table_name', {COLUMNS => 'column_family:column_qualifier'}

过滤器查询:

  1. 单一列值过滤器:

SCAN 'table_name', {FILTER => "ValueFilter(=, 'binary:value')"}
  1. 列前缀过滤器:

SCAN 'table_name', {FILTER => "ColumnPrefixFilter('prefix_value')"}
  1. 包含子串过滤器:

SCAN 'table_name', {FILTER => "QualifierFilter(=, 'substring:substring_value')"}

版本查询:

  1. 指定版本数:

GET 'table_name', {VERSIONS => N}
  1. 时间戳范围查询:

SCAN 'table_name', {TIMERANGE => [start_timestamp, end_timestamp]}


这些是Hbase 的查询语法,都是简单的查询和过滤,对于非结构化,例如日志,用户行为数据非常合适,但是如果要进行两表的关联查询,则特别难以处理。‍
例如:简单的多表连接查询,在 HBase 中,并不像关系型数据库那样支持直接的多表连接查询。HBase 是基于列族的 NoSQL 数据库,而不是传统的行式数据库。在 HBase 中,数据是以行键(row key)的方式存储的,而不是通过外键和关联关系来连接不同的表。
如果你需要获取多个表之间的关联数据,可以通过编写代码逻辑来实现。下面是一个示例,说明如何在 HBase 中模拟多表连接查询的过程:
假设我们有两个表:表A和表B,它们之间通过一个共同的列数据进行关联。
1、首先,你需要编写代码来扫描表A中的数据,并根据共同的列数据来获取对应的行键(row key)。
2、然后,使用获取到的行键,在表B中进行相应的查找操作,获取关联数据。
3、最后,整合表A和表B中的数据,返回满足条件的记录。
需要注意的是,这种方式在处理大规模数据时可能会存在性能问题,因为需要通过程序逐行扫描和匹配数据。(在数据设计的时候我们都是非常避免全表扫描的业务过程,会非常耗时,例如做两表比对的业务场景,两张表对比就是一张表对另外一张全表扫描,5000万的两张表都要跑一个月的时间,非常非常的耗时。)

正式因为HBASE 和hive 的里面文件存储格式不一样,以及配合的查询语法不一样导致他们的应用场景完全不一样。Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决海量数据处理和计算问题,一般是配合使用。

hive应用场景:

  • 数据仓库和报表分析: Hive适用于处理结构化数据,用于构建数据仓库和生成报表。

hbase应用场景:

  • 互联网广告和推荐系统: HBase可以用于存储用户行为数据和实时推荐。

  • 日志处理和监控系统: HBase适合存储和检索大量实时生成的日志数据。


hive 适合做结构化的数据跑批处理,不适合做实时交互查询,hbase 适合做高并发高吞吐的写入以及检索查询,不适合复杂的查询。‍‍‍‍‍‍




欢迎加入【数据行业交流群】社群,长按以下二维码加入专业微信群,商务合作加微信备注商务合作




往期历史热门文章:

基于DataOps的数据开发治理:实现数据流程的自动化和规范化

数据平台:湖仓一体、流批一体、存算分离的核心问题及原因解析

数据治理体系该怎么建设?

实时数仓&流批一体技术发展趋势

数据仓库、数据中台、大数据平台的关系?

数字化转型如何促进业务的发展

数据中台中的核心概念解析

数据治理中的数据标准的作用?

全面数字化转型:打造全新营销模式



继续滑动看下一个
ruby的数据漫谈
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存