본문 바로가기
DBMS

MPP DBMS Greenplum Ubuntu - 그린플럼 우분투(22.04)에서 소스 컴파일 하기

by developer's warehouse 2023. 12. 2.

이 글에서는 MPP DBMS Greenplum을 Ubuntu 22.04에 컴파일 하고 데모 DB를 생성하는 법에대해서 설명합니다. 

 

MPP DBMS Greenplum Ubuntu - 그린플럼 우분투(22.04)에서 소스 컴파일 하기 썸네일

Greenplum 소스 컴파일 사전준비


기본적으로 github 페이지의 README.Linux.md 를 확인하면 다음과 같이 우분투에서 설치 및 컴파일을 위한 가이드가 나옵니다. 

For Ubuntu:

  • Install Dependencies When you run the README.Ubuntu.bash script for dependencies, you will be asked to configure realm for kerberos. You can enter any realm, since this is just for testing, and during testing, it will reconfigure a local server/client. If you want to skip this manual configuration, use: export DEBIAN_FRONTEND=noninteractive
  • sudo ./README.Ubuntu.bash
     
  • Ubuntu 18.04 and newer should have use gcc 7 or newer, but you can also enable gcc-7 on older versions of Ubuntu:
  • sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
    sudo apt-get update
    sudo apt-get install -y gcc-7 g++-7
     

위의 내용은 README.Ubuntu.bash를 실행하여 사전 의존성이 있는 패키지들을 설치하고 gcc 7 버전을 사용하는 예제입니다. 제가 사용하는 우분투 최신 22.04는 default gcc 11을 사용하는데, 저는 현재 gcc 9.5 버전으로 사용 중입니다. 그러므로 두 번째 gcc 7은 적용하지 않고 진행해 보겠습니다. 

README.Ubuntu.bash를 열어보니, 아래와 같이 gcc, g++ 컴파일러부터 사용하는 라이브러리들을 설치하도록 스크립트가 되어있습니다.

% cat README.Ubuntu.bash
sudo apt-get update
sudo apt-get install -y \
        gcc \
        g++ \
        inetutils-ping \
        krb5-kdc \
        krb5-admin-server \
        libapr1-dev \
        libbz2-dev \
        libcurl4-gnutls-dev \
        libevent-dev \
        libkrb5-dev \
        libpam-dev \
        libperl-dev \
        libreadline-dev \
        libssl-dev \
        libxerces-c-dev \
        libxml2-dev \
        libyaml-dev \
        libzstd-dev \
        locales \
        net-tools \
        ninja-build \
        openssh-client \
        openssh-server \
        openssl \
        pkg-config \
        python3-dev \
        python3-pip \
        python3-psutil \
        python3-yaml \
        zlib1g-dev

sudo tee -a /etc/sysctl.conf << EOF
kernel.shmmax = 5000000000000
kernel.shmmni = 32768
kernel.shmall = 40000000000
kernel.sem = 1000 32768000 1000 32768
kernel.msgmnb = 1048576
kernel.msgmax = 1048576
kernel.msgmni = 32768

net.core.netdev_max_backlog = 80000
net.core.rmem_default = 2097152
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

vm.overcommit_memory = 2
vm.overcommit_ratio = 95
EOF

sudo sysctl -p

sudo mkdir -p /etc/security/limits.d
sudo tee -a /etc/security/limits.d/90-greenplum.conf << EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 1048576
* hard nproc 1048576
EOF
Kerberos는 잘 모르므로 일단 다음과 같이 skip 하고 의존성을 설치해 줍니다.
% export DEBIAN_FRONTEND=noninteractive
% sudo ./README.Ubuntu.bash
기존:1 https://dl.winehq.org/wine-builds/ubuntu focal InRelease
기존:2 http://packages.microsoft.com/repos/code stable InRelease
....
* hard nofile 1048576
* soft nproc 1048576
* hard nproc 1048576
 

Common Platform Tasks:

Make sure that you add /usr/local/lib to /etc/ld.so.conf, then run command ldconfig.

  1. Create gpadmin and setup ssh keys Either use:to create the gpadmin user and set up keys,manually create ssh keys so you can do ssh localhost without a password, e.g.,
  2. ssh-keygen
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
     
  3. OR
  4. # Requires gpdb clone to be named gpdb_src
    gpdb_src/concourse/scripts/setup_gpadmin_user.bash
     
  5. Verify that you can ssh to your machine name without a password.
  6. ssh <hostname of your machine>  # e.g., ssh briarwood (You can use `hostname` to get the hostname of your machine.)
     
  7. Set up your system configuration by following the installation guide on docs.greenplum.org
위의 공통 플랫폼 설정은 다음과 같은 내용입니다.
 
1. /usr/local/lib을 /etc/ld.so.conf에 추가하고 ldconfig 명령 실행: /etc/ld.so.conf 파일에 /usr/local/lib 경로를 추가합니다. 
 
이 경로는 공유 라이브러리가 설치되는 경로를 가리킵니다. 그런 다음, ldconfig 명령을 실행하여 동적 링크 라이브러리 캐시를 업데이트합니다. 이렇게 하면 시스템이 새로 설치된 라이브러리를 인식할 수 있습니다.
% sudo vi /etc/ld.so.conf
% cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
/usr/local/lib
% sudo ldconfig
위와 같이 sudo vi로 /usr/local/lib를 추가 후 sudo ldconfig 명령 실행
 
2. gpadmin 계정 생성 및 SSH 키 설정:
 
gpdb_src/concourse/scripts/setup_gpadmin_user.bash 스크립트를 사용하여 gpadmin 사용자를 생성하고 SSH 키를 설정할 수 있습니다.
 
또는 
 
수동으로 SSH 키를 생성하고 설정할 수 있습니다.
ssh-keygen 명령을 사용하여 SSH 키를 생성합니다.
~/.ssh/id_rsa.pub 파일의 내용을 ~/.ssh/authorized_keys 파일에 추가합니다.
~/.ssh/authorized_keys 파일의 권한을 보호하기 위해 chmod 600 ~/.ssh/authorized_keys 명령을 실행합니다.
마지막으로, SSH 키 설정이 올바르게 작동하는지 확인하기 위해 <hostname of your machine> 부분에 자신의 컴퓨터 호스트 이름을 사용하여 SSH로 접속할 수 있는지 확인합니다.
 
저의 경우 work/gpdb에 소스를 넣어 놓았으므로 해당 소스에서 다음과 같이 경로를 찾아가서 setup_gpadmin_user.bash 파일을 찾아 실행하였으나 아래와 같이 에러가 발생합니다. gpdb_src로 디렉토리를 바꿔야 성공합니다. 
~/work/gpdb/concourse/scripts
% ls setup_gpadmin_user.bash
setup_gpadmin_user.bash*
 ~/work/gpdb/concourse/scripts
% sudo ./setup_gpadmin_user.bash
...
+ transfer_ownership
+ chmod a+w gpdb_src
chmod: 'gpdb_src'에 접근할 수 없음: 그런 파일이나 디렉터리가 없습니다
 
참고로 한번 실패하면 group/user 생성 시 에러가 발생해서 script가 멈추므로 이미 생성된 group/user 함수는 스킵하도록 주석처리 해야합니다.
 
144 _main() { 145 TEST_OS=$(determine_os) 146 #setup_gpadmin_user 147 setup_sshd 148 workaround_before_concourse_stops_stripping_suid_bits 149 } 
 
146라인 주석처리 하면 됩니다.  

그러면 gpadmin 계정과 ssh 설정이 완료됩니다. 


Greenplum 소스 컴파일 및 빌드


그린플럼 데이터베이스 (Greenplum Database)를 컴파일하고 설정하는 절차를 설명합니다. 

각 단계는 다음과 같습니다:

 

  • git submodule update --init

 

Git 서브모듈을 초기화하고 업데이트합니다. 서브모듈은 그린플럼 데이터베이스의 의존성 라이브러리나 외부 프로젝트를 가져오는 데 사용됩니다.

 

 

  • ./configure --with-perl --with-python --with-libxml --with-gssapi --prefix=/usr/local/gpdb 

빌드 환경을 구성합니다. 이 명령어는 컴파일러와 필요한 라이브러리에 대한 설정을 수행하며, 설치 경로를 지정합니다.

 

 

  • make -j8 

 

컴파일 및 빌드 작업을 수행합니다. -j8 옵션은 병렬로 8개의 작업을 동시에 실행하도록 합니다. 컴파일이 정상 완료되면 아래와 같이 명령이 완료됩니다.

make[2]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpcontrib/gp_exttable_fdw' 나감 make[2]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpcontrib/gp_sparse_vector' 나감 make[1]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpcontrib' 나감 All of Greenplum Database successfully made. Ready to install. 

 

  • make -j8 install

 

컴파일된 바이너리와 라이브러리를 시스템에 설치합니다. 이로써 그린플럼 데이터베이스가 시스템에 설치됩니다. 위에서 /usr/local/gpdb를 디렉토리로 지정했으므로 해당 디렉토리에 권한이 있어야 합니다. 그러므로, sudo 명령을 이용해서 실행하면 install이 완료됩니다. 

make[2]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpcontrib/gp_exttable_fdw' 나감 make[2]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpcontrib/gp_sparse_vector' 나감 make[1]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpcontrib' 나감 All of Greenplum Database successfully made. Ready to install. 

 

  • source /usr/local/gpdb/greenplum_path.sh

 

 그린플럼 데이터베이스 환경 설정 스크립트를 현재 쉘 세션에 가져옵니다. 이렇게 하면 그린플럼 명령어와 환경 변수를 사용할 수 있습니다. 이 명령은 .bashrc에 넣어두면 재 로그인 시 다시 수행할 필요가 없습니다.

 

  • make create-demo-cluster

 

그린플럼의 데모 클러스터를 생성합니다. 이를 통해 그린플럼 데이터베이스를 데모 환경에서 실행하고 테스트할 수 있습니다. 이 명령을 수행시에 아래와 같은 에러가 나는 경우, PATH를 설정 후 psycopg2를 설치해 주고 재실행 하면 정상적으로 수행할 수 있습니다. 

import psycopg2
ModuleNotFoundError: No module named 'psycopg2'

만약 make create-demo-cluster 실행 중에 위 에러와 같이 psycopg2가 없다는 에러가 발생하면 아래와 같이 path를 설정한 후에 pip를 이용해서 psycopg2를 설치해 주어야 합니다. 

export PATH=$PATH:/usr/local/gpdb/bin/
pip install psycopg2
make create-demo-cluster
.....
gp_opt_version --------------------------------------------- GPOPT version: 4.0.0, Xerces version: 3.2.3 (1 row) ====================================================================== make[1]: 디렉터리 '/home/gpadmin/work/gpdb_src/gpAux/gpdemo' 나감.
  • source gpAux/gpdemo/gpdemo-env.sh

 

데모 클러스터를 시작할 때 사용되는 환경 설정 스크립트를 현재 쉘에 가져옵니다. 이 스크립트에는 포트 및 데이터 디렉터리와 같은 클러스터 설정 정보가 포함되어 있습니다.

이러한 단계를 따라 실행하면 그린플럼 데이터베이스를 컴파일하고 구성한 후 데모 클러스터를 시작할 수 있게 됩니다.

 

facebook twitter kakaoTalk kakaostory naver band shareLink