2016-01-25 6 views
13

は、現在のプロセスの手順は次のとおりです。効率的にカフカからインパラテーブルにデータを移動する方法は?ここ

  1. Flafkaは、HDFS上の「ランディングゾーン」にログを書き込みます。 Oozieによりスケジュール
  2. 仕事、ステージング領域へのランディングゾーンからコピーの完全なファイルを。
  3. ステージングデータは「スキーマified」の位置としてステージング領域を使用するハイブテーブルによるものです。ステージングテーブルから
  4. レコード(例えばinsert into permanent_table select * from staging_table)永久ハイブテーブルに追加されます。
  5. ハイブテーブルからのデータは、インパラにrefresh permanent_tableを実行することにより、インパラに利用可能です。

existing data flow

私が構築したプロセスを見て、それ悪い「におい」:データの流れを損なうあまりにも多くの中間ステップがあります。

約20か月前に、データがAmazon Kinesisパイプからストリームされていて、ほぼリアルタイムで、Impalaによって照会可能なデモが見られました。私は彼らがかなり醜い/巻き込まれた何かをしたとは思わない。 KafkaからImpala(おそらくParquetにシリアル化できるKafkaの消費者)にデータをストリームするもっと効率的な方法はありますか?

"低遅延SQLへのデータのストリーミング"は、かなり一般的な使用例でなければならないと思います。だから私は他の人がこの問題をどのように解決したか知りたいと思っています。

+0

をand-impala /)はホップ数が少なく、比較的高速な代替アーキテクチャです – vmachan

+0

これは役に立ちますか? https://blog.cloudera.com/blog/2015/11/how-to-ingest-and-query-fast-data-with-impala-without-kudu/ –

答えて

0

あなたが最良の選択肢は、カフカ接続し、コンフルエントHDFSコネクタを使用しているHDFSする-であるとして、あなたのカフカのデータをダンプする必要がある場合。

あなたはインパラにロードすることができHDFS上のparketファイルにデータをダンプすることができます。 TimeBasedPartitionerパーティショナーを使用して、パーティクルファイルをXミリ秒ごとに作成する(partition.duration.ms構成パラメーターを調整する)必要があると思うでしょう。

Addignあなたのカフカ接続の設定にこのようなものは、トリックを行う場合があります【こちら】(http://www.svds.com/flexible-data-architecture-with-spark-cassandra-

# Don't flush less than 1000 messages to HDFS 
flush.size = 1000 

# Dump to parquet files 

format.class=io.confluent.connect.hdfs.parquet.ParquetFormat 

partitioner.class = TimebasedPartitioner 

# One file every hour. If you change this, remember to change the filename format to reflect this change 
partition.duration.ms = 3600000 
# Filename format 
path.format='year'=YYYY/'month'=MM/'day'=dd/'hour'=HH/'minute'=mm 
関連する問題