在HBase和Parquet文件中存储数据的区别

20

我是新手,尝试理解数据持久化和检索的各种方式。我了解Parquet和HBase都是基于列的存储格式,但Parquet是面向文件的存储方式,而不像HBase是一个数据库。

我的问题是:

  1. 在什么情况下使用Parquet而不是HBase?
  2. 是否有使用情景可以将Parquet与HBase一起使用?
  3. 在执行连接操作时,Parquet是否比HBase更高效(例如通过Phoenix这样的SQL皮肤访问)?
1个回答

42

正如您在问题中已经提到的,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适用于那些更新很少且查询需要过滤、连接和聚合的用例。


1
Parquet 能否与 HBase 结合使用,有何原因或途径? - sovan
如果数据已经是parquet格式的,则必须将其引入HBase。 - Ajay Srivastava
哇,那是对一个广泛问题的高效和清晰回答!非常好。 - Juh_
应该比较Parquet和HBase的分区,不是吗?因此还有对象存储(fs、s3等)的选择? - mathtick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接