GreenPlum - 集群搭建安装

集群介绍

名称版本
操作系统centos 7.x 64bit
greenplumgreenplum-db-5.27.1-rhel7-x86_64

准备3台PC安装CentOS 7,这3台机器的用户名以及对应的IP

IP地址用户名主从
192.168.3.208master主机
192.168.3.209slave1从机
192.168.3.210slave2从机

安装环境准备

修改hostname

在IP地址为192.168.3.208的服务器上执行:

hostnamectl set-hostname master

在IP地址为192.168.3.209的服务器上执行:

hostnamectl set-hostname slave1

在IP地址为192.168.3.210的服务器上执行:

hostnamectl set-hostname slave2

修改master的/etc/hosts文件,如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.3.208 master
192.168.3.209 slave1
192.168.3.210 slave2

将修改后的/hosts文件分发给slave1和slave2

scp /etc/hosts slave1:/etc/hosts
scp /etc/hosts slave2:/etc/hosts

设置完成后每台虚拟机都需要重启,重启生效。

配置完成后使用ping命令检查这3个机器是否相互ping得通,以master为例,在执行命令:

ping -c 3 slave1
ping -c 3 slave2

依次修改各个节点/etc/sysconfig/network文件

同时修改各个子节点和主节点 /etc/sysconfig/network这个文件如下(这个不同节点配置不一样,无法复制,所有机器都要修改)

vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=maste

修改系统内核/etc/sysctl.conf文件

vi /etc/sysctl.conf
 
kernel.shmmni = 4096
kernel.shmall = 4000000000
# 在虚拟级上的配置
# kernel.sem = 250 512000 100 2048
# 在正式服务器上的配置,信号量不足会引起初始化失败。
kernel.sem = 50100 128256000 50100 2560
# 使能sysq功能
kernel.sysrq = 1

kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.defalut.arp_filter = 1
net.ipv4.ip_local_port_range = 1025 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152

### 测试环境要取消这个,否则oracle启不来 ### 值为1
vm.overcommit_memory = 2     

最后让配置生效:

sysctl -p

修改进程数

修改/etc/security/limits.d/20-nproc.conf文件

vi /etc/security/limits.d/20-nproc.conf

*          soft    nproc     131072
root       soft    nproc     unlimited

⚠️注意:XX-nproc.conf文件的20可能会变,例如90-nproc.conf之类的。

修改/etc/selinux/config文件

vi /etc/selinux/config 
 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

复制主节点配置到子节点

依次复制到各个子节点:

scp /etc/sysctl.conf slave1:/etc
scp /etc/security/limits.d/20-nproc.conf slave1:/etc/security/limits.d
scp /etc/selinux/config slave1:/etc/selinux

scp /etc/sysctl.conf slave2:/etc
scp /etc/security/limits.d/20-nproc.conf slave2:/etc/security/limits.d
scp /etc/selinux/config slave2:/etc/selinux

⚠️注意:XX-nproc.conf文件的20可能会变,例如90-nproc.conf之类的。

创建gpadmin用户(所有节点)

groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin
echo "gpadmin" | passwd --stdin gpadmin

关闭防火墙

关闭防火墙 :

systemctl stop firewalld.service  

关闭 开机自启动防火墙:

systemctl disable firewalld.service  

安装Greenplum DB

在Master节点上安装Greenplum DB

安装包是rpm格式的执行rpm安装命令:

rpm -ivh greenplum-db-5.27.1-rhel7-x86_64.rpm

默认的安装路径是/usr/local,然后需要修改该路径gpadmin操作权限:

chown -R gpadmin:gpadmin /usr/local/greenplum-db-5.27.1

创建配置集群hostlist文件,打通节点

创建一个hostlist,包含所有节点主机名:

su - gpadmin
mkdir -p /home/gpadmin/conf
vi /home/gpadmin/conf/hostlist

master
slave1
slave2

创建一个 seg_hosts ,包含所有的Segment Host的主机名:

vi /home/gpadmin/conf/seg_hosts

slave1
slave2

配置ssh免密连接:

su - gpadmin
source /usr/local/greenplum-db/greenplum_path.sh  
gpssh-exkeys -f /home/gpadmin/conf/hostlist

[STEP 1 of 5] create local ID and authorize on local host
  ... /home/gpadmin/.ssh/id_rsa file exists ... key generation skipped
[STEP 2 of 5] keyscan all hosts and update known_hosts file
[STEP 3 of 5] authorize current user on remote hosts
  ... send to slave1
  ... send to slave2
#提示:这里提示输入各个子节点gpadmin用户密码
[STEP 4 of 5] determine common authentication file content
[STEP 5 of 5] copy authentication files to all remote hosts
  ... finished key exchange with slave1
  ... finished key exchange with slave2
[INFO] completed successfully

测试免密连接是否成功:

[root@gp-master ~]# ssh slave1  #不需要密码即可登录;

或者:

gpssh -f /home/gpadmin/conf/hostlist

=> pwd
[slave1] /home/gpadmin
[slave2] /home/gpadmin
[master] /home/gpadmin
=> exit

出现上面结果就是成功了。

在Segment节点上安装Greenplum DB

在各个子节点进行文件夹赋权:

chown -R gpadmin:gpadmin /usr/local/greenplum-db-5.27.1
chown -R gpadmin:gpadmin /home/gpadmin

在主节点打包安装包并复制到各个子节点:

cd /usr/local/

打包:

tar -cf gp.tar greenplum-db-5.27.1/
gpscp -f /home/gpadmin/conf/seg_hosts gp.tar =:/usr/local/

ok,如果没有意外,就批量复制成功了,可以去子节点的相应文件夹查看,之后要将tar包解压,现在我们将采用对子节点使用批量解压操作:

source /usr/local/greenplum-db/greenplum_path.sh
gpssh -f /home/gpadmin/conf/seg_hosts  #统一处理子节点

=> cd /usr/local
[slave1]
[slave2]
=> tar -xf gp.tar
[slave1]
[slave2]
#建立软链接
=> ln -s ./greenplum-db-5.27.1 greenplum-db
[slave1]
[slave2]
=> ll(可以使用ll查看一下是否已经安装成功)
=>exit(退出)

这样就完成了所有节点的安装。

初始化数据库

创建资源目录

source /usr/local/greenplum-db/greenplum_path.sh
gpssh -f /home/gpadmin/conf/hostlist #统一处理所有节点

#创建资源目录 /home/gpadmin/greenplum/data下一系列目录(生产目录个数可根据需求生成)
mkdir -p /home/gpadmin/greenplum/data/master
mkdir -p /home/gpadmin/greenplum/data/primary
mkdir -p /home/gpadmin/greenplum/data/mirror
mkdir -p /home/gpadmin/greenplum/data2/primary
mkdir -p /home/gpadmin/greenplum/data2/mirror

环境变量配置

在主节点进行环境变量配置

vi /home/gpadmin/.bash_profile 在最后添加

source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/greenplum/data/master/gpseg-1
export GPPORT=5432
export PGDATABASE=gp_sydb

然后依次复制到各个子节点:

scp /home/gpadmin/.bash_profile slave1:/home/gpadmin/
。。。

让环境变量生效:

source .bash_profile

初始化前检查连通性

检查节点与节点之间文件读取;

cd /usr/local/greenplum-db/bin

gpcheckperf -f /home/gpadmin/conf/hostlist -r N -d /tmp

-------------------
--  NETPERF TEST
-------------------

====================
==  RESULT
====================
Netperf bisection bandwidth test
master -> slave1 = 72.220000
slave1 -> slave2 = 21.470000
slave2 -> master = 43.510000

Summary:
sum = 181.40 MB/sec
min = 21.47 MB/sec
max = 72.22 MB/sec
avg = 45.35 MB/sec
median = 44.20 MB/sec

出现以上内容证明各个节点已经可以连通。

执行初始化

初始化 Greenplum 配置文件模板都在/usr/local/greenplum-db/docs/cli_help/gpconfigs目录下,gpinitsystem_config是初始化 Greenplum 的模板,此模板中 Mirror Segment的配置都被注释;创建一个副本,对其以下配置进行修改:

cd /usr/local/greenplum-db/docs/cli_help/gpconfigs
cp gpinitsystem_config initgp_config
vi initgp_config  

#以下为文本要修改的属性字段配置      
#资源目录为创建的资源目录,配置几次资源目录就是每个子节点有几个实例(推荐4-8个,这里配置了6个,primary与mirror文件夹个数对应)

declare -a DATA_DIRECTORY=(/home/gpadmin/greenplum/data/primary /home/gpadmin/greenplum/data/primary /home/gpadmin/greenplum/data/primary /home/gpadmin/greenplum/data2/primary /home/gpadmin/greenplum/data2/primary /home/gpadmin/greenplum/data2/primary)

declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/greenplum/data/mirror /home/gpadmin/greenplum/data/mirror /home/gpadmin/greenplum/data/mirror /home/gpadmin/greenplum/data2/mirror /home/gpadmin/greenplum/data2/mirror /home/gpadmin/greenplum/data2/mirror)

# 配置的初始化数据库名称
ARRAY_NAME="gp_sydb"      
# 主节点名称
MASTER_HOSTNAME=master
# 资源目录为之前创建的资源目录
MASTER_DIRECTORY=/home/gpadmin/greenplum/data/master 
# 与之前配置一样
# MASTER_DATA_DIRECTORY=/opt/greenplum/data/master/gpseg-1 
# 配置的初始化数据库名称
DATABASE_NAME=gp_sydb        
# 就是之前创建的文件
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts             

执行初始化;

gpinitsystem -c initgp_config -S

若初始化失败,需要删除/home/gpadmin下的数据资源目录重新初始化;

若初始化成功,那恭喜你已经安装成功了。

数据库操作

停止和启动集群

gpstop -M fast
gpstart -a

登录数据库

$ psql -d postgres  #进入某个数据库

postgres=# \l # 查询数据库
                 List of databases
   Name    |  Owner  | Encoding |  Access privileges  
-----------+---------+----------+---------------------
 gp_sydb   | gpadmin | UTF8     | 
 postgres  | gpadmin | UTF8     | 
 template0 | gpadmin | UTF8     | =c/gpadmin : gpadmin=CTc/gpadmin
 template1 | gpadmin | UTF8     | =c/gpadmin : gpadmin=CTc/gpadmin
(4 rows)
postgres=# \i test.sql #执行sql
postgres=# copy 表名 to '/tmp/1.csv' with 'csv';      #快速导出单表数据
postgres=# copy 表名 from '/tmp/1.csv' with 'csv';    #快速导入单表数据
postgres=# \q          #退出数据库
\password 设置密码
\q 退出 
\h 查看SQL命令的解释,比如\h select
\?                  查看psql命令列表
\l                  列出所有数据库
\c [database_name]  连接其他数据库
\d                  列出当前数据库的所有表格
\d [table_name]     列出某一张表格的结构
\x                  对数据做展开操作
\du                 列出所有用户

设置密码和远程访问

首先为gpadmin用户创建密码

$ psql -d postgres  # 进入某个数据库
# 首先为gpadmin用户创建密码
alter role gpadmin with password 'gpadmin';

接着在$MASTER_DATA_DIRECTORY//pg_hba.conf文件中增加(/opt/greenplum/data/master/gpseg-1/pg_hba.conf):

host all gpadmin 192.168.154.1/32 md5(需要远程连接数据库的机器的ip)

重新加载配置文件

gpstop -u

在其他机器上登录数据库

gpsql  -h 192.168.3.208  -p 5432 -d postgres  -u gpadmin

创建新用户

创建新用户 create role dbdream(用户名) password 'dbdream'(密码) createdb login(用户权限);

集群状态

# 查看mirror的状态
gpstate -e 
# 查看standby master的状态
gpstate -f 
# 查看整个GP群集的状态
gpstate -s 
# 查看GP的版本
gpstate -i 
# 帮助文档,可以查看gpstate更多用法
gpstate --help 

目前为止数据库已经操作完毕。默认只有本地可以连数据库,如果需要别的I可以连,需要修改gp_hba.conf文件,具体这里不再赘述。

greenplum的hadoop环境配置

说明:安装greenplum后,建外部表如果需要读取HDFS文件的话,需要进行该配置。

1、(所有子节点)解压tar -zxvf hadoop-2.6.0-cdh5.8.0.tar.gz 至/home/hadoop/yarn/hadoop-2.6.0-cdh5.8.0/

2、(所有子节点)解压hadoop依赖的jdk tar -zxvf jdk-7u75-linux-x64.tar.gz 至/usr/java/jdk1.7.0_75

3、(所有子节点)修改gpadmin用户参数

vi /home/gpadmin/.bash_profile
在配置文件添加
export JAVA_HOME=/usr/java/jdk1.7.0_75
export CLASSPATH=$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop/yarn/hadoop-2.6.0-cdh5.8.0
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH

4、(只在master节点执行)配置hadoop版本信息及路径信息

gpconfig -c gp_hadoop_target_version -v "cdh5"
gpconfig -c gp_hadoop_home -v "/home/hadoop/yarn/hadoop-2.6.0-cdh5.8.0"

5、重启gp

常用语句

查看表结构:

select 
	a.attname 字段名, 
	pg_catalog.format_type(a.atttypid, a.atttypmod) as 类型
from pg_catalog.pg_attribute a,pg_catalog.pg_class c, pg_catalog.pg_namespace n
where a.attrelid=c.oid
	and a.attnum>0 AND NOT a.attisdropped
	and n.oid = c.relnamespace
	and n.nspname='public'
	and c.relname='employees'
order by a.attnum

gpfdist组件使用

启动命令:

nohup /usr/local/greenplum-db-5.27.1/bin/gpfdist -d /home/gpadmin/ -p 8090 > /home/gpadmin/gpfdist.log &

另外一种写法:

gpfdist -d /u01 -p 5555  -l /tmp/gpfdist.log &

参数解释:

-d 数据文件所放的目录

-p 设置访问gpfdist端口,这个可以根据实际情况写。

-l 设置日志文件所放的目录,这个参数也可以不用填写。

& 必须要写。

查看gpfdist是否开启:

ps -ef|grep pfdist

查看启动日志:

more /home/gpadmin/gpfdist.log

建立外部表:

create external table 外部表名(
列名1 数据类型,
列名2 数据类型...
)
LOCATION(
'gpfdist://服务器IP:gpfdist服务的端口/数据源文件'
) 
FORMAT '数据源模式' (HEADER DELEMITER AS ',')  
log errors into err.test_csv  encoding 'utf-8';

注意:
外部表的数据定义不能有约束条件如not null ,default 等。
HEADER 表示csv文件的第一行定义了数据的数据类型
DELIMITER ‘,’ 表示用,分隔数据
NULL as ‘’ 表示’'为空值
encoding ‘utf-8’ 表示用utf-8编码

进入psql:

psql -d postgres

建立外部表:

create external table public.employees1 (
emp_no int,
birth_date date,
first_name varchar(14),
last_name varchar(16),
gender varchar(10),
hire_date date,
update_time timestamp,
create_time timestamp)
location (
'gpfdist://192.168.154.208:8090/gpextdata/employees.csv'
)
Format 'CSV' (header)
encoding 'GBK'
SEGMENT REJECT LIMIT 10000
;
create external table public.test (
emp_no int,
birth_date date)
location (
'gpfdist://192.168.154.208:8090/gpextdata/employees.csv'
)
Format 'CSV' (header)
encoding 'SQL_ASCII';

drop external table public.test;

insert into 导入数据

=# insert into 需要导入到的表名 select  * from 外部表名
delete public.employees em where exist (select 1 from public.employees1 wem where wem.id = em.id);
insert into public.employees select * from public.employees1;

假如出现:

ERROR:  date/time field value out of range: "26/6/1986"  (seg1 slice1 192.168.154.209:6001 pid=3531)
DETAIL:  External table employees1, line 2 of gpfdist://192.168.154.208:8090/gpextdata/employees.csv, column hire_date

是因为CSV时间格式是:DMY格式的。需要设置:

SET DateStyle="ISO,DMY";
SET DateStyle="DMY";

MDY格式的需要设置:

set lc_time to 'en_AU'

导入完成后将设置更改回去:

SET DateStyle=default;

删除外部表:

drop external table public.employees1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值