[NiFi] Custom Processor 적용하기

CHAN LIM·2024년 1월 2일
0

NiFi

목록 보기
4/13
post-thumbnail

Intro.

  • NiFi는 (1.24.0 Version 기준으로) 354개의 프로세서를 가지고 있다.
  • 왠만하면 해당 프로세서들로 모든 작업을 처리할 수 있고 대부분의 서드파티와 연결할 수 있다.
  • 다만, 작성자가 진행하려는 Snowflake Stage 연결은 아직까지 지원하지 않는다.
  • 따라서, Paulgibeault가 개발한 SnowflakeNiFiProcessor를 나의 NiFi에 적용하고자 한다.
  • Snowflake 연결과 더불어 NiFi에 Custom Processor를 추가하는 방법을 정리하기 위해 작성한다.

0. 사전 조사.

  • 2024년 1월 기준,
    NiFi는 Snowflake Processor를 제공하지 않는다.

  • 기본 JDBC Processor 또는 Amanzon SNS/SQS를 사용하여 연결한다.

  • Paulgibeault가 제공한 SnowflakeNiFiProcessor는 작성자가 원하는 작업이 가능하므로, 해당 커스텀 프로세서를 NiFi에 추가한다.

  • pom.xml 파일이 있는 것으로 보아,
    Maven 패키지로 파악된다.
    • 따라서, 해당 프로세서를 설치하려면 Maven이 요구된다.
  • 1. Maven 설치
  • 2. git 설치
  • 3. git을 통해 해당 패키지 Clone하기
  • 4. Custom Processor 빌드
  • 5. NiFi에 적용하기

1. 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"

2. git 설치

$ sudo apt update
$ sudo apt-get install git
$ git --version

git version 2.25.1

3. git을 통해 해당 패키지 Clone하기

원하는 설치 디렉토리에 이동 후에 설치한다.

$ cd ~~~~

$ git clone https://github.com/paulgibeault/SnowflakeNiFiProcessors.git

4. Custom Processor 빌드 및 적용

복제 작업에서 생성된 폴더로 이동한 다음 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

5. 적용 확인



[해결]

[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를 삭제하고 빌드를 했더니 잘 동작한 것을 확인했다.

snowflake-processors/pom.xml 수정

    <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 부분인데, 삭제한다.

Test Code 삭제

$ 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] ------------------------------------------------------------------------

빌드 성공


출처

Paulgibeault
NiFiSnowflake

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글