NiFi的编译打包问题
maven指定打包包名
- 包名:pom文件- - -在
maven-assembly-plugin
中<configuration>
下指定,没有的话自己创建。
<finalName>yourname</finalName>
如果单纯的需要指定的名字(如不要-bin后缀)则添加:
<appendAssemblyId>false</appendAssemblyId>
- 格式:3.1.0后支持tgz等更多格式
<artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</version>
<formats> <format>tgz</format> </formats>
- 解压包后的名称:
<formats>
<format>tgz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory> <baseDirectory>解压后名称</baseDirectory>
maven过滤系统变量
<source>
<location>${project.build.directory}/generated-resources/bin/nifi.sh</location>
<destination>nifi.sh</destination>
<filter>false</filter>
<fileMode>0775</fileMode>
</source>
当filter指定为true时,会将nifi.sh中的java环境变量替换为系统java变量的绝对路径,换一台别的机器可能出现异常。
其中fileMode为设置文件的权限。
maven指定文件格式unix或者dos
<lineEnding>unix</lineEnding>
添此时可能的值包括:
- “keep”-保留所有行尾
- “ unix”-使用Unix样式的行尾(例如“ \ n”)
- “ lf”-使用单个换行符(即“ \ n”)
- “ dos”-使用DOS- / Windows样式的行尾(例如“ \ r \ n”)
- “ windows”-使用DOS- / Windows样式的行尾(例如“ \ r \ n”)
- “ crlf”-使用回车符,换行符(例如“ \ r \ n”)
版本问题
ElasticSearch6.x
NiFi与ES6.x版本并不兼容,尝试去修改关于ES5.x的处理器连接ES6.x。
-
步骤1:
修改nifi-elasticsearch-5-processors
的pom文件。将pom文件中关于ES的版本替换为6.3.2(这是我们使用的版本),luceuce的版本可通过ES命令查看,这里是7.3.1。(一般都会先去修改pom文件) -
步骤2:
修改代码,ES6.x的API明显与ES5.x的不同,修改错误处即可。注意,代码中向ES写入时需要添加下边一行代码。即放置在(Settype… .get())后。(修改pom文件后当然要修改源码了)XCentType.JSON //(记不太清楚了)
-
步骤3:
修改名字,将关于5的版本名字全部替换为6的,主要为nifi-elasticsearch-5-processors
和nifi-elasticsearch-5-nar
的部分。(注意:不要忘记将/src/main/resources/META-INF/services/
目录下的文件内容修改为6.)将nifi-elasticsearch-6-processors
打为jar包,后边要用到。 -
步骤4:
大致已经完成,但是编译时会出现找不到nifi-elasticsearch-6-processors
,向maven依赖库中添加自己的jar包,具体地址可在通过maven根目录下conf中的setting.xml查看(localRepository)。放入到./m2/repository/org/apache/nifi/nifi-elasticsearch-processors
下。在此目录下放置pom文件(我使用了ES5的pom文件,处理器一直报ES初始化版本错误,将ES5的pom文件里边ES版本修改就好了)。
步骤5:
将nifi-elasticsearch-6-nar
编译打成nar包,放入到nifi跟目录下的lib中即可。(注意要重启nifi的~)
步骤6:
如果你想将nifi-elasticsearch-6-nar
的nar包直接打入到lib文件下,你就需要修改nifi-assembly下的pom文件,在其中添加nifi-elasticsearch-6-nar
依赖。(找了好长一段时间…)
npm离线安装 与 Hive3
关于nifi-1.8.0.xxxx(后边一串的)版本与Hive3的链接
当我修改完ES6时,我就需要提交代码和我的maven库到内网(不联网)上去编译打包了。在自己电脑上已经编译过了,想着不会出什么问题(源码和依赖库都没变)。结果就出现一系列问题。
1.nifi-web-ui
找不到node-1.8.0.linux-x64
,好吧,这个问题很简单,下载个上传上去就好了。
2.nifi-web-ui
又出错了,npm --cache-min Install安装出错。
查资料:主要参考各个博客,懒得找出处了~
- npm安装需要联网去安装模块,安装后会在.npm文件夹下保存安装包,然后在目录的node-modules进行安装。
- ok了,在window下,找到npm-cache文件夹,将安装包考出来。(我中间自己执行了npm --cache install,将安装包考出来后nifi编译别的nar包时又出这个错了,这个npm模块的包还挺多的,最好自己将nifi完整编译完后再考出.npm的安装包)导入到内网,linux中的
/root/.npm
目录下。我这里是这个,其他自己找找
3.终于完成了,但是看着处理器怎么这么少,没有关于hive3的处理器,这不是闹吗, 我们用的就是hive3.x的。还是在nifi-assembly
的pom文件下。寻找hive3就行,将active什么的false换为true即可。再次编译打包,处理器终于够了,但是这个文件大小不太对,这个关于hive3的nar包怎么才150M,试试果然不能用(nifi-1.8.0.xxxx简直够了,这么坑)。
4. 最简单的办法,将nifi-hive3-nar
下pom文件中的nifi-hive3-processors
的版本改为1.8.0即可。
原因:nifi-hive-bundle
下的hive和hadoop版本问题,可以在依赖库看到其pom文件与其他版本的不同,缺少很多依赖。修改hive3和hadoop版本即可。