如何使用 Apache Nifi 将数据从 MySql 导入 Hive?

How to import data from MySql into Hive using Apache Nifi?

我正在尝试使用 QueryDatabaseTablePutHiveQl 处理器将数据从 MySql 导入到 Hive,但出现错误。

我有一些问题:

  1. puthiveql的输出格式是什么?
  2. 应该预先创建输出 table 还是处理器会这样做?
  3. 在哪里可以找到 MySql 到 Hive 过程的模板?

以下是关于您的问题的一些信息:

  1. 输入到PutHiveQL的流文件是在发送到Hive之后(或者发送失败)输出的,所以输出格式(和内容)和输入是一样的format/contents.

  2. 应该预先创建输出 table,但您可以先向 PutHiveQL 发送 "CREATE TABLE IF NOT EXISTS" 语句,它会为您创建 table。

  3. 我不知道现有模板,但基本方法如下:

QueryDatabaseTable -> ConvertAvroToJSON -> SplitJson -> EvaluateJsonPath -> UpdateAttribute(可选) -> ReplaceText -> PutHiveQL

  • QueryDatabaseTable 将对您的 MySQL table.

  • 进行增量提取
  • ConvertAvroToJSON 会将记录转换为您可以使用的格式 操纵(目前处理 Avro 的处理器不多)

  • SplitJson 将为每个 records/rows

  • 创建一个流文件
  • EvaluateJsonPath可以从记录中提取值并放入 流文件属性

  • UpdateAttribute 可以添加包含类型信息的属性。 这是可选的,如果您使用准备好的语句 PutHiveQL

  • ReplaceText 构建 HiveQL 语句(例如 INSERT) 参数(如果你想要准备好的语句)或硬编码值 来自属性

  • PutHiveQL 执行语句将记录放入 Hive

在 NiFi 1.0 中,将有一个 ConvertAvroToORC 处理器,这是将数据导入 Hive(以及从 Hive 查询)的更有效方式。该方法是将 QueryDatabaseTable 的结果转换为 ORC 文件,然后将其放入 HDFS(使用 PutHDFS),并生成部分 Hive DDL 语句为您创建 table(使用 Avro 中的类型信息)记录)。您将该语句(在填写目标位置后)传递给 PutHiveQL,您可以立即开始查询您的 table.

还有一个 PutHiveStreaming 处理器的计划,它将 Avro 记录作为输入,这样流程就只是 QueryDatabaseTable -> PutHiveStreaming,它将记录直接插入 Hive(并且比效率高得多多个 INSERT 语句)。