Apache nifi demo 实验

news/2025/3/4 20:32:10/

Apache nifi 是个数据流系统,可以通过配置 自定义的流程来实现数据的转换。


比如可以配置一个流程,读取数据库里的数据,再转换,最后保存到本地文件。


这样可以来实现一些数据转换的操作,而不用特地编写程序来导入导出。

- 相关资料
国内下载镜像: https://mirrors.aliyun.com/apache/nifi/2.2.0/, 里面有不同的版本,这里下载标准版的nifi-2.2.0-bin.zip
官方文档: https://nifi.apache.org/
processor类型的文档:https://nifi.apache.org/components

本文包含以下内容:
- 启动运行
- 一些概念
- 一个读取csv格式数据,转换为json格式数据,写入到本地磁盘的demo

启动运行:
只需要解压zip,进入bin目录,打开命令行,执行执行nifi start即可启动,启动后密码会生成到logs目录的nifi-app.log文件里,搜索password可以看到生成的账号密码


D:\nifi-2.2.0-bin\nifi-2.2.0\bin>nifi start
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161
NIFI_HOME=D:\ljhlab\nifi-2.2.0-bin\nifi-2.2.0

日志文件里搜索,可以看到:
2025-03-02 22:17:53,849 INFO [main] o.a.n.a.s.u.SingleUserLoginIdentityProvider

Generated Username [8b418056-cf0a-46a3-b08f-a8ba25563eca]
Generated Password [9Va1ZkYgiXtqnOUytqj63ympwhZOjqZi]
这个就是生成的账号密码

异常处理,可能会遇到jdk版本问题,请下载对于版本的jdk
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/nifi/bootstrap/BootstrapProcess has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 52.0
启动失败,可以看到是jdk版本要 65 ,需要jdk21的意思。
修改nifi-env.cmd,添加,或者直接在环境变量里设置JAVA_HOME的值
set JAVA_HOME="D:\env\openjdk-22.0.1_windows-x64_bin\jdk-22.0.1"

- 进入网页·
访问https://localhost:8443 进入网页ui界面

实验demo:

下面进行一个读取本地csv文件,然后导入到另外目录成json格式的实验,这里为了演示方便,csv数据写死在一个输入组件里。

数据准备:

title,author,score
你杀了谁,东野圭吾,7.1
黄仁勋:英伟达之芯,斯蒂芬·威特,7.3 

流程简介: 就是不断添加不同类型的processor,比如获取文件的,转换数据格式的,然后用线将不同组件链接起来,比如读取文件,链接到解析csv,链接的时候选择relationship,每个组件都会有relationship

实验流程:
- 添加一个组件作为输出数据源
- 添加一个转换数据格式的组件,ConvertRecord,转换csv成json格式
- 添加一个组件,将ConvertRecord都内容输出到本地文件

添加一个GenerateFLowFile的组件,用来生成一个FlowFile,FlowFile可以理解为一行数据,即这个组件会输出一行数据,这里生成一个csv数据

刚添加时有问题就会有黄色标,可以点击查看错误,来修正

每个组件都有properties来设置属性,这里点开来设置,这个组件输出的内容

- 再添加一个处理器,ConvertRecord,这个processor可以配置一个reader和writer,这里的话配置一个csv reader,用来解析第一个处理器传进来的数据。

点开properties,看到设置值里是空的,点击create new service创建一个配置。

然后将两个组件链接起来

可以看到还是有警告,是因为还有relationship没有设置,每个都要设置,

像failure就是失败时的,如果不需要进一步处理可以勾选terminate。success的等会会和链接到一个写入文件的组件里,这里测试也可以暂时设置为terminate先。
如果看到这种警告,就是刚刚添加的service还有有启动,打开properties,点击三个点,点go to service,把服务启动就行,在这里也可以进一步配置这些服务的属性

然后没有警告了,运行测试下,先启动第一个GenerateFlowFile,右键start

可以看到queued里有一个等待了,因为下一个组件还没启动,就在队列里了,再启动CovertRecord来消费。

启动后可以看到in了三个,由于没有输出,可以点击VIew Data Provenance来检查,输入的数据情况。

点击view detail,可以看到输入输出情况,

输出的已经是json格式了,然后可以,添加一个写出的processor,来输出到某个目录。
继续添加processor,

继续链接到一起

然后配置下putFIle的properties,设置写出的目录,
右键start,后可以看到目录以及有写出的文件了。

经验:
- 下拉框为空时,点击三点可以打开创建新service的菜单
- properties tab里配置完后可以点击verfication验证


http://www.ppmy.cn/news/1576635.html

相关文章

自然语言处理:稀疏向量表示

介绍 大家好,我是博主。今天又来和大家分享自然语言处理领域的知识了。原本我计划这次分享NLP中文本表示的相关内容,不过在整理分享计划的过程中,发现这部分知识里包含一些涉及复杂数学原理和抽象概念的内容。对于刚接触NLP的小伙伴们来说&a…

【easy视频 | day02】管理端登录校验 + 分类管理 + 文件上传

文章目录 前言回顾完成任务1. 管理端登录登录校验 2. 分类管理2.1 分类列表2.2 保存分类2.3 删除分类2.4 改变排序2.5 刷新缓存 3. 文件上传3.1 上传图片3.2 获取图片资源 前言 本项目非原创,我只是个小小白,跟随 b 站脚步,找到老罗的这个项…

共轭梯度法笔记

一、梯度下降法 x k 1 x k − α ∇ f ( x k ) x_{k1} x_k - \alpha \nabla f(x_k) xk1​xk​−α∇f(xk​) 这是普通的梯度下降公式,有两个量是关键,步长 α \alpha α和方向 ∇ f ( x k ) \nabla f(x_k) ∇f(xk​)。这里的方向直接选择了梯度方向&…

004build在设计页面上的使用

004_a_StatefulWidget和State的语法结构_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1RZ421p7BL?spm_id_from333.788.videopod.episodes&vd_source68aea1c1d33b45ca3285a52d4ef7365f&p152 StatelessWidget无状态小部件不能setState刷新build import packag…

CentOS 7 中安装 Docker和Docker Compose

本文介绍CentOS7系统安装Docker和Docker Compose的完整操作步骤 一、环境准备‌ 验证系统内核版本:uname -r(需≥3.10) 更新系统软件包:sudo yum update -y‌ 二、卸载旧版本 sudo yum remove docker \ docker-client \ docke…

赛博算命之 ”梅花易数“ 的 “JAVA“ 实现 ——从玄学到科学的探索

hello~朋友们!好久不见! 今天给大家带来赛博算命第三期——梅花易数的java实现 赛博算命系列文章: 周易六十四卦 掐指一算——小六壬 更多优质文章:个人主页 JAVA系列:JAVA 大佬们互三哦~互三必回!&#xf…

爬虫系列之发送请求与响应《一》

一、请求组成 1.1 请求方式:GET和POST请求 GET:从服务器获取,请求参数直接附在URL之后,便于查看和分享,常用于获取数据和查询操作 POST:用于向服务器提交数据,其参数不会显示在URL中,而是包含在…

迷你世界脚本玩家接口:Player

玩家接口:Player 彼得兔 更新时间: 2024-07-28 17:49:05 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 玩家属性获取 2 setAttr(...) 玩家属性设置 3 getHostUin(...) 获取房主uin 4 isMainPlayer(...) …