首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Greenplum、Pivotal HD + Spark或针对TB级结构化数据的HAWQ?

Greenplum、Pivotal HD + Spark或针对TB级结构化数据的HAWQ?
EN

Stack Overflow用户
提问于 2015-09-12 04:08:50
回答 2查看 2.8K关注 0票数 3

我在Greenplum DB中有数DB的结构化数据。我需要在我的数据上运行本质上是MapReduce作业的东西。

我发现自己至少重新实现了MapReduce的功能,以便这些数据可以放入内存中(以流式方式)。

然后我决定到其他地方寻找更完整的解决方案。

我考虑了Pivotal HD + Spark,因为我正在使用Scala,而Spark基准测试是一个令人惊叹的因素。但我认为这背后的数据存储区HDFS的效率将低于Greenplum。(请注意“我相信”。我很高兴知道我错了,但请提供一些证据。)

因此,为了与Greenplum存储层保持一致,我研究了Pivotal的HAWQ,它基本上是Greenplum上的Hadoop和SQL。

使用这种方法会丢失很多功能。主要是Spark的使用。

还是只使用内置的Greenplum功能更好?

因此,我正处在不知道哪种方式是最好的十字路口。我想要处理适合关系数据库模型的DB级数据,我想要Spark和MapReduce的好处。

我的要求是不是太高了?

EN

回答 2

Stack Overflow用户

发布于 2015-09-18 15:12:24

在发布我的答案之前,我想根据我的理解重新表述问题(以确保我正确理解了问题),如下所示:

您有大量适合关系数据库模型的数据,并且希望在大多数情况下使用SQL语句查询数据(我认为这就是将其放到Greenplum DB中的原因),但有时您希望使用Spark和MapReduce来访问数据,因为它们具有灵活性。

如果我的理解是正确的,我强烈建议您尝试使用HAWQ。HAWQ的一些特性使其完全符合您的需求(注意:我可能有偏见,因为我是HAWQ的开发人员)。

首先,HAWQ是Hadoop数据库上的SQL,这意味着它使用HDFS作为其数据存储。HAWQ不支持Greenplum DB存储层。

其次,"HDFS的效率将低于Greenplum“的说法是无可争辩的。但性能差异并不像您想象的那样显著。我们对访问HDFS数据进行了一些优化。一个例子是,如果我们发现一个数据块存储在本地,我们直接从磁盘读取它,而不是通过正常的RPC调用。

第三,HAWQ有一个用于MapReduce的名为HAWQ InputFormat的特性( Greenplum DB没有)。使用该特性,您可以编写Spark和MapReduce代码来轻松高效地访问HAWQ数据。不同于Hadoop提供的DBInputFormat (主机会成为性能瓶颈,因为所有数据都会先经过主机),MapReduce的HAWQ InputFormat可以让你的Spark和MapReduce代码直接访问存储在HDFS中的HAWQ数据。它是完全分布式的,因此非常高效。

最后,当然,您仍然可以使用SQL通过HAWQ查询数据,就像使用Greenplum DB一样。

票数 6
EN

Stack Overflow用户

发布于 2017-07-01 02:37:42

您是否尝试过使用Spark - JDBC连接器读取Spark数据?

使用分区列、下界、上界和numPartitions在多个Spark worker之间拆分greenplum表。

例如,您可以使用以下示例

代码语言:javascript
复制
import java.util.Random

import org.apache.spark.sql.SQLContext

import org.apache.spark.{SparkConf, SparkContext}



object SparkGreenplumApp extends App {

  val conf = new SparkConf().setAppName("SparkGreenplumTest")

  val sparkContext = new SparkContext(conf)

   val sqlContext = new SQLContext(sparkContext)

  import sqlContext.implicits._


 val df = sqlContext.load("jdbc", Map(
    "url" -> "jdbc:postgresql://servername:5432/databasename?user=username&password=*******",
    "dbtable" -> "(select col, col2, col3 where datecol > '2017-01-01' and datecol < '2017-02-02' ) as events",
    "partitionColumn"-> "ID",
    "lowerBound"->"100",
    "upperBound"->"500",
    "numPartitions"->"2",
    "driver" -> "org.postgresql.Driver"))
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32531383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档