在 HBase 与 Parquet 文件中存储数据

Posted

技术标签:

【中文标题】在 HBase 与 Parquet 文件中存储数据【英文标题】:Storing data in HBase vs Parquet files 【发布时间】:2019-02-13 23:39:33 【问题描述】:

我是大数据的新手,正在尝试了解持久化和检索数据的各种方式。 我知道 Parquet 和 HBase 都是面向列的存储格式,但 Parquet 是面向文件的存储,而不是与 HBase 不同的数据库。 我的问题是:

    用 Parquet 代替 HBase 的用例是什么 是否有 Parquet 可以与 HBase 一起使用的用例。 在执行连接的情况下,Parquet 的性能将优于 HBase(比如说,通过像 Phoenix 这样的 SQL 皮肤访问)?

【问题讨论】:

【参考方案1】:

正如您在问题中已经说过的,parquet 是一种存储,而 HBase 是存储(HDFS)+查询引擎(API/shell)所以应该在 parquet+Impala/Hive/Spark 和 HBase 之间进行有效的比较。以下是主要区别 -

1) 磁盘空间 - 与 HBase 相比,Parquet 占用的磁盘空间更少。 Parquet 编码比 HBase 中的块压缩节省更多空间。

2) 数据摄取 - parquet 中的数据摄取比 HBase 更有效。一个简单的原因可能是第 1 点。在 parquet 的情况下,需要在磁盘上写入更少的数据。

3) 在键上查找记录 - HBase 更快,因为这是一个键值存储,而 parquet 不是。未来版本将支持 parquet 中的索引。

4) 过滤器和其他扫描查询 - 由于 parquet 存储了有关存储在行组中的记录的更多信息,因此它可以在扫描数据时跳过大量记录。这就是原因,它比 HBase 快。

5) 更新记录 - HBase 提供记录更新,而这在 parquet 中可能会出现问题,因为 parquet 文件需要重写。精心设计架构和分区可能会改进更新,但它无法与 HBase 相提并论。

通过对比上述特性,HBase 似乎更适合需要更新且查询主要涉及键值查找的情况。涉及键范围扫描的查询在 HBase 中也会有更好的性能。

Parquet 适用于更新很少且查询涉及过滤器、连接和聚合的用例。

【讨论】:

Parquet 可以和 HBase 一起使用有什么理由或方法吗? 没有。如果数据已经是 parquet 格式,则必须在 HBase 中摄取。 哇,这是对一个广泛问题的有效而明确的答案!很不错 真的应该比较 parquet 与 hbase 的分区吗?那么还有对象存储(fs、s3等)的选择吗?

以上是关于在 HBase 与 Parquet 文件中存储数据的主要内容,如果未能解决你的问题,请参考以下文章

HBase 文件读写过程描述

如何将 HBase 表以 Parquet 格式移动到 HDFS?

Spark Kudu 结合

hive最早在哪个版本起支持Parquet格式

parquet和orc

使用存储在 s3 中的 parquet 文件在 Greenplum 中创建外部表