0

ストリーミング データを hawq に挿入し、オンライン データに対してクエリを実行する方法。

  1. jdbc挿入をテストしましたが、パフォーマンスは非常に悪かったです。

  2. その後、flume で hdfs にデータを書き込むテストを行い、hawq で外部テーブルを作成しましたが、flume がファイルを閉じるまで hawq はデータを読み取ることができません。問題は、flume ファイルのローリングを非常に低く (1 分) 設定すると、数日後にファイル数が増え、hdfs には適していないことです。

  3. 3番目の解決策はhbaseですが、私のクエリのほとんどは多くのデータの集計であるため、hbaseは適切な解決策ではありません(hbaseは単一のデータを取得するのに適しています)。

これらの制約がある場合、hawq を使用してストリーミング データをオンラインでクエリするための適切なソリューションは何でしょうか?

4

3 に答える 3

1

ソース データが hdfs にない場合は、他の Linux スクリプトを使用して、gpfdist 外部テーブルまたは Web 外部テーブルを使用して、gpdfist/名前付きパイプをバッファーとして試すことができます。別の解決策は、spring xd gpfdist モジュールです。http://docs.spring.io/spring-xd/docs/1.3.1.RELEASE/reference/html/#gpfdist

于 2016-08-17T14:06:28.360 に答える
1

Flumeについて言及したので、同様のツールspringxdを使用した代替アプローチを提供します。

ストリーミング メッセージをドロップできる Kafka トピックと、HAWQ に書き込むことができる springxd シンク ジョブを使用できます。例えば;

例えば; FTP から KAFKA にファイルをロードするストリームがあり、kafka から hawq にメッセージを受け取るスプリング Java ジョブがある場合。

  1. ジョブ デプロイ hawqbinjob --properties "module.hawqjob.count=2"

  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 | ログ

  3. 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" --deploy

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

これは、並列処理を実現する 1 つの方法であり、hdfs ファイルを開く問題に限定されません。ストリーミング データのほとんどは小さなセットであるため、このパターンをさまざまな方法で拡張できます。この助けを願っています。

于 2016-08-17T20:40:56.597 に答える