BAR*_*BAR 3 hadoop scala greenplum apache-spark hawq
我在Greenplum DB中有TB结构化数据.我需要在我的数据上运行基本上是MapReduce的作业.
我发现自己至少重新实现了MapReduce的功能,以便这些数据适合内存(以流式方式).
然后我决定到别处寻找更完整的解决方案.
我看了Pivotal HD + Spark,因为我使用Scala和Spark基准测试是令人惊叹的因素.但我相信这背后的数据存储HDFS的效率将低于Greenplum.(请注意"我相信".我很高兴知道我错了,但请提供一些证据.)
因此,为了与Greenplum存储层保持一致,我查看了Pivotal的HAWQ,它基本上是在Greenplum上使用SQL的Hadoop.
这种方法有很多功能丢失.主要是使用Spark.
或者是否更好地使用内置的Greenplum功能?
所以我处在不知道哪条路最好的十字路口.我想要很好地处理适合关系数据库模型的TB数据,我希望Spark和MapReduce的好处.
我要求太多了吗?
小智 6
在发布我的答案之前,我想根据我的理解(以确保我正确理解问题)重新解释这个问题,如下所示:
你有很多适合关系数据库模型的TB数据,并且你想在大多数时候使用SQL查询数据(我认为这就是你把它放到Greenplum DB中的原因),但有时你想使用Spark和MapReduce来访问数据因为它们的灵活性.
如果我的理解是正确的,我强烈建议您尝试使用HAWQ.HAWQ的一些功能使它完全符合您的要求(注意:我可能有偏见,因为我是HAWQ的开发人员).
首先,HAWQ是Hadoop数据库上的SQL,这意味着它使用HDFS作为其数据存储.HAWQ不与Greenplum DB存储层保持一致.
其次,很难反驳说"HDFS的效率低于Greenplum".但性能差异并不像你想象的那么重要.我们已经对访问HDFS数据进行了一些优化.一个例子是,如果我们发现一个数据块存储在本地,我们直接从磁盘读取它而不是通过普通的RPC调用.
第三,HAWQ有一个名为HAWQ InputFormat的功能,用于MapReduce(Greenplum DB没有).使用该功能,您可以编写Spark和MapReduce代码,以便轻松高效地访问HAWQ数据.与Hadoop提供的DBInputFormat不同(这将使主服务器成为性能瓶颈,因为所有数据首先通过主服务器),MapReduce的HAWQ InputFormat允许您的Spark和MapReduce代码直接访问存储在HDFS中的HAWQ数据.它是完全分布式的,因此非常有效.
最后,当然,您仍然可以使用SQL来使用HAWQ查询数据,就像使用Greenplum DB一样.