Nifi从安装开始

解构数据平台系列文章,数据越来越重要,针对数据平台系统要求和设计规范也越来越多,为了匹配数据处理个性化和复杂度的要求,新的理论和名词层出不穷,同时也诞生了各种各样的新工具。

本系列文章主要介绍数据平台架构设计,搭建过程,数据处理的各种新工具的使用,从数据采集、数据清洗,到数据交换、数据治理,再到工作流引擎、规则引擎,最后到数据可视化的整套数据系统全流程。

关于作者:

  • 张丹,分析师/程序员/Quant: R,Java,Nodejs
  • blog: http://fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/linux-nifi-install/

前言

最近有一个数据项目要搭建数据仓库平台,最核心的一个功能,就是从多数据源中同步数据。网上有不少的解决方案,就放弃了自己造车轮的想法,相比较最后选择了Nifi。关于Nifi的文档不多,我就自己一步一步来使用,把整个实现的过程记录下来,方便给后人参考。

目录

  1. Apache Nifi是什么
  2. Apache Nifi安装
  3. Apache Nifi运行第一个实例

1. Apache Nifi是什么

Apache Nifi是一个易于使用,功能强大且可靠的系统来处理和分发数据。

Apache NiFi 最初由美国国家安全局(NSA)开发和使用的一个可视化、可定制的数据集成产品。2014 年 NSA 将其贡献给了 Apache 开源社区,2015 年 7 月成为 Apache 顶级项目。

Apache NiFi支持数据路由,转换和系统中介逻辑的强大且可扩展的有向图。NiFi 通过拖拽界面、配置参数、简单地连接,即可完成对数据流的托管和系统间的自动化传输,使用者可以可视化整个过程并实时进行更改。

Apache NiFi遵循APACHE LICENSE, VERSION 2.0 开源协议。

2. Apache Nifi安装

首先,下载Nifi的最新版本1.12.1二进制版本,下载地址为: http://nifi.apache.org/download.html

本机系统环境

  • 操作系统:Ubuntu 20.04.1 LTS
  • Java版本:java version “11.0.7” 2020-04-14 LTS
# 登陆Ubuntu系统
~ pwd
/home/conan

# 新建文件夹
~ mkdir deploy

# 进入deploy目录  
~ cd deploy

# 下载nifi软件
~ wget https://mirrors.tuna.tsinghua.edu.cn/apache/nifi/1.12.1/nifi-1.12.1-bin.zip

# 解压
~ unzip nifi-1.12.1-bin.zip

# 进入nifi目录 
~ cd nifi-1.12.1

# 查看nifi状态
~ bin/nifi.sh status
nifi.sh: JAVA_HOME not set; results may vary
nifi.sh: java command not found

提示缺少JAVA环境变量,我们来配置Java环境变量。

# 打开系统文件(在文件最后面增加配置)
~ sudo vi /etc/environment

JAVA_HOME=/home/conan/deploy/jdk-11.0.7
PATH=$PATH:$JAVA_HOME/bin

让配置生效

# 执行命令
~ source /etc/environment

# 查看nifi状态,JAVA路径已经生效
~ bin/nifi.sh status
Java home: /home/conan/deploy/jdk-11.0.7
NiFi home: /home/conan/deploy/nifi-1.12.1

Bootstrap Config File: /home/conan/deploy/nifi-1.12.1/conf/bootstrap.conf

2020-11-05 09:38:44,837 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi is not running

# 安装nifi
~ sudo bin/nifi.sh install
Service nifi installed

启动nifi

~ bin/nifi.sh start

Java home: /home/conan/deploy/jdk-11.0.7
NiFi home: /home/conan/deploy/nifi-1.12.1

Bootstrap Config File: /home/conan/deploy/nifi-1.12.1/conf/bootstrap.conf

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.nifi.bootstrap.util.OSUtils (file:/home/conan/deploy/nifi-1.12.1/lib/bootstrap/nifi-bootstrap-1.12.1.jar) to method java.lang.ProcessImpl.pid()
WARNING: Please consider reporting this to the maintainers of org.apache.nifi.bootstrap.util.OSUtils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

查看nifi运行状态,

~ bin/nifi.sh status

Java home: /home/conan/deploy/jdk-11.0.7
NiFi home: /home/conan/deploy/nifi-1.12.1

Bootstrap Config File: /home/conan/deploy/nifi-1.12.1/conf/bootstrap.conf

2020-11-05 09:41:11,846 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi is currently running, listening to Bootstrap on port 42913, PID=3498

# 查看系统进程,3498进程号为nifi主进程
~ ps -aux|grep nifi
conan       3475  0.0  0.0   2608   152 pts/0    S    09:40   0:00 /bin/sh bin/nifi.sh start
conan       3477  0.2  0.3 3620512 61732 pts/0   Sl   09:40   0:01 /home/conan/deploy/jdk-11.0.7/bin/java -cp /home/conan/deploy/nifi-1.12.1/conf:/home/conan/deploy/nifi-1.12.1/lib/bootstrap/* -Xms12m -Xmx24m -Dorg.apache.nifi.bootstrap.config.log.dir=/home/conan/deploy/nifi-1.12.1/logs -Dorg.apache.nifi.bootstrap.config.pid.dir=/home/conan/deploy/nifi-1.12.1/run -Dorg.apache.nifi.bootstrap.config.file=/home/conan/deploy/nifi-1.12.1/conf/bootstrap.conf org.apache.nifi.bootstrap.RunNiFi start
conan       3498  9.6  5.6 4429452 898504 pts/0  Sl   09:40   1:15 /home/conan/deploy/jdk-11.0.7/bin/java -classpath /home/conan/deploy/nifi-1.12.1/./conf:/home/conan/deploy/nifi-1.12.1/./lib/nifi-nar-utils-1.12.1.jar:/home/conan/deploy/nifi-1.12.1/./lib/logback-classic-1.2.3.jar:/home/conan/deploy/nifi-1.12.1/./lib/slf4j-api-1.7.30.jar:/home/conan/deploy/nifi-1.12.1/./lib/nifi-framework-api-1.12.1.jar:/home/conan/deploy/nifi-1.12.1/./lib/jul-to-slf4j-1.7.30.jar:/home/conan/deploy/nifi-1.12.1/./lib/nifi-runtime-1.12.1.jar:/home/conan/deploy/nifi-1.12.1/./lib/nifi-properties-1.12.1.jar:/home/conan/deploy/nifi-1.12.1/./lib/javax.servlet-api-3.1.0.jar:/home/conan/deploy/nifi-1.12.1/./lib/jetty-schemas-3.1.jar:/home/conan/deploy/nifi-1.12.1/./lib/jcl-over-slf4j-1.7.30.jar:/home/conan/deploy/nifi-1.12.1/./lib/log4j-over-slf4j-1.7.30.jar:/home/conan/deploy/nifi-1.12.1/./lib/nifi-api-1.12.1.jar:/home/conan/deploy/nifi-1.12.1/./lib/logback-core-1.2.3.jar:/home/conan/deploy/nifi-1.12.1/./lib/java11/javax.activation-api-1.2.0.jar:/home/conan/deploy/nifi-1.12.1/./lib/java11/jaxb-api-2.3.0.jar:/home/conan/deploy/nifi-1.12.1/./lib/java11/jaxb-impl-2.3.0.jar:/home/conan/deploy/nifi-1.12.1/./lib/java11/javax.annotation-api-1.3.2.jar:/home/conan/deploy/nifi-1.12.1/./lib/java11/jaxb-core-2.3.0.jar -Dorg.apache.jasper.compiler.disablejsr199=true -Xmx512m -Xms512m -Dcurator-log-only-first-connection-issue-as-error-level=true -Djavax.security.auth.useSubjectCredsOnly=true -Djava.security.egd=file:/dev/urandom -Dzookeeper.admin.enableServer=false -Dsun.net.http.allowRestrictedHeaders=true -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Djava.protocol.handler.pkgs=sun.net.www.protocol -Dnifi.properties.file.path=/home/conan/deploy/nifi-1.12.1/./conf/nifi.properties -Dnifi.bootstrap.listen.port=37955 -Dapp=NiFi -Dorg.apache.nifi.bootstrap.config.log.dir=/home/conan/deploy/nifi-1.12.1/logs org.apache.nifi.NiFi

# 查看系统端口, 默认8080为web界面端口
~ netstat -nltp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:42913         0.0.0.0:*               LISTEN      3498/java
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      3498/java
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 127.0.0.1:37955         :::*                    LISTEN      3477/java
tcp6       0      0 :::22                   :::*                    LISTEN      -

在浏览器中打开,http://192.168.1.13:8080。你可以输入你自己的IP进行访问。初始化时是不带权限的,后面可以配置启用全新设置。

界面还是很不错的,打开后就是一个完整的画布,我们可以在画布上来进行数据调用任务的编排。

3.Apache Nifi运行第一个实例

任务:产生一组随机文件,写到/home/conan/demo目录下的文件中。

为完成第一个任务,我们来建立一个工作流图,一共需要5个操作。

  • 第一个操作,GenerateFlowFile,用于产生随机文件。
  • 第二个操作,PutFile,用于写入本地文件。
  • 第三个操作,success,用于结束标识位。
  • 第四个操作,Name success,是执行队列,用于连接GenerateFlowFile 和 PutFile,当GenerateFlowFile成功后,产生数据会存在这个过程中。
  • 第五个操作,Name failure success,是执行队列,用于连接PutFile和结束标识,PutFile无论成功或失败,都会起这个流程到结束。

我们需要对 GenerateFlowFile 进行配置,在PROPERTIES标签页,可以设置随机生成的文件大小,也可以自定义一些文字的信息,我把输出文件设置为Hello world,会被写到生成的文件中。

在第四步的连接节点,设置压力阈值为2,可以同时生成2个文件,默认为10000。

再调整 PutFile 配置,在PROPERTIES标签页,可以设置文件的输出目录为/home/conan/demo/ ,我们生成的文件可以到这个目录中找到。

在第五步连接节点,设置压力阈值为5,可以同时写5个文件到磁盘,默认为10000。

然后,启动每一个流程,变为运行状态,这样生成的文件就会被写入到指定的目录了。在输出目录,查看生成的文件。


# 查看输出目录,共有5个文件
~ ll /home/conan/demo
total 1276
drwxrwxr-x 2 conan conan 1282048 Nov  6 01:09 ./
drwxr-xr-x 6 conan conan    4096 Nov  6 01:09 ../
-rw-rw-r-- 1 conan conan      11 Nov  6 01:09 1c108cb4-6d8d-43c7-b8f1-01f796103eb0
-rw-rw-r-- 1 conan conan      11 Nov  6 01:09 2352fea5-2e7a-43e8-8c59-7059d4d6f878
-rw-rw-r-- 1 conan conan      11 Nov  6 01:09 2d3e9fad-fe6e-46d4-8dc1-3e0465994130
-rw-rw-r-- 1 conan conan      11 Nov  6 01:09 965d6888-b612-40cc-af73-46a1c5ed74ec
-rw-rw-r-- 1 conan conan      11 Nov  6 01:09 cccf11bf-6ef3-418b-b2c8-22c9222bc55a

# 查看其中一个文件内容
~ cat /home/conan/demo/1c108cb4-6d8d-43c7-b8f1-01f796103eb0
Hello world

这样就完成了第一个Nifi的实例,总体来说还是比较容易上手的,没有遇到太复杂的环境配置问题。Nifi是一个功能强大的工具,后面我会继续介绍Nifi的使用的详细内容。

转载请注明出处:
http://blog.fens.me/linux-nifi-install/

打赏作者

This entry was posted in 架构设计