NiFi에서 Python code 실행하기.
추가로,
서버 머신에서 Python Code를 실행 및 확인하기 위해
Python을 설치하는 과정을 기입할 예정이다.
사실 패키지로 설치만 하면 완료이므로 짧아서 한번에 정리
$ 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]
$ sudo apt install python3.xx (원하는 버전)
$ python3 -V
물리적인 하나의 큰 시스템 공간을 논리적으로 나누는 것
각기 다른 프로그램에서 같은 패키지를 요구하지만 각 프로그램에서 요구하는 버전이 다른 경우,
-> 각 프로그램을 실행할 때 마다
해당 패키지를 지우고 설치하고를 반복해야한다.
- 가상환경을 활성화하면 각 프로그램을 위한 논리적 공간에서 패키지를 설치하므로 위의 문제를 해결할 수 있다.
$ sudo apt install python3-venv
$ python -m venv {이름}
$ source {가상환경 경로}/bin/activate
# 가상환경에서 나오고 싶을 땐,
deactivate
활성화가 제대로 되었는지 확인할 때에는 생성한 가상 환경의 이름으로 프롬프트 앞쪽에 뜬다.
$ vi hello.py
# 간단한 코드 작성 후 저장
print("Hello, World!")
$ ./hello.py
Hello, World!
- Script 즉, Code를 실행하는 프로세서
- 각각의 이름은 작성한 Code에 따라 수정한 상태
속성
을 추가하는 CodeComment
를 추가하는 Code
Code를 실행할 Engine을 설정하고
Code가 위치한 디렉터리를 설정한다.
1 flowFile = session.get()
2 if flowFile != None:
3 # 속성을 업데이트 한다, 만약 해당 속성이 없다면 생성한다.
4 flowFile = session.putAttribute(flowFile, "message", "Hello-World")
5 session.transfer(flowFile, REL_SUCCESS)
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"
- 리눅스 및 유닉스 시스템에서 사용되며, 스크립트가 어떤 인터프리터로 실행되어야 하는지를 지정한다.
- 가상환경 사용 시, 해당 코드를 추가해야지 가상환경의 인터프리터로 작동한다.
부분 에러가 났지만,
Flowfile에 동일한 이름이 있다는 에러이니 무시해도 좋다.