需求:

读取window下csv文件到linux本地并上传HDFS

分析:

  1. Window上传hdfs可以通过PutHDFS处理器上传,但是跨系统无法做到window本地文件传输到Linux系统。
  2. 需要通过中间介质连通两个系统节点,考虑http协议,它基于TCP之上,保证数据正确性以及数据的顺序。
  3. 选择处理器:ListenHTTP、LnvokeHTTP(PostHTTP已弃用)。

    处理器介绍:

  4. ListenHTTP:启动HTTP Server并侦听给定的基本路径,以将传入的请求转换为FlowFiles。服务的默认URI为http:// {hostname}:{port} / contentListener。仅支持HEAD和POST请求。GET,PUT和DELETE将导致错误和HTTP响应状态代码405。

  5. LnovkeHTTP:可以与可配置的HTTP端点进行交互的HTTP客户端处理器。目标URL和HTTP方法是可配置的。FlowFile属性转换为HTTP标头,并且FlowFile内容作为请求的正文包括在内(如果HTTP方法为PUT或POST)。

实现:

需要在linux和window下同时安装nifi,以做到不同系统点到点传输。

1. linux下cdh集群cfm安装

  1. 参考【hadoop实操】安装文档:

http://mp.weixin.qq.com/s?__biz=MzI4OTY3MTUyNg==&mid=2247497836&idx=1&sn=c2ed4fb1da413bcb317ddd5c9a7a5193&chksm=ec292865db5ea173b48ec603ad3914b93cd90b0ebddca63d211b61358cd29f781bb6399bbb53&scene=21#wechat_redirect

2. window下安装Nifi

  1. 下载nifi

地址:https://archive.apache.org/dist/nifi/1.0.0/

  1. 解压

Nifi读取window文件写入hdfs和linux本地 - 图1

  1. 端口冲突可在配置文件conf/nifi.properties文件修改端口号等参数

Nifi读取window文件写入hdfs和linux本地 - 图2

  1. 运行nifi

Windows下直接双击run-nifi.bat,或者按住Shift+右击,选择在此处打开cmd,输入run-nifi.bat,回车启动,前者出错将直接关闭cmd,后者启动方式即使报错也不会自动关闭命令窗。

  1. 测试是否安装成功

启动服务后稍等几分钟,打开浏览器访问 :http://localhost:8080/nifi/
出现nifi页面,表示安装成功
Nifi读取window文件写入hdfs和linux本地 - 图3

3. Window系统上传csv文件至linux本地和hdfs

参考文档:https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#site-to-site
参考文档:https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#nifi

  1. Linux端添加ListenHTTP处理器,监听端口获取window发送的数据

Nifi读取window文件写入hdfs和linux本地 - 图4

  1. 修改ListenHTTP处理器配置

Nifi读取window文件写入hdfs和linux本地 - 图5

  1. 添加PutHDFS处理器上传ListenHTTP的数据到HDFS

Nifi读取window文件写入hdfs和linux本地 - 图6

  1. 修改PutHDFS处理器配置,指定hdfs-site.xml、core-site.xml配置文件(从hdfs/etc/hadoop/conf/拷贝)、指定文件存储位置等配置。

Nifi读取window文件写入hdfs和linux本地 - 图7
Nifi读取window文件写入hdfs和linux本地 - 图8

  1. 添加PutFile处理器存储文件到linux本地,详细配置如下

Nifi读取window文件写入hdfs和linux本地 - 图9
Nifi读取window文件写入hdfs和linux本地 - 图10

  1. 处理器添加成功后连接三个处理器如下图。全选三个处理器点击运行

Nifi读取window文件写入hdfs和linux本地 - 图11

  1. Linux系统查询9999端口是否成功被监听

Nifi读取window文件写入hdfs和linux本地 - 图12

  1. window端添加GetFile处理器拉取本地文件并修改配置

Nifi读取window文件写入hdfs和linux本地 - 图13
Nifi读取window文件写入hdfs和linux本地 - 图14

  1. 添加inovekHTTP处理器并修改配置

Nifi读取window文件写入hdfs和linux本地 - 图15
Nifi读取window文件写入hdfs和linux本地 - 图16
Nifi读取window文件写入hdfs和linux本地 - 图17

  1. 连接两个处理器如下图。按住Shift全选两处理器点击运行

Nifi读取window文件写入hdfs和linux本地 - 图18

4. 测试

  1. Window上传文件到指定路径(C:\Users\duan\OneDrive\桌面\csv)

Nifi读取window文件写入hdfs和linux本地 - 图19

  1. Nifi显示有数据流动

Nifi读取window文件写入hdfs和linux本地 - 图20

  1. 查询hdfs和本地路径,文件成功导入

Nifi读取window文件写入hdfs和linux本地 - 图21

5. 总结

  1. Nifi指定的输出文件(/data/output)需要修改权限

chown nifi:nifi /data/output