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

Pra*_*ash 2 apache-nifi

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

我有一些问题:

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

mat*_*tyb 5

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

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

  2. 应该事先创建输出表,但是您可以首先向PutHiveQL发送"CREATE TABLE IF NOT EXISTS"语句,它将为您创建表.

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

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语句更有效).