- NiFi는 (1.24.0 Version 기준으로) 354개의 프로세서를 가지고 있다.
- 왠만하면 해당 프로세서들로 모든 작업을 처리할 수 있고 대부분의 서드파티와 연결할 수 있다.
- 다만, 작성자가 진행하려는 Snowflake Stage 연결은 아직까지 지원하지 않는다.
- 따라서, Paulgibeault가 개발한
SnowflakeNiFiProcessor
를 나의 NiFi에 적용하고자 한다.
- Snowflake 연결과 더불어 NiFi에 Custom Processor를 추가하는 방법을 정리하기 위해 작성한다.
2024년 1월 기준,
NiFi는 Snowflake Processor를 제공하지 않는다.
기본 JDBC Processor
또는 Amanzon SNS/SQS
를 사용하여 연결한다.
Paulgibeault가 제공한 SnowflakeNiFiProcessor는 작성자가 원하는 작업이 가능하므로, 해당 커스텀 프로세서를 NiFi에 추가한다.
pom.xml
파일이 있는 것으로 보아,
Maven 패키지로 파악된다.
- 따라서, 해당 프로세서를 설치하려면 Maven이 요구된다.
Maven은 Apache에서 제공하기에, Java 기반이다.
- 따라서, Java를 먼저 설치해야한다.
- 작성자는 이미 Java를 설치했으므로 생략한다.
$ sudo apt update
$ sudo apt install maven
$ mvn --version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.21, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-91-generic", arch: "amd64", family: "unix"
$ sudo apt update
$ sudo apt-get install git
$ git --version
git version 2.25.1
원하는 설치 디렉토리에 이동 후에 설치한다.
$ cd ~~~~
$ git clone https://github.com/paulgibeault/SnowflakeNiFiProcessors.git
복제 작업에서 생성된 폴더로 이동한 다음 Maven 빌드를 실행한다.
- 정상적으로 빌드가 된다면 다행이다.
- (아마, 바로 안될 가능성이 100% 이다.)
- 그 이유는 해당 패키지가 꽤 오래된 상태이기 때문이다.
- 해결 방법은 하단에 작성할 것이다.
$ cd ./SnowflakeNifiProcessors
$ mvn clean install
아티팩트 빌드가 수행되는 위치는 Maven 구성 방법에 따라 다릅니다.
- 나에게는 폴더로 이동 ~/.m2입니다만, 사람마다 다를 수 있습니다.
snowflake-nar-1.0.0.nar
를
- nar는 jar와 유사한 "nifi 아카이브"이며 nifi 프로세서 기능을 패키지하는 방법입니다.
/opt/nifi/lib
에 이 파일을 아래의 nifi 라이브러리에 복사한 다음 새 nar가 인식되도록 nifi를 다시 시작 해야 한다.
$ cd ~/.m2/repository/com/snowflake/nifi/snowflake-nar/1.0.0
$ cp snowflake-nar-1.0.0.nar opt/nifi/lib
$ ./nifi.sh restart
[INFO]
[INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ snowflake-processors ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for snowflake-bundle 1.0.0:
[INFO]
[INFO] snowflake-bundle ................................... SUCCESS [ 2.368 s]
[INFO] snowflake-processors ............................... FAILURE [ 12.291 s]
[INFO] snowflake-nar ...................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.358 s
[INFO] Finished at: 2024-01-02T08:26:23+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project snowflake-processors: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test failed.: NullPointerException -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <args> -rf :snowflake-processors
작성자의 경우,
해당 패키지 빌드 시 Test Code에서 빌드가 매번 실패했다.
따라서, 해당 패키지에서 Test Code를 삭제하고 빌드를 했더니 잘 동작한 것을 확인했다.
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
<executions>
<execution>
<id>failsafe-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<executions>
<execution>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
해당 파일 맨 밑의
Test 관련 Plugin
부분인데, 삭제한다.
$ cd /SnowflakeNiFiProcessors/snowflake-processors/src
$ rm -rf test
[INFO] Building jar: /home/chan01/extools/SnowflakeNiFiProcessors/snowflake-nar/target/snowflake-nar-1.0.0.nar
[INFO]
[INFO] --- maven-site-plugin:3.7:attach-descriptor (attach-descriptor) @ snowflake-nar ---
[INFO] Skipping because packaging 'nar' is not pom.
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ snowflake-nar ---
[INFO] Installing /home/chan01/extools/SnowflakeNiFiProcessors/snowflake-nar/target/snowflake-nar-1.0.0.nar to /home/chan01/.m2/repository/com/snowflake/nifi/snowflake-nar/1.0.0/snowflake-nar-1.0.0.nar
[INFO] Installing /home/chan01/extools/SnowflakeNiFiProcessors/snowflake-nar/pom.xml to /home/chan01/.m2/repository/com/snowflake/nifi/snowflake-nar/1.0.0/snowflake-nar-1.0.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for snowflake-bundle 1.0.0:
[INFO]
[INFO] snowflake-bundle ................................... SUCCESS [ 23.098 s]
[INFO] snowflake-processors ............................... SUCCESS [01:25 min]
[INFO] snowflake-nar ...................................... SUCCESS [ 3.188 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:54 min
[INFO] Finished at: 2024-01-02T09:16:51+09:00
[INFO] ------------------------------------------------------------------------
빌드 성공