以下是当前过程的步骤:

  • Flafka将日志写入HDFS上的“着陆区”。
  • 由Oozie安排的作业将完整文件从着陆区复制到暂存区。
  • 暂存数据由使用暂存区作为其位置的Hive表进行“模式化”。
  • 登台表中的记录将添加到永久性Hive表中(例如insert into permanent_table select * from staging_table)。
  • 通过在Impala中执行refresh permanent_table,可从Impive中获得Hive表中的数据。

  • hadoop - 如何有效地将数据从Kafka移至Impala表?-LMLPHP

    我看一下我构建的过程,它“闻起来”很糟:有太多中间步骤会损害数据流。

    大约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/

    10-10 10:56