hadoop - 如何有效地将数据从 Kafka 移动到 Impala 表?

标签 hadoop apache-kafka flume impala

以下是当前流程的步骤:

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

existing data flow

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

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

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

最佳答案

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

您可以将数据转储到可以在 Impala 中加载的 HDFS 上的 parket 文件。 你需要我认为你会想要使用 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/

相关文章:

facebook - 如何将 Facebook 评论和提要拉到 hadoop?

docker - Apache Kafka 3.X 集群 : requires already started zookeeper: Exception: Unable to parse PLAINTEXT://127. 0.0.1:到代理端点 -

maven - 使用架构注册表时出现问题 :download

apache-kafka - 用KSQL计算所有条目

hadoop - 如何将文件一个接一个地放入水槽spooldir中?

java - 在主函数中读取文件 - Hadoop

python - Python 3.x 的 Hive 客户端

Hadoop总订单分区器

hadoop - flume命令卡住,无法创建序列生成器

api - 使用 Hadoop Flume 检索 google 分析数据