레이블이 zeppelin인 게시물을 표시합니다. 모든 게시물 표시
레이블이 zeppelin인 게시물을 표시합니다. 모든 게시물 표시

2021년 7월 15일 목요일

APACHE ZEPPELIN DYNAMIC FORM 고급 응용


APACHE ZEPPELIN DYNAMIC FORM 고급 응용

제목은 거창하지만, 실제론 dynamic form 메뉴얼의 부실함을 보강하고자 포스팅 함.

jdbc 는 지난번 글을 잘 따라 했으면 별 이상이 없을 것이다.

그리고 zeppelin의 dynamic form이란걸 써보면.. (아래 링크 가서 좀 보고 오자!)

https://zeppelin.apache.org/docs/0.9.0/usage/dynamic_form/intro.html

오~~! 귀찮은 검색 항목 만드는 거 안해도 되네?

텍스트 입력에, 셀렉트, 비번, 거기다가 체크박스 까지!!!


오늘도 삽질의 대가는 열심히 삽질을 합니다..

사실.. 오늘이 아니라.. 1달 넘었습니다.


진짜.. 메뉴얼이 너무 부실해서.. 환장하겠음..

그리고 기본 설명이 $를 사용하는 거만 나와서리..

응용을 어떻게 해야하는 막연함이 느껴진다.

기본 응용 (해당 내용들도 여기저기 흩어져 있어서 찾기도 힘들다..)

https://zeppelin.apache.org/docs/0.9.0/interpreter/python.html



1. noteTextbox 에 placeholder 처럼 기본 값을 표시하고 싶다.

z.noteTextbox("최초입고시작일", "YYYYMMDD");
(입력 폼 이름, 기본값) 의 형태로 작성

2. noteSelect 사용 방법
기본은 z.noteSelect("f2",[("o1","1"),("o2","2")],"o1") 형식으로
(입력 폼 이름, 옵션항목, 기본값) 의 형태로 작성
좀 더 응용을 하면.

arrRetYear = [("2021","2021"),("2020","2020"),("2019","2019"),("2018","2018"),("2017","2017"),("2016","2016")]; 
selRetYear = z.noteSelect("조회년도", arrRetYear, "2021"); 
arrChkOpt2 = [("N","미출력"), ("Y","출력"), ] 
selChkOpt2 = z.noteSelect("합계출력", arrChkOpt2);
이런 식으로 옵션의 항목을 따로 코드로 작성하고 할당하는 식으로 코드를 작성했다.


3. noteCheckbox 사용 방법이 항목이 제일 난관이었음.
메뉴얼에는 $를 사용하는 것만 있음.
내가 하고 싶었던건 공통으로 체크 입력 항목을 놓고
선택된 것들에 대한 집계를 내려고 했으나,
이상하게 Class Cast 오류만 신나게 뿜어 댐.
물론 쿼리 안에다가 $를 사용하는 것은 잘 됐음.
엄청 삽질하다가 결국 알아낸 것.


가. 일단 공통으로 쓸 체크박스 폼을 python 에서 작성한다. (매우 중요!)

arrRetYear = [("2021","2021"),("2020","2020"),("2019","2019"),("2018","2018"),("2017","2017"),("2016","2016")]; 
selRetYear = z.noteCheckbox("조회년도", arrRetYear, "2021");

위의 예를 보면.. 셀렉트와 완전 같다. 기본값 지정하는 것도.

나. python으로 작성된 paragraph를 미리 한번 실행해서 공통 입력을 받을 체크박스 폼을 생성한다.

다. jdbc를 연동한 paragraph 에 체크박스 폼의 값을 사용하는 곳에 입력을 한다.

$${checkbox(:):조회년도=,2021|2020|2019|2018|2017|2016}'


위의 예제설명:

{checkbox(구분자):폼양식명(python에서 사용한것과 일치!)=기본값(여기선 선택안함),체크박스 배열의 key 또는 이름}

여기서 제일 마지막 항목의 체크박스 배열의 key 또는 이름은 두개다 사용해 봤는데,
키 값을 넣던, 이름을 넣던 상관없이 python에서 준 코드 값으로 넘어갔다.

4. paragraph를 연속적으로 실행
지난번에 z.run(paragraphId) 로 해당 paragraph를 실행하라고 했는데, 3가지 선택사항이 있다.

가. z.run(paragraphId) : 해당 paragraph 1개 실행
나. z.run(noteId, paragraphId) : 해당 note의 해당 paragraph 1개 실행
다. z.runNote(noteId) : 해당 note의 모든 paragraph 실행

디버깅 할 때는 z.run이 편하고, 완성하고 runNote로 교체하니 코드가 깔끔하게 정리가 됐다.
참고로, 메뉴얼에 z.run 이라고 써 있다고 그대로 하면 안된다.. z.z.run 이라고 해야 함. 
(; ̄Д ̄)
z.runNote 는 z.z 라고 안해도 됨.. (이게 뭐냐...)

후기.
메뉴얼이 너무 부실해서 저 체크박스 알아내는데, 정말 오래 걸렸다.
나온지 꽤 된 걸로 알고 있는데도 아직도 메뉴얼이 엉망진창이다.
이후에 개발하시는 분들은 이걸 보고 그나마 조금이라도 고생을 덜 하시길...
〜( ̄▽ ̄〜)

2021년 6월 3일 목요일

Apache Zeppelin Dynamic Form + JDBC 연동

Apache Zeppelin 에는 Dynamic Form 이란 것이 있다..

paragraph에 사용자가 원하는 매개변수를 입력받을 수 있게 하는 양식을 제공하는 기능이다.

일단 메뉴얼 투척~~!

https://zeppelin.apache.org/docs/0.9.0/usage/dynamic_form/intro.html


메뉴얼 보면.. 매개 변수로 쓸 것을 ${변수명} 으로 사용하면 된다....

라고.. 아주~~~ 간단히 나와있다..


물론.. 이렇게 쓰면 되긴 된다..

그런데 말이지... 이렇게 쓰면.. 큰 문제가 생긴다..(나만 그런걸지도..)


일단 내가 하고 싶은거

공통 입력으로 시작일, 종료일, 매장 선택하여.. 매장별 매출등을 조회하고 싶음


1. 삽질 시작 

아~~ 매뉴얼 대로 쿼리 안에다가 넣으니까 폼이 생기고... 오오~~ 신기하네~~ 잘된다..

흠.. 그럼.. 한 Note에 paragraph 3개 생성해서.. jdbc로 연동한 걸

하나는 표, 차트 두개로 해 볼까?

2. 당혹

흠... 되긴 되는데.. 이렇게 되면.. 각 paragraph 마다 입력 폼이 생기잖여.. 입력은 한번만 해서 돌려써야 욕을 안 먹는데..

흠?? 메뉴얼 아래쪽에 Using form Templates (scope: note) 란거 보니.. 전역 변수로 쓸 수 있는 것 같다..

첫번째 paragraph에다가 jdbc interpreter로 쿼리를 날릴때 ${변수명} 을 사용하면 값 입력 폼이 생기고, 이걸 두번째 paragraph에다가 사용하면 되겠지?

해서 jdbc interpreter에다가 $${변수명을} 쓰고 조회!

--> null point exception이 아마 발생할 것이다...

3. 고민

완전 당황함.. sql 프로파일러로 들여다 보니.. 쿼리가 오지도 않음..

왜 이럴까.. 정말 몇일을 고민함..

stacksoverflow에 질문해도 답하는 놈이 없음.

https://stackoverflow.com/questions/67767714/exchanging-variables-between-different-paragraphs

youtube 동영상을 보니.. 다들 기초 예제만 하지..

이렇게 결합해서 하는 경우가 없음.

하여.. 계속 몇일을 삽질을 하다가..

겨우 알아냄..

4. 해결

가) 일단 메뉴얼이 좀 부실하다.. 내용도 좀 잘못된 것이 많음

나) 다른 interpreter는 모르겠으나, 나처럼 jdbc 사용하는 경우에 대해선 메뉴얼이 너무 허접함

다) 하여간 정답 공개

    a) 일단 공통으로 입력을 받을 폼은 첫번째 paragraph에 python으로 작성함.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%python
 
dtst = z.noteTextbox("시작일", "20200101")
dted = z.noteTextbox("종료일", "20201231")
 
print("Textbox note " + dtst)
print("Textbox note " + dted)
 
arrStore = [("001", "PubDept"), ("002", "Store1"), ("003", "Store2")]
 
selStore = z.noteSelect("매장선택", arrStore )
 
print( "Select note " +  selStore )
 
 
z.z.run("paragraph_1622092568030_1007352330")
 
cs

코드 설명 : 
1. Textbox 생성시 noteTextbox를 써야 전체 입력 form으로 생성됨
2. Select도 noteSelect로 생성. 값은 편하게 알아보기 위해서 객체로 한번 선언해주고 사용했음.
3. 하단의 z.z.run 부분은 다른 paragraph를 연속해서 실행시키라는 명령임. (paragraph ID는 각자 사용하는 것을 쓰자!)

   b) 그 다음 paragraph에서 jdbc interpreter를 사용하자

1
2
3
%jdbc
EXEC USP_BIGDATA_003 '$${시작일}', '$${종료일}', '$${매장선택}';
 
cs

 코드 설명 :
1. jdbc interpreter는 이 글을 볼 정도면 알아서 잘했을 것이다. 그래도 모르겠다... 하시는 분들은.. 실력 좀 올려서 오자!! (기본적인 연동은 구글링하면 나온다... jdbc 연동 글 보기 : https://jaymz96.blogspot.com/2021/02/apache-zeppelin.html)
2. 내 경우엔 query 말고 procedure를 날려서 실행하게 했음.
3. python interpreter에서 선언한 이름을 $$개 붙여서 가져와 쓸 수 있다!!
4. 이제 전체 실행, 또는 공통 form에서 값을 입력하고 실행하면. z.z.run으로 연결된 paragraph들이 함께 실행됨을 볼 수 있다.
5. 이후는 입맛대로 진행


5. 교훈
가) 외국꺼라고 다 제대로 됐다고 생각하면 오산이다.
나) 양키 놈들도 아는척~~만 하는거지 제대로 아는 넘들은 없다
다) 네이년 다니는 쉑들도 다 사기꾼들임. 내가 더 잘났다. (옛날에 면접보고 떨어져서 이러는 거 아님.........)
라) 빅데이터는 사기이자 쑈다. 윗 선에 딱 흑세무민 하기 좋은 툴이다.

6. 끗~
이제 나도 윗선에 구라쳐서 이쁨 좀 받아보자!
진짜 끗~!



2021-07-14 내용 추가
jdbc 연동이 잘 안된다면.. 
jdbc 설정시에 zeppelin.jdbc.interpolation 이 항목이 false 라면 true 변경하라!



2021년 5월 27일 목요일

Apache Zeppellin 0.9.0 - Dynamic Form에서 Python 을 실행하면 오류가 발생한다??!

하아... 진짜.. 이거 오픈소스라고 하지만..

너무너무 귀찮은 일들이 자꾸 생긴다..

심지어 메뉴얼에 있는 걸 갖다가 붙여도 오류가 남..


이 오픈소스 관리하는 쉐리는 검증은 하고 올리는 건가...

%pyspark 인터프리터 쓰면.. 일단 안됨!

%python으로 변경해야 하며, 실행해도 type 관련 오류가 발생함..


일단.. 개발 환경은

Ubuntu 20.4 LTS + Apache Zeppelin 0.9.0 preview 1


구글링해서 본 글은 거의 다 쓰레기...

결국 찾아냄..

https://stackoverflow.com/questions/63754720/apache-zeppelin-issues-python-errors

요약하면.. 0.9.0 preview 2에서 버그가 있는데.. python 3.8에선 호환이 안된다는 거임..

Ubuntu 20.4 LTS 기본이 3.8을 사용하는 지라.. 다운드레이드를 할까 하다가..

그냥 설치하고.. interpreter 설정에 python 경로를 넣는 곳에 3.7을 지정하는 걸로 해결.


설치 할 줄 모르는 냥반들을 위한 코드 투척..

  1. sudo add-apt-repository ppa:deadsnakes/ppa
  2. sudo apt-get update
  3. sudo apt-get install python3.7


설치하고 Zeppelin의 interpreter 설정에서 zeppelin.python 항목을 python 3.7 이 깔린 경로로 넣어주자 (bin이 들어간 경로 넣으면 됨)

참고로.. 다운그레이드 후 pyspark 써 봤으나.. 동일하게 오류 발생..

(걱정말라구!! 이 글을 본 사람이 한 삽질은 내가 다 먼저 했다규!!! ㅜ_ㅜ)

그나저나.. 생각보다.. 너무 삽질을 많이해서.. 짜증이 그냥.....

끗!



2021년 5월 26일 수요일

Apache Zeppelin 에서 Helium 사용하기

Zeppelin 기본 차트로는 기능이 많이 부족하다!

왜 내가 본 너튜브에는 차트가 멋지던데 내 화면은 왜 이렇나!!


하셨던 분들...

Apache Zeppelin 설치하니까.. Helium 이라고 써있는데..

이게 뭔가 하신 분들..


이게 오픈 소스 차트 프레임 웍이다~~ 이거지요...

너튜브엔 뭐 그냥.. 이렇게~ 저렇게 하시면 Helium 플러그인 중에

이런 차트를 enable, disable 하실 수 있어요~~ 라고 하던데..


개뿔~~!

플러그인 자체가 목록에 안 나옴!

이래저래 Helium Install 관련 찾아봐도 안 나옴.

결국은 메뉴얼 안에 답이 있다~~~ 이거지!!

https://zeppelin.apache.org/docs/latest/development/helium/overview.html

근데.. 메뉴얼이 애매함..

내장되어 있다고 했는데.. 정작 interpreter 폴더에도 helium이 없고

플러그인 이라던지.. 어떤 곳에도 흔적이 없음..

현재 Zeppelin 버전은 2021년 5월 기준 0.9.0 임.

메뉴얼을 잘 보니.. zeppelin-site.xml 이 안에다가 구성할 수 있다고 써 있음..

그런데 왜 안 보이지? 한참을 또 이것저것 찾아 봄..

.

.

.

.

.

.

.

야이~~! X불넘들아~~!!! 주석으로 막아 놓으면 어쩌라고!!!

파일 안에 주석으로 막혀 있어서 안 나왔던 거임!

주석 풀고 Zeppelin 재시작 -> Helium 메뉴 들어가면...


오오~~ 이제 잘 보일 것이다~!!!


최근에 몇가지 기술들을 구글링하고 영상도 보고 하면서 느낀거...

대기업 다니고, 영어 좀 씨부린다고 해서 다를거 없다.. 그 쉐리들도 몰라.. 다 기본만 설명하지 어려운건 쏙 빼놓고 지 잘하는 거만 떠들어 대더라..


결론 : 나도 잘났다..


끗~! 뭘봐!



2021년 4월 30일 금요일

Apache Zeppelin에서 jdbc 연동시 조회할때 TLS 관련 오류 발생

0. 현재 개발환경

    - OS : Ubuntu 20.4

    - Main DB : SQL Server on Linux 2019 Express

    - 보조 DB : SQL Server 2008, SQL Server 2014

    - Java : Apache Zeppelin 권장 버전 (OPENJDK 1.8)

1. 보다시피 버전차이가 엄청 남.

2. Zeppelin에 jdbc (9.2.1) 연결을 했을때, SQL Server 2014는 아무 문제가 없음

3. SQL Server 2008에 연결시 TLS 버전을 지원 안한다는 오류 발생함.

4. 해당 서버 버전의 TLS 1.0 프로토콜이 너무 오래되서 지원을 안함.

5. 일단.. 해당 서버의 OS인 Windows 2008 R2에 TLS 1.1 / TLS 1.2 설정을 해줌.

6. 동일 에러 발생 - SQL Server 2008 자체에서 TLS 1.0 통신만 지원하는 것으로 판단.

7. jdbc 4.2를 쓰면 된다는 개소리 믿고 삽질하다가.. 다음과 같은 글 발견..

https://blog.naver.com/PostView.nhn?blogId=hgp33&logNo=221293449287&from=search&redirect=Log&widgetTypeCall=true&directAccess=false

8. 뭐 내용은 Java jdbc 보안문제로 동일함.

9. 문득 깨닮음을 얻은 나는 Ubuntu의 JRE에 있는 security 설정을 건들면 되겠다는 생각이 듬.

10. 저 링크에는 싹 지우라고 했지만... 글 자체가 3년이 넘은지라.. 

    내 목적인 TLS 관련 부분만 지움..

    jdk.tls.disabledAlgorithms 에서 TLS 1.0, TLS 1.1을 지워주자..

11. 당근 바로 안된다.. 서버 재부팅!!!

12. 해결!

13. 끗! 뭘봐!

2021년 4월 21일 수요일

Ubuntu 20.04.2 LTS에 Apache Zeppelin 설치 삽질기....

지난번에 Apache Zeppelin을 간편하게.. docker를 활용하여 설치했었음.

이젠 big data를 정식으로 개발해야 해서 실제 운영할 서버에 docker 말고..

ubuntu 20.04.2 LTS에 설치를 함...


역시나.. 언제나 그러하듯... 젠장.....

삽질 시작...

1. 처음엔... Apache Zeppelin의 메뉴얼에 있는대로 하자.. 기다렸다는 듯이.. 에러 뿜음..

2. 로그보니.. 디렉토리들.. 생성권한이 없어서 그런듯 하여.. sudo로 해결하거나 그냥 생성해주고 돌림..

3. 잘 돌아간거 같은데.. 아무리 접속해도 안뜬다 싶어서 얘는 방화벽을 어떻게 쓰나 보니 ufw 명령어를 쓰면 됨..

4. 이래저래 뒤져서 방화벽 열고, 돌렸는데... 아무리해도 연결 거부가 나옴..

5. 똑똑한 나는, 이거슨 안 올라온게 아니고, 방화벽이 하는 짓꺼리여~~ 라고 생각하며 iptables 로 어떻게든 해보려 했으나.. 달라진게 없음..

6. nc -l -p 포트번호 나 sudo netstat -tulpn | grep 포트번호 해도 포트는 이상없이 오픈 된 것으로 보임..

7. 그러다가... netstat 결과에서 127.0.0.1:포트번호 만 열려있는 것을 확인함..

8. 다시 Apache Zeppelin 메뉴얼 뒤지니... 서비스 할 IP를 지정하는 환경설정 발견..

9. conf 밑에 있는 zeppelin-site.xml.template 파일로 zeppelin-site.xml 생성한 다음 안에 있는 zeppelin.server.addr 속성값을 서버의 IP로 변경하니.. 해결..

 - 내용추가 : 그냥 모든 IP 접속 가능하게 0.0.0.0 으로 설정하면 됨!

10. 여기까지 오는데 5시간 걸림...

11. 삽질은 계속된다.. 쭈욱~~~~


2021년 2월 10일 수요일

Apache Zeppelin jdbc 구축기

회사에 빅데이터 분석 툴을 위해 이것저것 알아보고 조언도 듣다가..

일단은 Apache Zeppelin 을 구축해 보기로 결심..

1. 처음에는 내 로컬에 구축해서 돌려보려고 시도함.

2. 최신 버전이 2021-02-10 기준 0.9 버전인데.. 공식적으로 윈도우즈를 지원하지 않는 것으로 보임.. 어떻게든 돌려볼려고 했으나, 온갖 별의별 오류가 나와서 실패.

3. 오류 찾다가 시간 다 갈꺼 같아서.. 회사 NAS에 구축 시도.

4. 처음에는 시놀로지 NAS에 구축하다가, 콘솔 명령어가 너무 부족해서, CentOS 6.6 쓰는 파일서버로 계획 변경

5. 패키지 설치보다는 편안하게 docker로 설치하기로 결심

6. 환경이 mssql이라 mssql jdbc 드라이버 준비 (다운로드) : 최신버전으로 함 (9.2)

7. Apache Zeppelin docker image는 여기서 받음 (가보자)

8. docker 설치는 너무 쉬워서 패스, 기본 구동도 쉬워서 패스.

9. 참고글을 보고 진행함. 참고에서는 명령어를 치라고 되어 있는데, 그냥 sh 파일 만들어서 진행함.

10. 내용에서 좀 다르게 한거는 artifacts 이 경로가 실제 구동되었을때 위치가 좀 다르더만.. artifacts 안에다가 jdbc 드라이버를 넣으면 됨.

11. 참고글에는 jTDS 드라이버로 했으나, 내 환경에서는 되지 않기에 MS에서 제공하는 것으로 변경함.

12. 인터프리터 설정에서 jdbc 설정하듯이 하면 됨.. 쉽다..

13. 노트 생성하고 쿼리 날려보니 결과도 잘 나옴..

14. 자~~ 이제 뭘 해볼까...


끗!!


[낯선] 2026.06.20 이태원 MZK MuzikBar 공연

간만의 공연 이태원 비틀즈가 이전하여 MZK MuzikBar 로 새 단장 오픈을 한 뒤로 2번째 공연 새 베이시스트가 합류한 뒤로 첫 공연이기도 함.. 이래저래 틀린 부분도 많지만.. 그래도 간만에 그럭저럭 잘했다.. https://www.youtub...