我的任务是创建kafka消费者,它应该从kafka中提取消息,从中提取消息并存储到Hive表中。
因此,在 kafka 主题中,有很多消息作为 json 对象。
我喜欢添加一些字段并将其插入到蜂巢中。
我使用以下 Nifi 处理器创建流:
- ConsumeKafka_2_0
- JoltTransformJSON - for transform json
- 转换记录 - 将 json 转换为 Hive 的插入查询
- PutHiveQL
该主题将充分加载并每天处理大约 5Gb 的数据。
那么,有什么方法可以优化我的流(我认为向 Hive 提供大量插入查询是个坏主意(?也许使用外部表和 putHDFS 处理器会更好(这样如何使用分区并将输入 json 合并到一个文件中?
正如你所怀疑的,使用 PutHiveQL 来执行大量单独的 INSERT 并不是很高性能。使用外部表方法可能会好得多。如果表采用 ORC 格式,则可以使用 ConvertAvroToORC(适用于 Hive 1.2(或 PutORC(适用于 Hive 3(,它们都生成 Hive DDL 来帮助创建外部表。
还有Hive流处理器,但如果你使用的是Hive 1.2,PutHiveStreaming的性能也不是很好(但应该仍然比带有INSERTs的PutHiveQL更好(。对于Hive 3,PutHive3Streaming的性能应该更高,是我推荐的解决方案。