我知道HBASE是一个柱状数据库,它按列而不是按行将表的结构化数据存储到HDFS中。我知道Spark可以从HDFS读/写,并且有一些用于Spark的HBASE连接器现在也可以读写HBASE表。
问题:
1)将Spark集中在HBASE之上而不仅仅使用HBASE带来了哪些附加功能?它只取决于程序员的能力,还是有任何性能原因可以做到这一点? Spark有什么东西可以做,HBASE完全不能做到吗?
2)从上一个问题出发,何时应该在HDFS和SPARK之间添加HBASE而不是直接使用HDFS?
答案 0 :(得分:4)
我会说使用像Apache Hadoop或Apache Spark这样的分布式计算引擎基本上意味着对任何数据源进行全面扫描。这就是一次处理数据的重点。
HBase擅长挑选特定记录,而HDFS在完整扫描方面的表现肯定更高。
当您从Hadoop或Spark写入HBase时,通常不会将其写入数据库 - 这非常慢!相反,您希望直接将数据写入HFile,然后将它们批量导入。
人们发明SQL数据库的原因是因为当时HDD非常慢。最聪明的人花费了数十年的时间来发明不同类型的索引来巧妙地利用瓶颈资源(磁盘)。现在人们试图发明NoSQL - 我们喜欢关联数组,我们需要它们分布(这就是NoSQL的本质) - 它们非常简单,非常方便。但在当今世界,SSD很便宜,没有人需要数据库 - 文件系统在大多数情况下都足够好。但有一件事是它必须分发以保持分布式计算。
回答原始问题:
这是针对完全不同问题的两种不同工具。
我认为如果您使用Apache Spark进行数据分析,则必须避免使用HBase(Cassandra或任何其他数据库)。它们可用于保持聚合数据以构建报告或选择有关用户或项目的特定记录,但这是在处理后发生的。
答案 1 :(得分:4)
1)将Spark分层的最新功能是什么? HBASE而不是单独使用HBASE?它只取决于程序员 能力或有任何表现理由吗?在那儿 Spark可以做的事情和HBASE完全不能做什么?
在Splice Machine,我们使用Spark在HBase之上进行分析。 HBase没有执行引擎,spark在HBase(中级结果,关系代数等)之上提供了一个称职的执行引擎。 HBase是MVCC存储结构,Spark是执行引擎。它们是彼此的天然补充。
2)从上一个问题出发,何时应该添加HBASE HDFS和SPARK而不是直接使用HDFS?
小读,并发写/读模式,增量更新(大多数etl)
祝你好运......答案 2 :(得分:2)
Hbase是一个无SQL数据库,可以快速获取数据。虽然它是一个数据库,但它使用了大量的Hfile(类似于HDFS文件)来存储数据和低延迟访问。
因此,当Hbase满足您的数据需要被其他大数据访问的要求时,请使用Hbase。
另一方面,Spark是内存分布式计算引擎,它可以连接到hdfs,hbase,hive,postgreSQL,json文件,镶木地板文件等。 从HDFS file or Hbase读取到某些gbs时,没有显着的性能变化。之后,Hbase连接变得更快......