데이터 시각화 툴로서 종종 사용하는 Zeppelin을 갑자기 사용해야 할 일이 생겼다. 다만 예전에 설치할때 좀 까탈스러웠던 기억이 나서 Docker 이미지로 제공되는지를 찾아 보았더니 아니나 다를까 D2hub에 등록되어 있었다.

  이제 간단하게 설치를 진행해 보았다. (기본적으로 도커가 설치되어 있다는것을 전제로 하며 OS는 MAC, Linux 를 대상으로 합니다.)

#docker run -p 8080:8080 --rm --name zeppelin apache/zeppelin:0.9.0

  위의 명령어를 실행하면 Zeppelin 0.9 버전의 도커 이미지를 다운로드 하고 실행합니다. 하지만 로그라던가 notebook이 이미지 내에서 저장되므로 이미지가 삭제되거나 하면 작업한 notebook이 삭제될 수 있으므로 외부의 저장공간으로 아래와 같이 마운트 시켜 줍니다. 아래의 옵션은 차후에 드라이버를 적재하는 용도로도 사용되므로 아래와 같이 사용합니다.   

#docker run -p 8080:8080 --rm -v $PWD/logs:/logs -v $PWD/notebook:/notebook -e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.9.0

  이제 명령어를 수행하면 notebook 디렉터리와 logs 디렉터리가 현재 실행한 위치에 생성되고 실행이 잘 되는것을 볼 수 있습니다.

  % 실행중에 만약 root로 실행했는데 당황스럽게 파일 생성시 Permission Denied 라는 에러 메시지와 함께 실행시에 .git(notebook 하위) 디렉터리 생성이 안되거나 notebook이 생성되지 않았다면 (ubuntu 일때) root로 docker는 실행했지만 실제 Zeppelin이 실행되는 Java 프로세스는 사용자 권한으로 실행되므로 위에서 지정한 logs, notebook, .git 3가지를 해당 사용자로 생성하고 소유권을 변경해도 된다.

  이제 http://localhost:8080으로 접속하면 아래와 같은 화면이 나올것이다.

 

MySQL 연결하기..

  이제 MySQL을 연결해볼 차례다. 아래의 링크에 가면 Zeppelin 공식 페이제에서 각 DBMS 연결 방법이 설명되고 있다. 이번에는 jdbc를 이용하여 연결해 보도록 하겠다.

  참고로 Zeppelin은 postgresql 만 기본적으로 드라이버가 포함되어 배포되고 나머지는 모두 사용자가 다운로드 해서 interpreter 디렉터리 하위에 복사해서 넣어주어야만 한다. 하지만 Docker 이미지로 설치를 했기 때문에 Docker에 이를 넣어주기가 ..... 물론 불가능하지는 않다. 여러가지 방법이 있으니 시도해 보고자 하는분은 시도해 보시기 바랍니다. (귀차니즘에 입각하여 간단한 방법을.. ^^)

  우선 mysql-connector.jar 파일을 다운로드 한다. 그런 다음 위에서 docker 명령어를 수행했던 디렉터리로 간다. 내가 설치한 디렉터리는 /opt/zeppelin에서 실행하였다. 실행시 PWD를 변수로 받아서 notebook을 /notebook으로 맵핑 시켜 두었기 때문에 아래와 같이 /opt/zeppelin/notebook/mysql-connector-java-8.0.21.jar를 복사해 준다.

환경 변수 설정하기

  이제는 interpreter를 추가해줄 차례다. Zeppelin의 interpreter메뉴로 가서 신규로 생성을 눌러 새로 interpreter를 만든다. 그 때 템플릿은 jdbc를 선택하면 기본적인 필드가 나온다. 많은 필드중에서 아래의 몇가지 필드만 수정한다.

   default.url -> jdbc:mysql://localhost:3306/   
   default.user -> 사용자명   
   default.password -> 비밀번호   
   default.driver -> com.mysql.jdbc.Driver

  4가지만 기본적으로 설정하면 된다. 추가적인 mysql 접속 설정은 필요한 경우 하면 된다.

  이제 interpreter 하위에 Dependencies 부분에 추가한 디렉터리 위치를 넣어주어야 한다. 실제 파일이 위치한 경로는 /opt/zeppelin/notebook 이지만 실행시 맵핑을 해두었으므로 이미지상에서는 /notebook 으로 적어주면 된다.

  위와 같이 추가해준 다음 저장을 하고 이제 새로운 note를 생성한 다음 아래와 같이 쿼리를 내려 본다.

%interpreterName
select now()

 

  % 다만 위의 방법을 사용할 경우 docker 컨테이너를 재실행 시켜 줄 경우 노트북 파일과 드라이버 파일은 그대로 남지만 interpreter가 리셋되는 단점이 있다. 이 부분의 보완이 필요하다.

zeppelin.apache.org/docs/latest/interpreter/jdbc.html

 

Apache Zeppelin 0.8.2 Documentation: Generic JDBC Interpreter for Apache Zeppelin

 

 

  1. 로켓매니아 2021.03.26 12:02

    잘 봤습니다. 감사합니다.

  맥에서 syslog 데몬을 통해서 발생하는 syslog를 UDP 514로 전송할 수 있다.

1. /etc/syslog.conf 에 아래의 라인을 추가한다.

*.*        @10.10.10.5

2. syslog 데몬 재시작

launchctl stop com.apple.syslogd

launchctl start com.apple.syslogd

이제 해당 목적지 서버로 로그가 전송되는것을 확인할수 있다.

 

 

from datetime import datetime

# return : string '2020-03-01'
def gettoday():
    today = datetime.today().strftime("%Y-%m-%d")
    return today

# start_date : string  '2020-03-01'
# end_date : string  '2020-03-04'
# return : int  : 3
def get_datediff(start_date, end_date):
    betday = datetime.strptime(end_date,"%Y-%m-%d").date() - datetime.strptime(start_date,"%Y-%m-%d").date()
    return betday.days


if __name__ == "__main__":
    print(gettoday() )
    betday = get_datediff( '2020-03-01' , gettoday() )
    print( betday )

 

  간단하게 파이선으로 오늘 날짜를 구하고 두개 날짜의 차이를 구하는 함수

  날짜로 배치작업을 돌려야 할때 요긴하게 사용가능해 보인다. 다른 방법도 많지만.. 


#간단한게 가장 좋다.

+ Recent posts