以下是当前过程的步骤:
insert into permanent_table select * from staging_table
)。 refresh permanent_table
,可从Impive中获得Hive表中的数据。 我看一下我构建的过程,它“闻起来”很糟:有太多中间步骤会损害数据流。
大约20个月前,我看到了一个演示,该演示是从Amazon Kinesis管道流式传输数据的,并且Impala可以近乎实时地对其进行查询。我不认为他们所做的事情是如此丑陋/令人费解。有没有更有效的方式将数据从Kafka传输到Impala(可能是可以序列化到Parquet的Kafka使用者)?
我认为“将数据流传输到低延迟SQL”必须是一个相当普遍的用例,因此我很想知道其他人如何解决了这个问题。
最佳答案
如果您需要将Kafka数据原样转储到HDFS,最好的选择是使用Kafka Connect和Confluent HDFS连接器。
您可以将数据转储到HDFS上的Parket文件中,然后再将其加载到Impala中。
您需要,我想您想使用TimeBasedPartitioner分区程序每隔X毫秒制作 Parquet 文件(调整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
关于hadoop - 如何有效地将数据从Kafka移至Impala表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35004712/