0

如何将流数据插入hawq并对在线数据执行查询。

  1. 我测试了 jdbc 插入,性能非常糟糕。

  2. 之后我测试了使用flume将数据写入hdfs并在hawq中创建了外部表,但是hawq在flume关闭文件之前无法读取数据。问题是,如果我在几天后将水槽文件滚动设置为非常低(1 分钟),文件数量会增加,这对 hdfs 不利。

  3. 第三个解决方案是hbase,但是因为我的大部分查询都是对许多数据的聚合,所以hbase不是一个好的解决方案(hbase适合获取单个数据)。

那么有这些限制,用hawq在线查询流数据有什么好的解决方案呢?

4

3 回答 3

1

外部表的另一个选项是使用 TRANSFORM 选项。这是外部表引用 gpfdist URL 的地方,gpfdist 执行程序让您获取数据。这是一种拉技术,而不是推技术。

以下是详细信息: 外部表“转换”选项

既然你提到了 JDBC,我写了一个利用 gpfdist 的程序,它执行一个 Java 程序来通过 JDBC 获取数据。它适用于 Greenplum 和 HAWQ 以及任何 JDBC 源。

gplink

于 2016-08-17T16:14:43.793 回答
1

既然你提到了 Flume,我会用类似的工具 springxd 提供一些替代方法。

您可以有一个 Kafka 主题,您可以在其中删除流式消息和可以写入 HAWQ 的 springxd sink 作业。例如;

例如; 如果您有一些从 FTP 到 KAFKA 的流加载文件和 spring java 作业将消息从 kafka 到 hawq。

  1. 作业部署 hawqbinjob --properties "module.hawqjob.count=2"

  2. 流创建 --name ftpdocs --definition "ftp --host=me.local --remoteDir=/Users/me/DEV/FTP --username=me --password=********** - -localDir=/Users/me/DEV/data/binary --fixedDelay=0 | 日志

  3. 流创建 --name file2kafka --definition "文件 --dir=/Users/me/DEV/data/binary --pattern=* --mode=ref --preventDuplicates=true --fixedDelay=1 | transform --expression =payload.getAbsolutePath() --outputType=text/plain | kafka --topic=mybin1 --brokerList=kafka1.localdomain:6667" --deploy

  4. 流创建 --name --definition "kafka --zkconnect= kafka1.localdomain:2181 --topic=mybin1 | byte2string > queue:job:hawqbinjob" --deploy

这是获得并行性的一种方法,并且不限于 hdfs 文件打开问题。您可以通过多种方式扩展此模式,因为大多数流数据都是小型集合。希望这有帮助。

于 2016-08-17T20:40:56.597 回答
1

如果您的源数据不在 hdfs 上,您可以尝试使用 gpdfist/命名管道作为 gpfdist 外部表或使用其他 linux 脚本的 web 外部表的缓冲区。另一个解决方案是 spring xd gpfdist 模块。http://docs.spring.io/spring-xd/docs/1.3.1.RELEASE/reference/html/#gpfdist

于 2016-08-17T14:06:28.360 回答