docker로 BI 도구 슈퍼셋 설치

AWS EC2에는 에어비가 개발한 BI 도구인 아파치 슈퍼셋의 노트를 docker로 적었다.
AWS EC2 Amazon Linux t2.미크로에서 해봤어요.
참조)
supreset GiitHub(공식)
https://github.com/ApacheInfra/superset
superrset documentation(공식)
https://superset.incubator.apache.org/index.html
관련 기사)
http://qiita.com/risuoku/items/618b7d8614325025ab59
http://qiita.com/momota10/items/ee774188f770555238ca
http://qiita.com/hiro_koba/items/65f3e278d86174210776

dockerfile


redash와 달리 현재(2017.7)에는 공식적인 dockerfile이 제공되지 않았습니다.
공식 GiitHub에는 dockerfile로 사용할 community contributed 링크가 있습니다.
https://github.com/amancevice/superset
그 dockerfile 아래 (일부 맞춤형)
FROM amancevice/pandas:0.19.2-python3

# Superset version
ARG SUPERSET_VERSION=0.18.5

# Configure environment
ENV LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    PATH=$PATH:/home/superset/.bin \
    PYTHONPATH=/home/superset/.superset:$PYTHONPATH \
    SUPERSET_VERSION=${SUPERSET_VERSION}

# Install dependencies & create superset user
RUN apt-get update && \
    apt-get install -y \
        build-essential \
        libsasl2-dev \
        libldap2-dev \
        mariadb-client \
        postgresql-client && \
    pip install \
        flask-mail==0.9.1 \
        flask-oauth==0.12 \
        flask_oauthlib==0.9.3 \
        impyla==0.14.0 \
        mysqlclient==1.3.7 \
        psycopg2==2.6.1 \
        pyhive==0.2.1 \
        pyldap==2.4.28 \
        redis==2.10.5 \
        sqlalchemy-redshift==0.5.0 \
        sqlalchemy-clickhouse==0.1.1.post3 \
        superset==$SUPERSET_VERSION && \
    useradd -b /home -U -m superset && \
    mkdir /home/superset/.superset && \
    touch /home/superset/.superset/superset.db && \
    chown -R superset:superset /home/superset

# Configure Filesysten
WORKDIR /home/superset
COPY superset .
#VOLUME /home/superset/.superset

# Deploy application
EXPOSE 8088
HEALTHCHECK CMD ["curl", "-f", "http://localhost:8088/health"]
ENTRYPOINT ["superset"]
CMD ["runserver -t 300"]
USER superset

timeout 설정


runserver 옵션에 -t XX 를 추가하면 Sciece 차트가 그려질 때
시간 연장 가능합니다.
표준 설정에서 45초 timeout이 error가 된 경우
만약 상술한 설정을 진행한다면 error는 해제될 것이다.

docker build & run


상기 dockerfile의 복사와 붙여넣기만build을 할 수 없습니다.
다음 사이트의 창고clone 후build 진행
https://github.com/amancevice/superset
git clone https://github.com/amancevice/superset.git

cd superset

docker build -t superset:0.18.5 .

docker run -p 80:8088 --name superset  superset:0.18.5
데몬 시작 & Volume을 지정할 때
docker run -d -p 80:8088 -v /home/hoge:/home/superset/.superset --name superset superset:0.18.5
이어서 데이터베이스 초기화와 관리자 설정을 진행합니다
docker exec -it superset superset-init

브라우저를 통해 슈퍼셋에 로그인한 화면


컨테이너가 정상적으로 시작되면 브라우저가 시작하는 서버에 액세스합니다.(port 80을 지정했지만 변경할 수 있음)
python의 웹 애플리케이션용 프레임워크인 Flash를 기반으로 제작된 것으로 WEB 서버 기능도 있어 nginx와 appachee 등 WEB 서버 애플리케이션을 따로 설정하지 않아도 사용할 수 있다.
dockerfile 내의 runserver 명령은 WEB 서버 기능 실행 명령입니다.
초기화할 때 설정한 ID/PWD로 로그인하면 OK.

데이터 생성


다시보드를 만들려면 다음 순서대로 해야 돼요.
1) Sources/Database 등록
2) Table 설정
3) 슬라이스 설정
4) Dashboard 생성
slice는 이른바 도표로,dashboard에 slice를 붙인 그림입니다.
그 슬라이스의 입력원 데이터의db와table를 미리 설정합니다.

다음은 데이터베이스 설정 화면입니다.
RDS(Postgresql)인 경우 SQLAlcheemy URI
postgresql://[user]:[password]@[IP or Domain]:[port]/[dbname]
를 참고하십시오.대부분의 DB에 대응하는 패턴.

Slice는 GUI만으로도 사용할 수 있는 다양한 종류의 제품입니다.
SQL을 지정하는 SQL Lab도 있습니다.




SQL Lab


일반적인 Slice에서는 테이블 열 그룹을 기준으로 차트를 작성합니다.
SQL Lab을 사용할 때 여러 테이블의 Join 등이 SQL에서 추출한 결과를 토대로
도표화할 수 있다.

※ 화면 이미지는 GiitHub Superrset 공식 발표
기본적으로 Sources - Databases 메뉴를 통해 데이터베이스 정보를 등록한 후 SQL Lab을 통해 SQL을 수행합니다.
Databases 설정에서 Expose in SQL Lab을 확인해야 합니다.
조회 결과에 따라 "Visualize"단추를 누르면 슬라이스 (도표) 를 직접 만들 수 있습니다.
따라서 AWS RDS/Redshift를 사용하는 환경에서 SQL Lab에서 질의를 수행할 때
오류가 생겨서 반했으니 적어야 한다.
Failed to start remote query on a worker. Tell your adinistrator to verify the abailability of the message queue
Sources - Databases 의 객체 DB 편집 화면에서 처리
Allow Run Sync를 확인하고
Allow Run Async 검사를 취소하여 저장하면 됩니다.

데이터 백업


superrset 데이터는 docker 컨테이너 내의/home/superset/.superset/superset.db에 저장됩니다.
Doke rfile에서 리뷰를 출력하는 VOLUME를 유효하게 만든 후
4/home/superset/.superset VOLUME로 마운트
호스트 측 마운트 목적지가 설정되지 않았기 때문에 docker가 목적지를 임의로 마운트하도록 규정합니다.
예제)/var/lib/docker/volumes/[volume ID]/_data/4docker inspect 명령을 통해 자세한 내용을 확인할 수 있다.
docker inspect 실행 예
        "Mounts": [
            {
                "Name": "49313286a6f90d4dd5ad4d0222d7eb3a57d53f21f69a254ea56bbfb77517055b",
                "Source": "/var/lib/docker/volumes/49313286a6f90d4dd5ad4d0222d7eb3a57d53f21f69a254ea56bbfb77517055b/_data",
                "Destination": "/home/superset/.superset",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
또한 호스트 마운트 목적지를 임의로 지정할 수도 있다.VOLUME [コンテナ内部パス] [ホストマウント先パス]

기타


Tableau만큼 기능이 없어도
지금은 AWS의 Quicksight보다 더 인기가 많은 것 같아요.
개방식 등 폐쇄된 환경에 쉽게 설치할 수 있어 편리하다.

좋은 웹페이지 즐겨찾기