Nifi 是一个开源的数据处理工具,可以通过简单的Processor对数据流进行处理。本文以MongoDB数据同步至Hive为例,介绍Nifi的使用配置:
1、MongoDB数据源
本测试环境在MongoDB中创建了一个名为nancy的数据库和名为names的表,表中有13条数据,每条数据包含“name”和“_id”字段,数据如下:
2、NIFI处理器
用NIFI把MongoDB的数据导到Hive中需要四个处理器如下:
(1)GetMongo
获取MongoDB中的数据,需要填写MongoDB的url,端口为“27017”,还需填写数据库名和表名如下,其他非必填选项可参考官方文档:
(2)ConvertJSONToAvro
MongoDB数据的存储格式为JSON,Hive的数据存储在HDFS中,格式为ORC,所以需要将JSON数据转换为ORC格式,可用NIFI提供的处理器先将JSON转换为Avro,再将Avro格式转换为ORC。
JSON转Avro配置如下:
此处Record schema要填写的是转换成的Avro格式,Avro的schema是用JSON的格式表示的,形式如{“type”:”typeName”…attributes…} typeName可以是原生类型或者其它复杂类型,此处用的是复杂类型Records,Records使用类型名称“record”,并且支持三个必选属性:
- type:必有属性,此处为record
- name:必有属性,是一个JSON string,提供了记录的名字
- fields:必有属性,是一个JSON数组,数组中列举了所有的field。每一个field都是一个JSON对象,并且具有如下属性:
name: 必选属性,field的名字,是一个JSON string。
type: 必选属性,定义Schema的一个JSON对象,或者是命名一条记录定义的JSON string。
type对应关系为
还有一些可选属性此处不具体描述,此部分有关Avro格式规范可参考文献(http://blog.sina.com.cn/s/blog_567e650201011s7n.html)
因为MongoDB里的数据有两个字段,一个为string格式的name,一个为object格式的_id,所以转换成Avro格式为如下:
(3)ConvertAvroToORC
将Avro格式转换为ORC格式,配置如下:
需要事先创建Hive里的表mongo_test:
CREATE EXTERNAL TABLE IF NOT EXISTS mongo_test (name STRING, .._id MAP<STRING, STRING>) STORED AS ORC
(注意:需在_id前加上..转移符)
(4)PutHDFS
将数据put到Hive表对应的HDFS文件中,配置如下:
3、在Hive中查看数据