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

时间:2016-07-15 17:36:23

标签: apache-nifi

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

我有一些问题:

  1. puthiveql的输出格式是什么?
  2. 是否应事先创建输出表,还是处理器会这样做?
  3. 我在哪里可以找到MySql to Hive进程的模板?

1 个答案:

答案 0 :(得分:5)

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

  1. 输入到PutHiveQL的流文件在发送到Hive(或发送失败)后输出,因此输出格式(和内容)与输入格式/内容相同。

  2. 应该事先创建输出表,但是你可以发送一个"创建表,如果不是EXISTS"语句首先,它将为您创建表。

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

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

    • QueryDatabaseTable将对MySQL表进行增量提取。

    • ConvertAvroToJSON会将记录转换为您可以使用的格式 操纵(目前没有多个处理Avro的处理器)

    • SplitJson将为每个记录/行创建一个流文件

    • EvaluateJsonPath可以从记录中提取值并将其放入 流文件属性

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

    • ReplaceText构建一个HiveQL语句(例如INSERT) 参数(如果您需要预准备语句)或硬编码值 来自属性

    • PutHiveQL执行语句以将记录输入Hive

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

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