【问题标题】:NIFI: Proper way to consume kafka and store data into hiveNIFI:使用 kafka 并将数据存储到 hive 的正确方法
【发布时间】:2020-09-05 17:53:28
【问题描述】:

我的任务是创建 kafka 消费者,该消费者应该从 kafka 中提取消息、转换并存储到 Hive 表中。

所以,在 kafka 主题中有很多消息作为 json 对象。

我喜欢添加一些字段并将其插入 hive。

我使用以下 Nifi 处理器创建流程:

  1. 消费Kafka_2_0
  2. JoltTransformJSON - 用于转换 json
  3. ConvertRecord - 将 json 转换为 hive 的插入查询
  4. PutHiveQL

主题将被充分加载并每天处理大约 5Gb 数据。

那么,有什么方法可以优化我的流程(我认为向 Hive 提供大量插入查询是个坏主意)?也许使用外部表和putHDFS处理器会更好(这样如何与分区并将输入json合并到一个文件中?)

【问题讨论】:

    标签: hadoop apache-kafka hive apache-nifi


    【解决方案1】:

    正如您所怀疑的,使用 PutHiveQL 执行大量单个 INSERT 的性能不是很好。使用您的外部表方法可能会好得多。如果表是 ORC 格式,您可以使用 ConvertAvroToORC(用于 Hive 1.2)或 PutORC(用于 Hive 3),它们都生成 Hive DDL 以帮助创建外部表。

    还有 Hive 流处理器,但如果您使用 Hive 1.2,PutHiveStreaming 的性能也不是很好(但应该仍然比带有 INSERT 的 PutHiveQL 更好)。对于 Hive 3,PutHive3Streaming 的性能应该更高,是我推荐的解决方案。

    【讨论】:

    • 另外我有一个关于配置配置单元的问题,是否可以通过 Metastore uri(端口 9083)和使用 jdbc 连接池(端口 10000)进行连接,您能否举一个此类配置或所需属性的示例?跨度>
    • 您可以使用 MergeContent 或 MergeRecord 将多行/记录捆绑到一个更大的流文件中。
    • Metastore URI 通常看起来像 thrift://localhost:9083,而 JDBC 连接可能看起来像 jdbc:hive2://localhost:10000/default,其中 localhost 将替换为 Hive Metastore 和 HiveServer2 所在的主机名
    猜你喜欢
    • 2017-06-24
    • 2019-10-03
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多