Nifi介绍、安装、实践案例

article/2025/8/16 6:53:33

第1章NiFi基本概念

1.1 概述

简单地说,NiFi是为了自动化系统之间的数据流而构建的。虽然术语“数据流”在各种环境中使用,但我们在此处使用它来表示系统之间自动化和管理的信息流。这个问题空间一直存在,因为企业有多个系统,其中一些系统创建数据,一些系统消耗数据。已经讨论并广泛阐述了出现的问题和解决方案模式。企业集成模式中提供了一个全面且易于使用的表单。

NiFi的诞生,要致力于解决的问题:

  1. 因为网络故障、磁盘故障、软件崩溃、人为犯错导致的系统错误
  2. 数据读写超出了自身系统的处理能力
  3. 获取的数据不具有规范性
  4. 数据结构的优先级变化很快,启用新流和更改现有流的速度必须非常快
  5. 数据结构化管理的可移植性与不同数据格式之间的依赖性

1.2 核心概念

NiFi的基本设计概念与基本流程的编程[FBP]的主要思想密切相关。以下是一些主要的NiFi概念以及他们如何映射到FBP:

NiFi条款

FBP术语

描述

FlowFile

Information Packet

FlowFile代表在系统中移动的每个对象,对于每个对象,NiFi都会跟踪键/值对属性字符串及其零个或多个字节的关联内容的映射。

FlowFile Processor

Black Box

处理器实际上执行工作。用[eip]术语来说,处理器是在系统之间进行数据路由,转换或中介的某种组合。处理器可以访问给定FlowFile及其内容流的属性。处理器可以在给定的工作单元中对零个或多个FlowFiles进行操作,并提交该工作或回滚。

Connection

Bounded Buffer

Connections提供了处理器之间的实际链接。这些充当队列,并允许各种进程以不同的速率进行交互。可以动态地对这些队列进行优先级排序,并且可以在负载上设置上限,从而实现反压。

Flow Controller

Scheduler

流控制器保持有关进程如何连接和管理所有进程使用的线程及其分配的知识。Flow Controller充当代理,促进处理器之间的FlowFiles交换。

Process Group

subnet

Process Group是一组特定的进程及其连接,可以通过输入端口接收数据,并通过输出端口发送数据。以这种方式,Process Group允许仅通过其他组件的组合来创建全新的组件。

1.3 NiFi架构原理

   

NiFi在主机操作系统上的JVM中执行。NiFi在JVM上的主要组件如下:

    1.Web Server

Web Server的目的是托管NiFi基于HTTP的命令和控制API。

    2.Flow Controller

Flow Controller是操作的大脑。它为扩展程序提供运行所需的线程,并管理扩展程序何时接收执行资源的时间表。

    3.Extensions

其他文档中介绍了各种类型的NiFi扩展程序。这里的关键点是扩展在JVM中运行和执行。

    4.FlowFile Repository

NiFi可以在FlowFile Repository中跟踪对流中当前处于活动状态的给定FlowFile的了解状态。存储库的实现是可插入的。默认方法是位于指定磁盘分区上的持久性预写日志。

    5.Content Repository

Content Repository是给定FlowFile的实际内容字节所在的位置。存储库的实现是可插入的。默认方法是一种相当简单的机制,它将数据块存储在文件系统中。可以指定多个文件系统存储位置,以便使用不同的物理分区以减少任何单个卷上的争用。

    6.Provenance Repository

来源库是存储所有来源事件数据的地方。存储库构造是可插入的,默认实现是使用一个或多个物理磁盘卷。在每个位置内,事件数据都被索引并可以搜索。

1.4 NiFi还可以在集群中运行

从NiFi 1.0版本开始,采用了零主群集模式。NiFi集群中的每个节点都对数据执行相同的任务,但是每个节点都对不同的数据集进行操作。Apache ZooKeeper选择一个节点作为集群协调器,并且故障转移由ZooKeeper自动处理。所有群集节点均向群集协调器报告心跳和状态信息。群集协调器负责断开和连接节点。此外,每个群集都有一个主节点,该节点也由ZooKeeper选择。作为DataFlow管理器,您可以通过任何节点的用户界面(UI)与NiFi群集进行交互。您所做的任何更改都将复制到群集中的所有节点,从而允许多个入口点。

第2章 NiFi安装

2.1 NiFi下载

下载地址:Apache NiFi Downloads

文档地址:Apache NiFi Documentation

2.2 安装NiFi

2.2.1 NiFi安装

1) 把nifi-1.10.0-bin.tar.gz上传到Linux的/opt/software目录下

2) 解压nifi-1.10.0-bin.tar.gz到/opt/module/目录下面

 tar –zxvf nifi-1.10.0-bin.tar.gz –C /opt/module

3) 修改/opt/module 目录下nifi-1.10.0的名称为NiFi

mv /opt/module/nifi-1.10.0/ nifi

2.2.2 NiFi核心配置

1) 编辑/etc/security/limits.conf来增加NiFi打开大量的文件数量和线程数量的限制。

    vim /etc/security/limits.conf

    *hard nofile 50000

    *soft nofile 50000

    *hard nproc 10000

    *soft nproc 10000

    vim /etc/security/limits.d/20-nproc.conf

    *soft nproc 10000

2) 增加可用的TCP套接字端口数

    修改之前

    echo "10000 65000" > /proc/sys/net/ipv4/ip_local_port_range

或者:sysctl -w net.ipv4.ip_local_port_range="10000 65000"

修改之后

    vim /etc/sysctl.conf

    vm.swappiness = 0

3)修改默认端口(可选)

    vim /opt/module/nifi/conf/nifi.properties

 

修改之后

2.2.3 启动NiFi

准备工作:

卸载自带的OpenJDK

使用rpm -qa  |  grep java查询java相关的包

使用rpm -qa  |  grep openjdk  |  xargs rpm -e --nodeps卸载之

安装oracle jdk

采用的tar.gz包安装,解压压缩包jdk-8u161-linux-x64.tar.gz,并且将解压到的文件夹jdk1.8.0_161复制到/usr/java/jdk1.8

tar zxvf jdk-8u161-linux-x64.tar.gz

mkdir -p /usr/java/jdk1.8

mv jdk1.8.0_161/* /usr/java/jdk1.8/

rmdir jdk1.8.0_161/

配置环境变量

vi /etc/profile

将以下内容添加到profile

export JAVA_HOME=/opt/module/jdk1.8

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后刷新

source /etc/profile

当需要将nifi以服务模式运行时,在nifi.sh中增加以下红色语句:

编辑NiFi的/opt/module/nifi/bin/nifi.sh,添加Java环境变量

vim /opt/module/nifi/bin/nifi.sh

添加Java环境变量

JAVA_HOME=/opt/module/jdk1.8

export JAVA_HOME=/opt/module/jdk1.8

1)NiFi后台启动/关闭命令

bin/nifi.sh start

bin/nifi.sh stop

bin/nifi.sh status

2)NiFi前台启动/关闭命令

bin/nifi.sh run  #Ctrl+c 关闭

3)web访问

http://192.168.138.134:9191/nifi

注意:一定要关闭防火墙:centos7临时关闭防火墙

关闭防火墙:systemctl stop firewalld

查看状态:firewall-cmd --state

访问web:

先启动:bin/nifi.sh start

再访问:http://192.168.138.134:9191/nifi

需要等待几分钟才能访问

界面如下:后面详细介绍

2.2.4 安装NiFi服务作为系统服务

(可选,就不再截图了)

1)安装系统服务

   bin/nifi.sh install

2)服务常用启动/关闭命令

   sudo service nifi start

   sudo service nifi stop

   sudo service nifi status

第3章NiFi的使用

3.1 web页面简介

1. NiFi登录后界面

  

2. NiFi登录界面解读

  

3. 全局菜单

4. NiFi登录界面解读

我们现在可以通过在画布中添加processor来开始创建数据流。要执行此操作,请将处理器图标()从屏幕左上方拖动到画布中间(图纸类背景)并将其放在那里。这将为我们提供一个对话框,允许我们选择要添加的处理器:

提示:各个处理器的用途及配置在官网上都有介绍,大约提供了近300个常用处理器。包含但不限于:数据格式转换、数据采集、数据(local/kafka/sorl/hdfs/hbase/mysql/hive/http等)的读写等功能,使用方便,如果不能满足需求,还可以自定义处理器。

5. 配置处理器(以GetFile为例)

3.2 案例一

   需求:导出MySQL数据转换为Json串并保存到本地

3.2.1 添加ExecuteSQL

准备工作:

MySQL的安装:

为了yum顺利进行,配置/etc/resolv.conf,删除原来的nameserver,添加

nameserver 192.168.1.1

nameserver 114.114.114.114

安装perl和numactl

yum install -y perl

yum install -y numactl

卸载已有的mysql-libs

rpm -qa | grep mysql

rpm -qa | grep maria

rpm -e --nodeps 【包名】

上传mysql的jar包:rz

解压:tar xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar -C /opt/module/mysql/

因为这里不是”.tar.gz”文件,所以使用参数“xvf”,如果是”.tar.gz”文件,使用“zxvf”

rpm安装mysql

rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm

如果在rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm这一步报错:

[root@node4 mysql]# rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm

警告:mysql-community-server-5.7.21-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY

错误:依赖检测失败:

       net-tools 被 mysql-community-server-5.7.21-1.el7.x86_64 需要

下载net-tools即可:

[root@node4 mysql]# yum install net-tools

再次rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm即可成功:

设置开机启动

chkconfig mysqld on

启动mysql服务

service mysqld start

关闭密码校验

echo "validate_password=off" >> /etc/my.cnf

重启mysql服务

service mysqld restart

查看root的初始密码

cat /var/log/mysqld.log | more | grep password

修改 mysql root密码

mysql -uroot -p[查看得到的密码]

[root@localhost ~]# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.7.12

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set password='123qwe';

Query OK, 0 rows affected (0.00 sec)

mysql> exit

Bye

(1)添加ExecuteSQL到面板

(2)配置ExecuteSQL:

创建新的Dtabase Connection Polling Service

(3) 点击->配置Database Connection Polling Service

添加URL:jdbc:mysql://node4:3306/mysql(数据库名)

添加驱动:com.mysql.jdbc.Driver

添加本地驱动jar包:/opt/module/mysql/mysql_connector_java/mysql-connector-java-5.1.47.jar

注意:一定要将state改成Enable(操作如下)

添加SQL select Query:select * from mysql.user

修改等待时间:10秒

最终配置如下:

3.2.2 添加ConvertAvroToJSON

3.2.3 添加PutFile

添加输出路径:/opt/module/nifi_out

3.2.4 连接处理器

依次启动ExecuteSQL、ConvertAvroToJSON、PutFile

启动之后,界面如下:但是有一个特殊的地方,ExecuteSQL右上角有一个红色标识

鼠标悬浮在红色标识上:

小插曲:

VMware安装的mysql,发现用nifi前台页面链接不上。

报错信息:is not allowed to connect tothis mmysql server。

解决办法:

mysql -u root -p   登录到mysql中

修改帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

刷新配置:

最后连接成功:

再依次停止ExecuteSQL、ConvertAvroToJSON、PutFile

查看本地文件:

案例一结束,可以删除处理器了

3.3 案例二

     需求:导出Hive数据转换为csv并保存到HDFS

3.3.1 添加SelectHiveQL

(1) 添加SelectHiveQL到面板

(2) 配置数据仓库连接池

注意:这里的目录是hdfs路径

3.3.2添加PutHDFS

3.3.3依次启动SelectHiveQL、PutHDFS

(1)查看生成的文件:http://192.168.138.134:50070/explorer.html#/nifi_test

可以下载查看详细信息,这里我就不操作了

(2)依次停止SelectHiveQL、PutHDFS


http://chatgpt.dhexx.cn/article/mCay39mt.shtml

相关文章

NiFi技术干货

第1章 NiFi概述 1.1 NiFi是什么 简单的说,NiFi就是为了解决不同系统间数据自动流通问题而建立的。虽然dataflow这个术语在各种场景都有被使用,但我们在这里使用它来表示不同系统间的自动化的可管理的信息流。自企业拥有多个系统开始,一些系…

NiFi 基本概念

NiFi基本概念 一. NiFi是什么 Apache NiFi 是一个易于使用, 功能强大且可靠的系统, 用于处理和分发数据。可以自动化管理系统间的数据流。它使用高度可配置的指示图来管理数据路由, 转换和系统中介逻辑, 支持从多种数据源动态拉取数据。NiFi 原来是 NSA(美国国家安全局) 的一…

大数据Nifi简介

目录 1 NIFI简介2 NIFI核心概念3 NIFI构架3.1 网络服务器3.2 流控制器3.3 扩展3.4 FlowFile存储库3.5 内容存储库3.6 源头存储库 1 NIFI简介 Apache NiFi 是一个易于使用,功能强大且可靠的系统,用于处理和分发数据。可以自动化管理系统间的数据流。它支…

springboot error at line 1, column 5. Encountered: “\uff01“ (65281), after : ““

出现这种错误表面mybatis配置文件中sql查询语句中出现了中文字符,需要将对应的中文字符修改为英文。 ERROR 10500 --- [nio-8081-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] …

编码GBK的不可映射字符 和 错误: 非法字符: ‘\uff1b‘

题目:解决编码GBK的不可映射字符 和 错误: 非法字符: ‘\uff1b’ 解决编码GBK的不可映射字符 1)首先,在d盘所示的目录新建一个文本文件(记事本),保存时字符集为utf-8 2)输入(d:&…

如何处理“错误: 非法字符: ‘\uff1b‘”

解决方法:把原代码中的中文分号改为英文分号。 注意事项:中英文切换时应尤其注意符号问题。

Lexical error at line 1, column 20. Encountered: “\uff01“ (65281), after : ““

问题&#xff1a; 测试myBatis的动态SQL的时候&#xff0c;控制台提示我出现了&#xff1a;Lexical error at line 1, column 20. Encountered: "\uff01" (65281), after : "" 的错误 原因&#xff1a; 在<if test"sex !null and sex &#xff0…

深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式

环境&#xff1a; tensorflow1.15&#xff0c;cuda10.0&#xff0c;cudnn7.6.4 将keras训练好保存的.hdf5格式模型转为tensorflow的.pb模型&#xff0c;然后转为tensorrt支持的uff格式。 keras(.hdf5)模型转TensorFlow(.pb) # h5_to_pb.pyfrom keras.models import load_mod…

Jetson 学习笔记(五):pb转uff---pb转onnx转trt----pth转onnx转pb

文章目录 pb转uff具体代码运行结果 pb转onnx转trt具体代码pb转onnx运行结果onnx转化trt方法1:trtexec方法2:onnx-tensorrt工具 推理trt模型 pth转onnxonnx转pb方法1:onnx-tensorflow工具方法2:代码执行 pb转uff具体代码 这里用的是uff自带的一个转换器&#xff0c;直接通过调用…

Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决

项目所需要将Tensorflow 生成的pb模型转为uff模型&#xff0c;方法很简单&#xff0c;但是遇到的问题着实很多&#xff0c;这里主要记录下问题及解决方法&#xff0c;总之&#xff0c;最后是成功生成uff格式的模型的&#xff0c;有需要的可以参考。 pb模型转为uff模型的方法及步…

安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)

欢迎大家关注笔者&#xff0c;你的关注是我持续更博的最大动力 原创文章&#xff0c;转载告知&#xff0c;盗版必究 安装TensorRT&#xff0c;然后导入uff库包的时候报错&#xff1a;ImportError: ERROR: Failed to import module&#xff08;cannot import name GraphDef from…

pb模型转uff模型(tensorflow2.x)

大多数的博客只是提到tensorflow1.x系列下的转换。大概步骤就是安装tensorrt&#xff0c;同时安装tensorrt下的几个python的wl文件。可参见博主之前的博客: 1.tensorrt的安装Ubuntu配置TensorRT及验证_竹叶青lvye的博客-CSDN博客 2.tensorrt下几个whl文件的安装TensorRT加速方…

Sony索尼HLG灰片电影调色LUT预设合集 HLG CINEMATIC LUTPACK BUNDLE

Sony索尼HLG灰片电影调色LUT预设合集 HLG CINEMATIC LUTPACK BUNDLE 原文地址&#xff1a;https://www.aeziyuan.com/t-20546.html 包括用于Sony索尼LOG相机的39组LUT预设。是目前为止Sony索尼相机最好的预设之一。 它适用于支持LUT预设效果的大多数软件。例如Premiere Pro&…

两种HDR格式(HLG, HDR10)的理解

1、HLG只在sps的vui中会携带信息&#xff0c;包括colour_primaries(9)&#xff0c;transfer_characteristics(18)&#xff0c;matrix_coefficients(9) 2、HDR10除了SPS的VUI中携带的信息&#xff0c;在key frame会携带相应的SEI&#xff08;mastering display、content light l…

详解HDR的三个标准——HLG/HDR10/Dolby Vision

HDR的三大标准&#xff1a;HLG&#xff08;Hybrid Log Gamma&#xff09;&#xff1b;HDR10&#xff1b;Dolby Vision HLG&#xff1a;HLG的全称是Hybrid Log Gamma&#xff0c;它是由英国BBC和日本NHK电视台联合开发的高动态范围HDR的一个标准。HLG不需要元数据&#xff0c;能…

HLG移动

在平面坐标系内&#xff0c;有两个坐标轴x轴和y轴。&#xff08;x,y&#xff09;表示点的坐标。 有一点处于&#xff08;x1,y1&#xff09;位置上&#xff0c;他可以向相临8个位置移动&#xff08;移动方式见下图&#xff09;。 划定范围&#xff1a;此点只可以在[0<x<3…

HLG 2025

确定大小 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 50(15 users)Total Accepted: 12(11 users)Rating: Special Judge: NoDescription现在有N个字母&#xff0c;&#xff08;N < 26&#xff09;&#xff0c;我们称之为A、B、C、D......。这次他们之间想确定…

SDR屏幕放HDR(HLG)视频画面泛灰

假设场景线性光E&#xff08;RGB&#xff09;1. SDR&#xff1a;数据位宽为10bit。灰度值2^10 * E1023; HDR&#xff1a;HDR根据OETF&#xff08;光电转换&#xff09;将相对场景线性光映射到非线性信号值 E 0.5&#xff1b; 灰度值2^10*0.5512&#xff1b; 所以本来需要显…

HDR相关标准-HLG/HDR10/HDR10+/DOLBY VISION

目录 主要参考信息 动态元数据及使用 相关标准文件 主要参考信息 杜比视界HDR参数_qq26983255的博客-CSDN博客_pq和hlghttps://blog.csdn.net/qq26983255/article/details/119830337?spm1001.2014.3001.5502 HDR到底是什么&#xff1f;_相见不如怀念-CSDN博客一&#xf…