以下是当前流程的步骤:
insert into permanent_table select * from staging_table
)。refresh permanent_table
,可以在Impala中使用Hive表中的数据。我看看我构建的过程并且“闻起来”很糟糕:有太多的中间步骤会影响数据流。
大约20个月前,我看到了一个演示,其中数据从Amazon Kinesis管道流式传输,并且可以近乎实时地被Impala查询。我不认为他们做了一件非常丑陋/错综复杂的事情。是否有更有效的方法将数据从Kafka传输到Impala(可能是可以序列化为Parquet的Kafka消费者)?
我认为“将数据流式传输到低延迟SQL”必定是一个相当常见的用例,所以我很想知道其他人是如何解决这个问题的。
答案 0 :(得分:2)
如果您需要将Kafka数据按原样转储到HDFS,最佳选择是使用Kafka Connect和Confluent HDFS连接器。
您可以将数据转储到可以在Impala中加载的HDFS上的parket文件。 您需要我认为您希望每隔X毫秒使用一个TimeBasedPartitioner分区器来制作镶木地板文件(调整partition.duration.ms配置参数)。
将这样的内容添加到您的Kafka Connect配置中可能会起到作用:
# 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