【问题标题】:What is the best approach to load data into Hive using NiFi?使用 NiFi 将数据加载到 Hive 的最佳方法是什么?
【发布时间】:2017-06-24 08:34:42
【问题描述】:

我已经开始使用 NiFi。我正在研究将数据加载到 Hive 的用例。我得到一个 CSV 文件,然后我使用 SplitText 将传入的流文件拆分为多个流文件(逐个记录拆分)。然后我使用 ConvertToAvro 将拆分的 CSV 文件转换为 AVRO 文件。之后,我将 AVRO 文件放入 HDFS 的目录中,并使用 ReplaceText + PutHiveQL 处理器触发“加载数据”命令。

我正在逐条拆分文件记录,因为要获取分区值(因为 LOAD DATA 不支持动态分区)。流程如下所示:

GetFile (CSV) --- SplitText(分割行数:1,标题行数:1)--- ExtractText(使用 RegEx 获取分区字段的值并分配给属性)--- ConvertToAvro(指定架构)--- PutHDFS(写入 HDFS 位置)--- ReplaceText(带分区信息的 LOAD DATA cmd)--- PutHiveQL

问题是,由于我一次将 CSV 文件拆分为每条记录,它会生成太多的 avro 文件。例如,如果 CSV 文件有 100 条记录,它会创建 100 个 AVRO 文件。由于我想获取分区值,因此我必须一次将它们拆分为一条记录。我想知道有什么办法,我们可以在不逐记录拆分的情况下实现这个目标。我的意思是像批处理它。我对此很陌生,所以我还无法破解它。帮我解决这个问题。

PS:如果有任何替代方法可以实现此用例,请建议我。

【问题讨论】:

    标签: hdfs hiveql apache-nifi data-ingestion


    【解决方案1】:

    您是否希望根据分区的值对 Avro 记录进行分组,每个唯一值一个 Avro 文件?或者您是否只需要一些 LOAD DATA 命令的分区值(并使用包含所有记录的单个 Avro 文件)?

    如果是前者,那么您可能需要一个自定义处理器或 ExecuteScript,因为您需要一步来解析、分组/聚合和转换所有内容(即针对一个 CSV 文档)。如果是后者,那么您可以将流程重新排列为:

    GetFile -> ConvertCSVToAvro -> PutHDFS -> ConvertAvroToJSON -> SplitJson -> EvaluateJsonPath -> ReplaceText -> PutHiveQL

    此流程将整个 CSV 文件(作为单个 Avro 文件)放入 HDFS,然后进行拆分(在转换为 JSON 之后,因为我们没有 EvaluateAvroPath 处理器),获取分区值,并生成 Hive DDL 语句 (LOAD DATA)。

    【讨论】:

    • 我实际上在没有使用定制处理器的情况下做了第一个。我使用 MergeContent 进行批处理。它现在按我想要的方式工作。但是,我对第二个想法很感兴趣。我会试试看。我有一个问题。由于我们在 HDFS 中只有一个 AVRO 文件,并且我们将在 LOAD 命令中提供该 HDFS 路径,在读取分区的值并触发 LOAD DATA 命令后,记录如何跨所有分区移动到 Hive?可以移动部分 AVRO 文件吗?我的意思是像单个 AVRO 被拆分成多个 AVRO 并放入相应的分区?
    • 原来第二种方法行不通,因为所有分区最终都会得到相同的数据。如果您在 PutHDFS 之前使用 RouteOnAttribute 然后 MergeContent ,那么这听起来是正确的方法。
    • 是的。第二个会将所有内容放入一个分区中。顺便说一句,我不使用 RouteOnAtrribute。 MergeContent 及其 Correlation Attribute 属性就完成了这项工作。无论如何,谢谢。
    【解决方案2】:

    如果您已将文件放置在 hive 表使用 puthdfs 处理器读取数据的位置,则无需调用 puthiveql 处理器。我对此也很陌生,但我认为您应该利用 hive 的 schema-on-read 功能。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多