使用 HBASE 的 Spark 与使用 HDFS 的 Spark

Spark with HBASE vs Spark with HDFS

我知道HBASE是一个列式数据库,将表的结构化数据按列而不是按行存储到HDFS中。我知道 Spark 可以 read/write 从 HDFS 并且有一些用于 Spark 的 HBASE 连接器现在也可以读写 HBASE 表。

问题:

1) 在 HBASE 之上分层 Spark 而不是单独使用 HBASE 带来了哪些附加功能?这仅取决于程序员的能力,或者是否有任何性能理由这样做?有没有 Spark 可以做而 HBASE 不能做的事情?

2) 源于上一个问题,什么时候应该在 HDFS 和 SPARK 之间添加 HBASE 而不是直接使用 HDFS?

Hbase 是一个没有 SQL 的数据库,可以很好地快速获取数据。虽然它是一个数据库,但它使用大量的 Hfile(类似于 HDFS 文件)来存储您的数据和低延迟访问。

所以当你的数据需要被其他大数据访问时,使用Hbase。

另一方面,Spark 是内存分布式计算引擎,可以连接到 hdfs、hbase、hive、postgreSQL、json 文件、parquet 文件等。 从 HDFS file or Hbase 读取到一些 gbs 时没有明显的性能变化。之后 Hbase 连接变得更快....

我想说的是,使用 Apache Hadoop 或 Apache Spark 等分布式计算引擎基本上意味着对任何数据源进行全面扫描。这就是一次处理所有数据的全部意义所在。

HBase 擅长挑选特定的记录,而 HDFS 在完全扫描方面肯定性能更高。

当您从 Hadoop 或 Spark 写入 HBase 时,通常不会将其写入数据库 - 它非常慢!相反,您想直接将数据写入 HFiles,然后将它们批量导入。

人们发明 SQL 数据库的原因是当时 HDD 非常非常慢。最聪明的人花了几十年的时间发明了各种索引来巧妙地利用瓶颈资源(磁盘)。现在人们试图发明 NoSQL - 我们喜欢关联数组并且我们需要它们是分布式的(这就是 NoSQL 的本质) - 它们非常简单和方便。但在当今世界,SSD 便宜,没有人需要数据库——在大多数情况下,文件系统就足够了。不过,有一件事是它必须分布式以保持分布式计算。

回答原始问题:

  1. 这是针对完全不同问题的两种不同工具。

  2. 我认为如果使用Apache Spark 进行数据分析,则必须避免使用HBase(Cassandra 或任何其他数据库)。它们可用于保留聚合数据以构建报告或选择有关用户或项目的特定记录,但这是在处理之后发生的。

1) What are the added capabilities brought by layering Spark on top of HBASE instead of using HBASE solely? It depends only on programmer capabilities or is there any performance reason to do that? Are there things Spark can do and HBASE solely can't do?

在 Splice Machine,我们使用 Spark 在 HBase 之上进行分析。 HBase 没有执行引擎,spark 在 HBase 之上提供了一个有效的执行引擎(中间结果、关系代数等)。 HBase是MVCC存储结构,Spark是执行引擎。他们是天然的互补。

2) Stemming from previous question, when you should add HBASE between HDFS and SPARK instead of using directly HDFS?

小读取,并发 write/read 模式,增量更新(大多数 etl)

祝你好运...