【问题标题】:how to efficiently move data from Kafka to an Impala table?如何有效地将数据从 Kafka 移动到 Impala 表?
【发布时间】:2016-05-02 11:27:19
【问题描述】:

以下是当前流程的步骤:

  1. Flafka 将日志写入 HDFS 上的“登陆区”。
  2. Oozie 安排的作业将完整文件从登陆区复制到暂存区。
  3. 暂存数据由 Hive 表“架构化”,该表使用暂存区域作为其位置。
  4. 暂存表中的记录被添加到永久 Hive 表(例如insert into permanent_table select * from staging_table)。
  5. 通过在 Impala 中执行 refresh permanent_table,可以在 Impala 中使用 Hive 表中的数据。

我查看了我构建的流程,它“闻起来”很糟糕:中间步骤太多会影响数据流。

大约 20 个月前,我看到了一个演示,其中数据从 Amazon Kinesis 管道流式传输,并且可由 Impala 近乎实时地查询。我不认为他们做了如此丑陋/令人费解的事情。是否有更有效的方式将数据从 Kafka 流式传输到 Impala(可能是可以序列化为 Parquet 的 Kafka 消费者)?

我想“将数据流式传输到低延迟 SQL”一定是一个相当常见的用例,所以我很想知道其他人是如何解决这个问题的。

【问题讨论】:

标签: hadoop apache-kafka flume impala


【解决方案1】:

如果您需要将 Kafka 数据按原样转储到 HDFS,最好的选择是使用 Kafka Connect 和 Confluent HDFS 连接器。

您可以将数据转储到 HDFS 上的 parket 文件中,您可以在 Impala 中加载。 您需要我认为您需要使用 TimeBasedPartitioner 分区器每 X 毫秒制作一次镶木地板文件(调整 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

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多