데이터 시각화 툴로서 종종 사용하는 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

 

 

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

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

*.*        @10.10.10.5

2. syslog 데몬 재시작

launchctl stop com.apple.syslogd

launchctl start com.apple.syslogd

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

  주로 DB를 사용하고자 할때 요즘은 SQL Lite등을 사용하지만 개발을 진행하다가 보면 보안적인 측면 그리고 성능적인 측면에서 수십, 수백만건의 데이터가 넘어 갈 경우에는 파일 DB로는 불가능한 경우를 종종 만나게 된다. 그럴때 사용할 만한 RDBMS로 MySQL을 사용하는데 매번 설정을 찾아 보는게 귀찮아 한번에 정리한 버전을 만들어 본다.

 

환경

OS : CentOS 7.X (amd64)

설치 방법 : yum을 이용한 설치

설치 대상 : MariaDB 10.5.2-1.el7.centos

 

yum repository에 등록

yum으로 최신 버전의 MariaDB를 설치하고자 한다면 먼저 /etc/yum.repos.d/ 하위에 신규 파일을 생성하고 아래와 같이 넣어 준다.

 

maria.repo

 

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

 

간략 설명

: 위의 yum.mariadb.org 에 접속하면 버전과 OS까지 선택할수 있게 되어 있다. 

설치하고자 하는 버전별로 OS를 선택해서 위의 baseurl을 업데이트 하기 바란다.

 

설치

이제는 설치를 진행해 보자.

아래의 명령어만으로 관련된 모든 패키지를 설치 할수 있다.

yum install MariaDB*

 

(2/435): MariaDB-common-10.5.2-1.el7.centos.x86_64.rpm                 |  81 kB  00:00:07     
(3/435): MariaDB-compat-10.5.2-1.el7.centos.x86_64.rpm                 | 2.2 MB  00:00:17     
(4/435): MariaDB-devel-10.5.2-1.el7.centos.x86_64.rpm                  | 8.1 MB  00:00:43     
(5/435): MariaDB-client-10.5.2-1.el7.centos.x86_64.rpm                 |  12 MB  00:01:16     
(6/435): MariaDB-shared-10.5.2-1.el7.centos.x86_64.rpm                 | 113 kB  00:00:02     

 

만약 구버전을 사용하다가 위의 yum을 업데이트 한다면 관련된 많은 패키지가 업데이트 된다.

 

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr//bin/mysqladmin' -u root password 'new-password'
'/usr//bin/mysqladmin' -u root -h sokoban.co.kr password 'new-password'

Alternatively you can run:
'/usr//bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr/' ; /usr//bin/mysqld_safe --datadir='/data/mysql/'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr//mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

 

잘 설치 되었다면 위의 메시지가 뜨면서 MariaDB가 실행된것을 PS로 확인할 수 있다.

 

후속 작업

먼저 접속을 위해서 아래의 명령어를 통해서 root 패스워드를 설정 한다.

 

/usr/sbin/mysqladmin -u root password 'new-password'

 

 

설정 변경

DB의 캐릭터 설정과 메모리 사용량 등을 설정한다.

my.cnf 파일의 변경

 

 

[client-server]

[mysqld]
datadir=/data/mysql
general_log_file=/data/mysql/log/general.log
socket=/var/lib/mysql/mysql.sock
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
#default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size =1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 16M
query_cache_limit = 32M
thread_concurrency = 4
max_connections = 100 #200

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
default-character-set = utf8

[mysqldump]
default-character-set = utf8
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

 

 

 

시작 할때 datadir을 변경하고자 한다면 아래와 같이 /etc/init.d/mysql 스크립트내의 datadir에 명시해준다.


# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MariaDB configuration files.

basedir=
datadir=/data/mysql

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely

 

 

예외상황 처리

 

설치 이후 초기 DB 파일이 설치 되지 않았을 경우 대처

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/

 

서비스 포트 변경

보안성 향상을 위해 Port를 변경해 주어야 할 필요가 있을때 아래의 방법으로 변경한다.

 

SE Linux가 활성화 되어 있다면

아래의 명령어를 이용하여 SE Linux에 포트를 추가해야 한다.

semanage port -a -t mysqld_port_t -p tcp 13306

 

그리고 방화벽의 포트를 열어 준다.

firewall-cmd --permanent --zone=public --add-port=13306/tcp

firewall-cmd --reload

 

마지막으로 서비스에서 포트를 변경한다.

vim /etc/my.cnf.d/server.cnf

 

[mariadb]

port=13306

 

서비스 접속 IP 허용

최초 설치하게 되면 자기 자신의 IP만 허용되어 있고 root 계정만 존재하는 상태이다. 

계정을 생성한 다음 본인이 접근하고자 하는 외부 IP를 설정하여 외부 IP에서 접근할 수 있도록 설정해 주어야 한다.

 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'teddy'@'10.0.0.%' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


다양한 오픈소스 솔루션들 혹은 개발 언어등에 대해서 교육 환경을 제공해 주는 사이트로 katacoda 라는게 있다. 

처음 나오는 복잡한 솔루션에 대한 교육을 엔지니어나 인터넷에 제공해야 하는경우 천천히 따라하면서 할수 있도록 제공해 주는 사이트이다. 가장 좋은 점은 도커 등을 통해서 직접 개발환경이 셋팅된 환경을 제공하면서 교육 자료를 풀어 나갈수 있기 때문에 바로 실습이 가능하면서 교육이 가능한 점이 큰 강점으로 보인다.


솔직히 처음 접속했을때에 어떤 사이트이지 하는 생각만을 가지고 접속을 해 보았는데 상당히 많은 기능을 제공해 주고 있고 또한 내가 직접 교육 자료를 만들수도 있었다. 




접속 사이트

https://www.katacoda.com/




무료로 제공되고 있는 코스들  





본인이 접속한 강의의 진도율 측정 (코스별로 제공)




교육 환경의 구축 


가입을 하게 되면 교육 환경을 본인이 구축할수 있도록 프로그램을 제공한다. 

https://www.katacoda.com/profile/create-first-scenario/cli 에서 프로그램을 다운로드 하면 되며 간단하게 아래의 명령어를 통해서 교육 환경 파일들을 생성 할수 있다.

$katacoda create scenario

위의 명령어를 내리게 되면 아래와 같이 순서로 진행이 이루어 진다.


katacoda create scenario

Creating New Katacoda Scenario. Please complete the following details to generate scenario template.


Friendly URL (katacoda.com/username/friendly-url): katacoda.com/sokoban/docker

-> katacoda 내에서 노출되는 URL을 선택한다. 가입할때 선택한 이름 뒤에 본인이 노출하고자 하는주소를 기입


Scenario Title: docker-compose #1

-> 타이틀명


Description: docker-compose #1

-> 설명


Environment ImageID (Available environments at https://katacoda.com/docs/scenarios/environments): (docker) docker

-> katacoda의 실습환경에서 제공해주는 도커 이미지 ID를 입력한다. (위의 주소에서 찾을수 있고 아래에 첨부해 두었다.)


Scenario Layout (Available layouts at https://katacoda.com/docs/scenarios/layouts): (terminal) Terminal

-> 실습환경에 대한 레이아웃이다. ( 위의 주소에서 찾을수 있다.)


New Scenario Created: katacodacomsokobandocker

Created index.json, step1.md, step2.md, step3.md, intro.md, finish.md


Complete your content and when ready, push the changes to your configured Git Repository.


  모든 과정이 끝나고 나면 폴더에 교육환경용의 파일들이 step별로 생성된것을 볼수 있을것이고 교육 내용을 해당 파일들에 추가하면 된다.


실제로 반영을 하고 싶다면 git을 이용해서 배포 할수 있다. 우선 관리를 git을 통해서 하겠다고 하면

 git에 자동으로 저장소를 생성해 주게 된다. 모든 교육 환경 파일들은 아래의 git을 통해서 관리 된다.




이제 실제로 교육환경을 반영하고자 한다면 위의 git에 교육 내용을 넣은 다음 자신의 profile에서 적용하기를 눌러 주면 간단하게 적용이 되고 교육 환경이 생성된 것을 볼수 있다.






 ATOM에서의 세로 선택하기


  ATOM 에디터에서 세로(Vertical) 선택을 사용할수 있을까 찾다 보니 아래와 같이 누군가 패키지를 만들어서 올려 두었다. 간단하게 설치해서 사용해 보자..


  우선 ATOM의 Install Packages를 선택하한 이후 아래와 같이 sublime이라고 검색을 한다. 검색을 하면 중간쯤에 Sublime-Style-Column-Selection이 보일것이다. INSTALL을 눌러 보자



  설치가 완료 되었다면 Settings으로 가서 설정 값을 살펴보자 설정은 간단하게 어떤 키의 조합으로 세로 선택을 할지를 설정하게 되어 있다. 기본으로 Left 마우스 버튼 + Alt 키를 누른 이후 마우스 드래그를 하면 세로 선택이 되도록 설정되어 있다.


  


 이제 실제로 세로 선택을 해보자 사용법은 위에서 설정 된대로라면 마우스 Left + Alt (option) + 드래그 이다.



  세로 선택이 잘 되는것을 확인 할수 있다.



 해당 패키지의 설명

https://atom.io/packages/sublime-style-column-selection




  간단하게 Atom에서 세로 선택을 하는 방법에 대해서 알아 보았다.

+ Recent posts