在 HBase 与 Parquet 文件中存储数据

Storing data in HBase vs Parquet files

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

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

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

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

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

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

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

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

通过以上特性对比,HBase似乎更适合需要更新且查询主要是key-value lookup的场景。涉及键范围扫描的查询在HBase中也会有更好的性能。

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