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
#将压缩包解压至/opt文件夹
tar -xvf nifi-1.14.0-bin.tar.gz -C /opt
均在conf目录下
nifi.properties
可选单独账户登陆(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>
# 启动
bin/nifi.sh start
# 查看状态
bin/nifi.sh status
# 停止
bin/nifi.sh stop
# app日志
tail -100f nifi-app.log
# 用户登陆和操作日志
tail -100f nifi-user.log
# 注意:http和https不同,这里选择的是http方式登陆
http://ip:8443/nifi
# 创建存放CSV源文件的文件夹
mkdir -p /opt/nifi-1.14.0/file_source
vim test.csv
# 如下内容
id,name
1,li
2,wang
3,jia
4,sun
并增加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);
jdbc:postgresql://IP地址:5432/库名
org.postgresql.Driver
启动GetFile后
select * from "class";