为什么 HBase 的全扫描和聚合比 parquet 慢,尽管它也是列式数据库?
Why is HBase full scan and aggregation slower than parquet, despite of also being columnar database?
我一直在尝试将 "right" 技术用于 360 度客户应用程序,它需要:
- 宽列 table,每个客户占一行,有很多列(比如 > 1000)
- 我们每天有大约 20 个批量更新分析作业 运行。每个分析作业针对所有行查询和更新一小组列。它包括汇总用于报告的数据,以及为机器学习算法加载/保存数据。
- 我们在多个列中更新客户信息,每天 <= 100 万行。更新工作负载分散在各个工作时间。我们有超过 2 亿行。
我试过使用Hbase,第1点和第3点都满足了。但我发现在 HBase 上进行分析 (load/save/aggregate) 非常慢,比使用 Parquet 慢 10 倍。不明白为什么,Parquet和Hbase都是列式DB,我们把HBase集群的工作负载分散得很好("requests per region"这么说)。
有什么建议吗?我是不是用错了工具?
both Parquet and Hbase are columnar DBs
这个假设是错误的:
- Parquet 不是数据库。
- HBase 不是列式数据库。它经常被认为是一个,但这是错误的。
HFile
不是 柱状(Parquet 是 )。
HBase is painfully slow, it can be 10x slower than doing with Parquet
HBase 完全扫描通常比等效的 HDFS 原始文件扫描慢得多,因为 HBase 针对随机访问模式进行了优化。你没有具体说明你是如何扫描 table - TableSnapshotInputFileFormat
比原始的 TableInputFormat
快得多,但仍然比原始 HDFS 文件扫描慢。
我一直在尝试将 "right" 技术用于 360 度客户应用程序,它需要:
- 宽列 table,每个客户占一行,有很多列(比如 > 1000)
- 我们每天有大约 20 个批量更新分析作业 运行。每个分析作业针对所有行查询和更新一小组列。它包括汇总用于报告的数据,以及为机器学习算法加载/保存数据。
- 我们在多个列中更新客户信息,每天 <= 100 万行。更新工作负载分散在各个工作时间。我们有超过 2 亿行。
我试过使用Hbase,第1点和第3点都满足了。但我发现在 HBase 上进行分析 (load/save/aggregate) 非常慢,比使用 Parquet 慢 10 倍。不明白为什么,Parquet和Hbase都是列式DB,我们把HBase集群的工作负载分散得很好("requests per region"这么说)。
有什么建议吗?我是不是用错了工具?
both Parquet and Hbase are columnar DBs
这个假设是错误的:
- Parquet 不是数据库。
- HBase 不是列式数据库。它经常被认为是一个,但这是错误的。
HFile
不是 柱状(Parquet 是 )。
HBase is painfully slow, it can be 10x slower than doing with Parquet
HBase 完全扫描通常比等效的 HDFS 原始文件扫描慢得多,因为 HBase 针对随机访问模式进行了优化。你没有具体说明你是如何扫描 table - TableSnapshotInputFileFormat
比原始的 TableInputFormat
快得多,但仍然比原始 HDFS 文件扫描慢。