[NiFi] Hello Python?

CHAN LIM·2024년 1월 30일
0

NiFi

목록 보기
13/13


Intro.

NiFi에서 Python code 실행하기.


0. 전체 프로세스

추가로,
서버 머신에서 Python Code를 실행 및 확인하기 위해
Python을 설치하는 과정을 기입할 예정이다.

사실 패키지로 설치만 하면 완료이므로 짧아서 한번에 정리


1. Python 설치

1.1 Python 설치를 위한 PPA 추가

$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo add-apt-repository ppa:deadsnakes/ppa
  • 이 명령어는 APT (Advanced Package Tool) 패키지 관리자에 새로운 소프트웨어 소스를 추가합니다.
  • 여기서는 "deadsnakes"라는 PPA(Personal Package Archive)를 추가하고 있습니다.
  • 이 PPA는 Python의 여러 버전을 제공하는데, 특히 공식 저장소에는 없거나 더 최신 버전의 Python을 사용하고자 하는 경우 유용합니다.

결론은,
이 두 명령어를 사용하면 PPA를 추가하고 패키지 색인을 업데이트하면,
Python 버전을 포함한 다양한 소프트웨어를 설치할 수 있다.

패키지가 잘 업데이트 되었는지 확인하기

$ apt list | grep python3.10

<결과>

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

idle-python3.10/focal,focal 3.10.13-1+focal1 all
libpython3.10-dbg/focal 3.10.13-1+focal1 amd64
libpython3.10-dev/focal 3.10.13-1+focal1 amd64
libpython3.10-minimal/focal,now 3.10.13-1+focal1 amd64 [installed,automatic]
libpython3.10-stdlib/focal,now 3.10.13-1+focal1 amd64 [installed,automatic]
libpython3.10-testsuite/focal,focal 3.10.13-1+focal1 all
libpython3.10/focal 3.10.13-1+focal1 amd64
libqgispython3.10.4/focal 3.10.4+dfsg-1ubuntu2 amd64
python3.10-dbg/focal 3.10.13-1+focal1 amd64
python3.10-dev/focal 3.10.13-1+focal1 amd64
python3.10-distutils/focal,focal 3.10.13-1+focal1 all
python3.10-examples/focal,focal 3.10.13-1+focal1 all
python3.10-full/focal 3.10.13-1+focal1 amd64
python3.10-gdbm-dbg/focal 3.10.13-1+focal1 amd64
python3.10-gdbm/focal 3.10.13-1+focal1 amd64
python3.10-lib2to3/focal,focal 3.10.13-1+focal1 all
python3.10-minimal/focal,now 3.10.13-1+focal1 amd64 [installed,automatic]
python3.10-tk-dbg/focal 3.10.13-1+focal1 amd64
python3.10-tk/focal 3.10.13-1+focal1 amd64
python3.10-venv/focal 3.10.13-1+focal1 amd64
python3.10/focal,now 3.10.13-1+focal1 amd64 [installed]

1.2 Python 설치

$ sudo apt install python3.xx (원하는 버전)
$ python3 -V

2. Python 가상환경

Python 가상환경 관련 끄적임

물리적인 하나의 큰 시스템 공간을 논리적으로 나누는 것

  • 각기 다른 프로그램에서 같은 패키지를 요구하지만 각 프로그램에서 요구하는 버전이 다른 경우,

    -> 각 프로그램을 실행할 때 마다
    해당 패키지를 지우고 설치하고를 반복해야한다.

  • 가상환경을 활성화하면 각 프로그램을 위한 논리적 공간에서 패키지를 설치하므로 위의 문제를 해결할 수 있다.

2.1 Python 가상환경 패키지 설치

$ sudo apt install python3-venv

2.2 Python 가상환경 생성

$ python -m venv {이름}

2.3 Python 가상환경 활성화

$ source {가상환경 경로}/bin/activate

# 가상환경에서 나오고 싶을 땐,
deactivate

활성화가 제대로 되었는지 확인할 때에는 생성한 가상 환경의 이름으로 프롬프트 앞쪽에 뜬다.


2.4 Python 실행 확인

$ vi hello.py

# 간단한 코드 작성 후 저장
print("Hello, World!")

$ ./hello.py
Hello, World!

3. NiFi 프로세서 설정

3.1 Main Processor

ExecuteScript

  • Script 즉, Code를 실행하는 프로세서
  • 각각의 이름은 작성한 Code에 따라 수정한 상태
    • 속성을 추가하는 Code
    • Comment를 추가하는 Code

프로세서 속성 설정

Code를 실행할 Engine을 설정하고
Code가 위치한 디렉터리를 설정한다.


3.2 속성 추가 코드

 1 flowFile = session.get()
  2 if flowFile != None:
  3     # 속성을 업데이트 한다, 만약 해당 속성이 없다면 생성한다.
  4     flowFile = session.putAttribute(flowFile, "message", "Hello-World")
  5 session.transfer(flowFile, REL_SUCCESS)

3.3 Content 추가 코드

  1 #!/home/chan00/testzone/nipython/bin/python
  2
  3 from org.apache.commons.io import IOUtils
  4 from java.nio.charset import StandardCharsets
  5 from org.apache.nifi.processor.io import OutputStreamCallback
  6
  7 # session.write()에서 사용하기 위해 OutputStreamCallback의 서브 클래스를 정의한다.
  8 class PyOutputStreamCallback(OutputStreamCallback):
  9   def __init__(self):
 10         pass
 11   def process(self, outputStream):
 12     outputStream.write(bytearray('Hello World!'.encode('utf-8')))
 13 # 클래스 끝
 14
 15 flowFile = session.get()
 16 if(flowFile != None):
 17     flowFile = session.write(flowFile, PyOutputStreamCallback())
 18 session.transfer(flowFile, REL_SUCCESS)

개발자 가이드

  • 해당 문서를 보고 Code를 작성한다.
#!/home/chan00/testzone/nipython/bin/python

"shebang"

  • 리눅스 및 유닉스 시스템에서 사용되며, 스크립트가 어떤 인터프리터로 실행되어야 하는지를 지정한다.
  • 가상환경 사용 시, 해당 코드를 추가해야지 가상환경의 인터프리터로 작동한다.

4. 동작 확인

4.1 속성 추가

4.2 Content 추가

부분 에러가 났지만,
Flowfile에 동일한 이름이 있다는 에러이니 무시해도 좋다.


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

0개의 댓글