在 Mac 上编译安装并运行 Greenplum
记录在 MacOS 上编译、安装、运行 Greenplum 的步骤。
下载代码
git clone https://github.com/greenplum-db/gpdb.git
cd gpdb
安装依赖
./README.macOS.bash
source ~/.bashrc
## 如果遇到 Error: unable to import module: No module named 'pgdb' 报错安装 PyGreSQL,而非 pgdb
pip3 install PyGreSQL
pip3 install psutil
配置 ssh
mkdir -p "$HOME/.ssh"
cat >> ~/.bash_profile << EOF
# Allow ssh to use the version of python in path, not the system python
# BEGIN SSH agent
# from http://stackoverflow.com/questions/18880024/start-ssh-agent-on-login/18915067#18915067
SSH_ENV="\$HOME/.ssh/environment"
# Refresh the PATH per new session
sed -i .bak '/^PATH/d' \${SSH_ENV}
echo "PATH=\$PATH" >> \${SSH_ENV}
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "\${SSH_ENV}"
echo succeeded
chmod 600 "\${SSH_ENV}"
source "\${SSH_ENV}" > /dev/null
/usr/bin/ssh-add;
}
# Source SSH settings, if applicable
if [ -f "\${SSH_ENV}" ]; then
. "\${SSH_ENV}" > /dev/null
ps -ef | grep \${SSH_AGENT_PID} 2>/dev/null | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
[ -f ~/.bashrc ] && source ~/.bashrc
# END SSH agent
EOF
source ~/.bash_profile
sudo tee -a /etc/ssh/sshd_config << EOF
# Allow ssh to use the version of python in path, not the system python
PermitUserEnvironment yes
EOF
确保能够从本机免密登录:
ssh `hostname`
编译安装
./configure --with-perl --with-python --with-libxml --with-gssapi --enable-debug --disable-gpfdist
make -j8
sudo make install
# Bring in greenplum environment into your running shell
source /usr/local/gpdb/greenplum_path.sh
启动 demo 集群
# 查看端口号是否被占用
sudo lsof -PiTCP -sTCP:LISTEN
# 选择一个端口号启动集群
cd gpAux/gpdemo
WITH_MIRRORS=false WITH_STANDBY=false PORT_BASE=5555 make cluster
# 设置环境变量
source gpdemo-env.sh
在需要调试集群的时候,segemnts 的个数越少越方便定位问题,因此可以指定只启动一个 segement:
WITH_MIRRORS=false WITH_STANDBY=false PORT_BASE=5555 NUM_PRIMARY_MIRROR_PAIRS=1 make cluster
删除 demo 集群
make clean
启停集群
在使用集群的过程中,并不需要频繁地创建或是删除集群,应该使用 gpdb 提供的工具来启停集群:
# 停止集群
gpstop -a
# 启动集群
gpstart -a
# 查看集群状态
gpstate -s
Troubleshooting
Problem 1:
.bashrc
中使用 ulimit -n 65536 65536
设置了文件描述符的个数和文件的大小,但在集群启动的时候遇到了 Child process was terminated by signal 25, File size limit exceeded 的错误,改为 ulimit -n 65536 unlimited
后解决问题。另外在解决问题的过程中还进行了如下设置:
launchctl limit maxfiles
sudo launchctl limit maxfiles 65536 1048576
但不确定是否跟问题的解决相关。
Problem 2:
gpfdist
依赖 apr-1-config
,在 mac 上安装 apr 未创建 apr-1-config
的软链接导致如下报错:
configure: error: apr-1-config is required for gpfdist, unable to find binary
通过安装 apr/apr-util 并创建 apr-1-config
的软链接解决:
brew install apr
brew install apr-util
ln -s /usr/local/Cellar/apr/1.7.0_2/bin/apr-1-config /usr/local/bin/apr-1-config
Plan B
毕竟在 Mac 上编译开发还是伤笔记本的,如果条件允许还是在 ECS 上编译吧。
Setup a dev enviroment for gpdb.
Copyright © 2016-2024 by 赵军旺