이번 포스팅에서는 리눅스 정규 표현식 (Linux Regular Expression)에 대해서 알아보겠습니다.
정규 표현식은 데이터 검색, 복잡한 패턴 매칭을 도와주는 특별한 문자입니다. 정규표현식(regular expression)은 줄여서 'regexp' 또는 'regex' 라고도 합니다.
정규 표현식은 리눅스 뿐만 아니라 유닉스, SQL, R, Python 등 에서도 사용할 수 있습니다. 지난번 포스팅에서 소개했던 grep 문과 함께 사용하면 정말로 강력하게 문자열 패턴 매칭, 검색을 할 수가 있습니다.
정규 표현식(Regular expressions)에 대해서 모르는 상태에서 다른 사람이 짜놓은 정규 표현식을 처음으로 보게 되면 '에잉? 이게 뭐지? 갓난 아기가 컴퓨터 자판를 가지고 마구잡이로 장난하면서 두둘겨 놓은건가?' 이런 생각이 들겁니다. 알면 해독이 되는데요, 모르면 도통 이게 뭐에 쓰는 물건인가, 이게 프로그래밍 언어 맞나 싶게 요상하게 보이거든요. ^^; 암튼, 알아두면 문자열 패턴 매칭, 검색 시 정말 유용합니다.
정규 표현식에는 3가지 유형이 있습니다.
기본 정규 표현식 (Basic Regular Expressions)
간격 정규 표현식 (Interval Regular Expressions)
확장 정규 표현식 (Extended Regular Expression)
다음은 예제로 사용할 텍스트 문서입니다.
[MacBook-Pro:Documents rfriend$ cat mylove.txt
drum
photography
data science
greenplum
python
R
book
movie
dancing
singing
milk
english
gangnam style
new face
soccer
pingpong
sleeping
martial art
jogging
blogging
apple
grape
banana
tomato
bibimbab
kimchi
@email
123_abc_d4e5
xyz123_abc_d4e5
123_abc_d4e5.xyz
xyz123_abc_d4e5.xyz
먼저 기본 정규 표현식 (Basic Regular Expressions)을 예를 들어서 살펴보겠습니다.
이번 포스팅에서는 Linux 위에 설치된 DB에 접속해서 분석을 하려고 했을 때 자주 사용하는 가장 기본적인 Linux Shell Script 를 소개하겠습니다.
참고로, 저는 MacBook Pro, MacOS sierra를 사용하고 있구요, VMware에 Linux CentOS 6.6 version을 설치한 후, CentOS에 Greenplum Database 4.3.18 버전 (Master node 1, Segment node 1, Segment node 2)를 설치하여 사용하고 있습니다.
아래의 예시는 Greenplum DB 에 연결해서 사용하는 Linux script 간단 예제가 되겠습니다.
[MacBook-Pro:~ rfriend$ ssh gpadmin@192.168.188.131 gpadmin@192.168.188.131's password: xxxxxxxx Last login: Fri Dec8 22:23:24 2017 from 192.168.188.1 [gpadmin@mdw ~]$
6. con.sh 파일에 저장해놓고 파일 실행으로 Greenplum Database에 연결하기
여러개의 DB에 바꾸어 가면서 접속해야 하는 경우 IP를 모두 외우고 일일이 치기 힘들 때 유용합니다. 아래 예제는 gpdb, gpdb2, gpdb3 의 3개 DB에 접속하기 편하도록 DB별로 alias를 준 예제입니다.
chmod +x con.sh 는 con.sh 파일에 들어있는 script가 나중에 실행될 수 있도록 파일 형태를 바꾸어 줍니다. (chmod: change mode)
./con.sh gpdb 는 현재 경로의 con.sh 파일 안의 gpdb 라는 이름 아래에 있는 script (즉, ssh gpadmin@192.168.188.131)를 실행하라는 뜻입니다.
[MacBook-Pro:~ rfriend$ cd
[MacBook-Pro:~ rfriend$ ls *.sh con.sh
[MacBook-Pro:~ rfriend$ vi con.sh
#!/bin/bash case $1 in gpdb) ssh gpadmin@192.168.188.131 ;;
gpdb2) ssh gpadmin@192.168.188.141 ;;
gpdb3) ssh gpadmin@192.168.188.151 ;;
*)
echo $"Usage: $0 target" exit esac ~ ~ :wq!
[MacBook-Pro:~ rfriend$ chmod +x con.sh
[MacBook-Pro:~ rfriend$ ./con.shgpdb gpadmin@192.168.188.131's password:xxxxxxxx Last login: Fri Dec8 23:05:01 2017 from 192.168.188.1 [gpadmin@mdw ~]$
7. Greenplum DB 시작하기, 멈추기: gpstart, spstop
script
descriptionn
gpstart
Greenplum Database 시작하기
gpstart -a
Greenplum Database 시작할 때 자동으로 YES 입력하게 해서 시작하기
gpstart -m
Greenplum Database 마스터 노드만 maintenance mode로 시작하기
gpstop -af
실행 중인 모든 코드를 멈추고 Greenplum Database 내리기(중단하기)
gpstop -r
Greenplum Database를 내렸다가 다시 시작하기
gpstop -u
Greenplum Database 시스템을 방해하는 것 없이 configuration file 변경 사항만 다시 로딩하기
8. Greenplum DB 상태 확인하기: gpstate
script
description
gpstate
Greenplum Database 작동 상태 확인하기 : PostgreSQL, Greenplum DB의 version 확인 가능함
gpstate -e
Greenplum Database primary/segment mirror 세부 이슈 확인하기
Show details on primary/mirror segment pairs that have potential issues such as 1) the active segment is running in change tracking mode, meaning a segment is down 2) the active segment is in resynchronization mode, meaning it is catching up changes to the mirror 3) a segment is not in its preferred role, for example, a segment that was a primary at system initialization time is now acting as a mirror, meaning you may have one or more segment hosts with unbalanced processing load.
[MacBook-Pro:~ rfriend$ ssh gpadmin@192.168.188.131 gpadmin@192.168.188.131's password: xxxxxxxx Last login: Fri Dec8 23:48:08 2017 from 192.168.188.1
[gpadmin@mdw ~]$ gpstate 20171208:23:50:17:109233 gpstate:mdw:gpadmin-[INFO]:-Starting gpstate with args: 20171208:23:50:17:109233 gpstate:mdw:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.18.0 build 1' 20171208:23:50:17:109233 gpstate:mdw:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.15 (Greenplum Database 4.3.18.0 build 1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Nov 22 2017 18:54:31' 20171208:23:50:17:109233 gpstate:mdw:gpadmin-[INFO]:-Obtaining Segment details from master... 20171208:23:50:17:109233 gpstate:mdw:gpadmin-[INFO]:-Gathering data from segments... . 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:-Greenplum instance status summary 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:----------------------------------------------------- 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Master instance= Active 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Master standby = No master standby configured 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total segment instance count from metadata = 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:----------------------------------------------------- 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Primary Segment Status 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:----------------------------------------------------- 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total primary segments = 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total primary segment valid (at master)= 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total primary segment failures (at master) = 0 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files missing = 0 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files found = 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs missing= 0 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs found= 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files missing= 0 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files found= 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes missing= 0 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes found= 4 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:----------------------------------------------------- 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Mirror Segment Status 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:----------------------------------------------------- 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:- Mirrors not configured on this array 20171208:23:50:18:109233 gpstate:mdw:gpadmin-[INFO]:----------------------------------------------------- [gpadmin@mdw ~]$ [gpadmin@mdw ~]$ [gpadmin@mdw ~]$ gpstate -e 20171208:23:50:28:109293 gpstate:mdw:gpadmin-[INFO]:-Starting gpstate with args: -e 20171208:23:50:28:109293 gpstate:mdw:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.18.0 build 1' 20171208:23:50:28:109293 gpstate:mdw:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.15 (Greenplum Database 4.3.18.0 build 1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Nov 22 2017 18:54:31' 20171208:23:50:28:109293 gpstate:mdw:gpadmin-[INFO]:-Obtaining Segment details from master... 20171208:23:50:28:109293 gpstate:mdw:gpadmin-[INFO]:-Physical mirroring is not configured [gpadmin@mdw ~]$ [gpadmin@mdw ~]$
9. Greenplum DB에서 ZooKeeper, GPText 시작하기
script
description
zkManager start
ZooKeeper 시작하기 (아래의 gptext-start 를 하기 전에 ZooKeeper를 먼저 실행시켜야 함)