Nifi入门实战:CSV写入Postgres

Nifi入门实战

一、docker 安装方式

docker pull apache/nifi:1.14.0
# 注意: 日志文件的数据卷可以创建但是nifi在docker运行时候使用的是nifi:nifi账户,其数据卷创建后默认的Owner是root账户,会造成nifi没有写日志文件的问题。
#   数据卷    本机路径:容器路径
#   -v $PWD/logs:/opt/nifi/nifi-current/logs \
# 可以使用手动到容器内部 `docker exec -it nifi /bin/bash` 再执行`chown nifi nifi-current/logs` 强制将容器的logs文件夹改为nifi用户的。
# 注意:  -e NIFI_WEB_HTTP_PORT='8443' \ 是必须加的,否则非本机访问页面会报错。

docker run \
  --name nifi \
  --privileged=true \
  -p 8443:8443 \
  -d \
  -v $PWD/data:/data \
  -v $PWD/logs:/opt/nifi/nifi-current/logs \
  -e NIFI_WEB_HTTP_PORT='8443' \
  -e SINGLE_USER_CREDENTIALS_USERNAME=root \
  -e SINGLE_USER_CREDENTIALS_PASSWORD=123456789012 \
  apache/nifi:1.14.0

二、普通安装方式

1、资源下载:

https://nifi.apache.org/
Nifi入门实战:CSV写入Postgres_第1张图片

#将压缩包解压至/opt文件夹
tar -xvf nifi-1.14.0-bin.tar.gz -C /opt

2、修改配置文件

均在conf目录下

nifi.properties

Nifi入门实战:CSV写入Postgres_第2张图片

可选匿名登陆:
Nifi入门实战:CSV写入Postgres_第3张图片

可选单独账户登陆(single-user-authorizer)

# 配置文件中出现如下`nifi.properties`,默认就有此配置: nifi.security.user.authorizer=single-user-authorizer
# 使用如下命令设置单用户登陆的密钥信息,注意密码长度需要大于等于12位
./bin/nifi.sh set-single-user-credentials <username> <password>
# 例如执行如下,页面登陆是需要使用
./bin/nifi.sh set-single-user-credentials root 123456789012

配置后login-identity-providers.xml,其中密钥是经过hash的

<--!The 'Username' will be a random UUID and the 'Password' will be stored using bcrypt hashing --!The>
    <provider>
        <identifier>single-user-provideridentifier>
        <class>org.apache.nifi.authentication.single.user.SingleUserLoginIdentityProviderclass>
        <property name="Username">rootproperty>
        <property name="Password">$2b$12$eOGFUrv94WPD9W8oGDTAhORHnE3og7Ry/r6oZdZPYQOH9IPoauQPCproperty>
    provider>

3、启动程序

# 启动
bin/nifi.sh start
# 查看状态
bin/nifi.sh status
# 停止
bin/nifi.sh stop

4、查看日志

# app日志
tail -100f nifi-app.log
# 用户登陆和操作日志
tail -100f nifi-user.log

5、登陆页面

# 注意:http和https不同,这里选择的是http方式登陆
http://ip:8443/nifi

三、CSV文件到Postgres数据库实战

总体步骤
Nifi入门实战:CSV写入Postgres_第4张图片

1、文件准备

# 创建存放CSV源文件的文件夹
mkdir -p /opt/nifi-1.14.0/file_source 
vim test.csv
# 如下内容
id,name
1,li
2,wang
3,jia
4,sun

2、读取CSV文件Nifi入门实战:CSV写入Postgres_第5张图片

Nifi入门实战:CSV写入Postgres_第6张图片
Nifi入门实战:CSV写入Postgres_第7张图片

3、更新表结构值flowfile的属性中

Nifi入门实战:CSV写入Postgres_第8张图片
Nifi入门实战:CSV写入Postgres_第9张图片

4、将CSV转化为JSON串

Nifi入门实战:CSV写入Postgres_第10张图片

进入配置Flow界面
Nifi入门实战:CSV写入Postgres_第11张图片
Nifi入门实战:CSV写入Postgres_第12张图片

4.1 配置CSVReader

Nifi入门实战:CSV写入Postgres_第13张图片

4.2 配置Avro注册器

Nifi入门实战:CSV写入Postgres_第14张图片

并增加class属性的JSON字符串,作为转换时候的Schema信息,其应与数据库表结构信息一致。

{
    "type":"record",
    "name":"ClassRecord",
    "fields":[
        {"name":"id","type":["null","string"]},
        {"name":"name","type":["null","string"]}
    ]
}

数据库表

create table "class" (id text,name text);
4.2 配置JsonRecordSetWriter

Nifi入门实战:CSV写入Postgres_第15张图片

5、JSON转为SQL语句

Nifi入门实战:CSV写入Postgres_第16张图片

5.1 连接池配置

需要配置postgresql的jdbc驱动地址
Nifi入门实战:CSV写入Postgres_第17张图片

jdbc:postgresql://IP地址:5432/库名
org.postgresql.Driver

5.2 执行SQL

最后一个任务
Nifi入门实战:CSV写入Postgres_第18张图片
Nifi入门实战:CSV写入Postgres_第19张图片

6、启用所有controller服务

Nifi入门实战:CSV写入Postgres_第20张图片

7、从前至后依次启动调试

启动GetFile后

Nifi入门实战:CSV写入Postgres_第21张图片

查看数据读取内容
Nifi入门实战:CSV写入Postgres_第22张图片

看到数据内容:
Nifi入门实战:CSV写入Postgres_第23张图片
新增属性后
Nifi入门实战:CSV写入Postgres_第24张图片

查看CSV转JSON情况
Nifi入门实战:CSV写入Postgres_第25张图片

查看SQL语句生成情况
Nifi入门实战:CSV写入Postgres_第26张图片
8、查询结果

select * from "class";

Nifi入门实战:CSV写入Postgres_第27张图片

你可能感兴趣的:(docker,容器,etl)