如何在hawq中插入流数据并对在线数据执行查询。
我测试了jdbc插入,性能非常差。
之后,我用flume测试了向hdfs写入数据,并在hawq中创建了外部表,但是在flume关闭文件之前hawq无法读取数据。问题是,如果我设置flume文件滚动非常低(1分钟)后,一些天的文件数量上升,这是不利于hdfs。
第三种解决方案是hbase,但由于我的大多数查询都是对许多数据的聚合,因此hbase不是一个好的解决方案(hbase适合获取单个数据)。
那么,有了这些约束条件,用hawq在线查询流式数据有什么好的解决方案呢?
3条答案
按热度按时间qhhrdooz1#
如果源数据不在hdfs上,可以尝试使用gpfdist external table或使用其他linux脚本的web external table将gpdfist/命名管道作为缓冲区。另一个解决方案是spring-xd-gpfdist模块。http://docs.spring.io/spring-xd/docs/1.3.1.release/reference/html/#gpfdist
zrfyljdw2#
外部表的另一个选项是使用transform选项。在这里,外部表引用gpfdist url,gpfdist执行程序以获取数据。这是一种拉法而不是推法。
下面是详细信息:外部表“transform”选项
既然您提到了jdbc,我就编写了一个程序,它利用gpfdist执行java程序,通过jdbc获取数据。它可以与greenplum和hawq以及任何jdbc源代码一起工作。
G链接
xmjla07d3#
既然您提到了flume,我将使用类似的工具springxd提供一些替代方法。
你可以有一个Kafka主题,在这里你可以删除流消息和springxd sink作业,它可以写入hawq。例如;
例如;如果您有一些从ftp到kafka的流加载文件和从kafka到hawq的spring java作业。
作业部署hawqbinjob--属性“module.hawqjob.count=2”
stream create--name ftpdocs--definition“ftp--host=me.local--remotedir=/users/me/dev/ftp--username=me--password=********--localdir=/users/me/dev/data/binary--fixeddelay=0 | log
stream create--name file2kafka--definition“file--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“--部署
流create--name--definition“kafka--zkconnect=kafka1.lo”caldomain:2181 --topic=mybin1 |字节字符串>queue:job:qbinjob“--部署
这是获得并行性的一种方法,并不局限于hdfs文件打开问题。您可以通过多种方式扩展此模式,因为大多数流数据集都很小。希望这有帮助。