CentOS7 安装GreenPlum详细步骤

mac2024-04-21  40

GreenPlum 安装详细步骤 1 、环境准备 1、 CentOS7.2 2 、 greenplum-db-4.3.9.1-build-1-rhel5-x86_64.bin 此文件为 GreenPlum ( 以下简称为 gp )的安装文件,由于此文件需从国外官网下载比较费劲,所以一并附在压缩包中。 3 、以下步骤若未说明均在 root 用户下进行操作 2 、配置系统信息 1.gp 集群介绍 本次 gp集群安装使用了 4台机器,其中 1台为 master, 3台为 segment, ip为 7.7.8.151 7.7.8.152 7.7.8.153 7.7.8.154 其中 7.7.8.151为 master 其余为 segment。 修改/etc/sysconfig/network-scripts/ifconfig-eth0文件(所有机器均需修改) 修改机器的 ip、子网掩码、 dns等等 修改/etc/hosts文件(所有机器均需修改) 此处主要是为之后 gp集群之间的相互通信做准备 (注意:一定要按照此格式书写,其中第三块的意思是为了与后面所用到的配置文件相匹配) 修改/etc/hostname文件与/etc/sysconfig/network文件(所有机器均需修改) hostname为主机名,根据个人情况定,本次四台机器分别为 mdw、 sdw1、 sdw2、 sdw3 重启网络并测试(所有机器均重启并测试) 重启网络: service network restart 用主机名来测试各主机是否能 ping通 创建用户和用户组(所有机器均需修改) 创建用户组: groupadd -g 530 sdzw 创建用户: useradd -g 530 -u530 -m -d /home/sdzw -s /bin/bash sdzw 为用户 sdzw设置密码: passwd sdzw 修改文件/etc/sysctl.conf(所有机器均需修改) 以下内容直接追加在文件最后即可 kernel.shmmax = 500000000 kernel.shmmni = 4096 kernel.shmall = 4000000000 kernel.sem = 250 512000 100 2048 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.conf.default.accept_source_route = 0 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.conf.all.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 vm.overcommit_memory = 2 修改后各节点执行 sysctl -p 使其生效 修改文件/etc/security/limits.conf(所有机器均需修改) 在文件末尾追加以下内容,注意不要漏掉 *号 * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 关闭防火墙及selinux(所有机器均需修改) 停止防火墙 systemctl stop firewalld.service 禁止防火墙 systemctl disable firewalld.service 修改 selinux配置文件如下图黄色字体所示 3 、安装 GreenPlum 1. 创建安装文件目录(所有机器) 创建目录: mkdir /sdzw/greenplum 给 sdzw用户修改文件夹权限 chown -R sdzw:sdzw /sdzw/greenplum 之后把安装包 greenplum-db-4.3.9.1-build-1-rhel5-x86_64.bin放于 /opt/greenplum当中 2. 安装 gp (只需在 master 主机上) 1.首先给文件赋权: chmod +x greenplum-db-4.3.9.1-build-1-rhel5-x86_64.bin 2. 执行安装: ./greenplum-db-4.3.9.1-build-1-rhel5-x86_64.bin (安装期间需要手动输入安装目录 /opt/greenplum/greenplum-db-4.3.9.1否则会默认安装到 /usr/local下,且需手动输入几次 yes) 3.完成后即安装成功,此时 master上的 gp已经安装成功。但它是以 root身份安装的,所以修改下文件夹的用户 chown -R sdzw:sdzw /sdzw/greenplum 3. 创建配置文件(以 sdzw 用户只需在 master 主机上) 首先以sdzw用户登陆 su sdzw 创建文件夹 cd /sdzw mkdir conf 在/sdzw/conf下创建2个文件hostlist 和seg_hosts,内容如下图所示 4. 打通所有结点(以 sdzw 用户只需在 master 主机上) 执行以下两条命令: source /sdzw/greenplum/greenplum-db/greenplum_path.sh gpssh-exkeys -f /sdzw/conf/hostlist 当看到 completed successfully 说明成功打通 然后执行 gpssh -f /home/sdzw/conf/hostlist 进行测试会提示 Note: command history unsupported on this machine ... => 输入 pwd会显示 [sdw1] /home/sdzw [sdw3] /home/sdzw [sdw2] /home/sdzw [ mdw] /home/sdzw => 输入 exit退出 5. 将安装包分发到每个节点上(以 sdzw 用户只需在 master 主机上) cd /sdzw/greenplum/ tar -cf gp.4.3.tar greenplum-db-4.3.9.1/ 然后利用 gpscp命令将这个文件复制到每一台机器上: gpscp -f /sdzw/conf/hostlist gp.4.3.tar =:/sdzw/greenplum/ ok,如果没有意外,就批量复制成功了,可以去子节点的相应文件夹查看,之后要将 tar包解压,我们使用批量操作 [sdzw@mdw conf]$ gpssh -f /sdzw/conf/hostlist => cd /sdzw/greenplum [sdw3] [sdw1] [sdw2] [mdw] => tar -xf gp.4.3.tar [sdw3] [sdw1] [sdw2] [mdw] 建立软链接 => ln -s ./greenplum-db-4.3.9.1 greenplum-db [sdw3] [sdw1] [sdw2] [mdw] => ll (可以使用 ll查看一下是否已经安装成功 ) 这样,就完成了所有几点的安装,接下来初始化数据库 6. 初始化数据库(以 sdzw 用户只需在 master 主机上) [sdzw@mdw conf]$ gpssh -f /sdzw/conf/hostlist => cd /sdzw => mkdir gpdata [sdw3] [ mdw] [sdw2] [sdw1] => cd gpdata [sdw3] [ mdw] [sdw2] [sdw1] => mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2 [sdw3] [ mdw] [sdw2] [sdw1] => ll [sdw3] 总用量 20 [sdw3] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam1 [sdw3] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam2 [sdw3] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap1 [sdw3] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap2 [sdw3] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpmaster [ mdw] 总用量 20 [ mdw] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam1 [ mdw] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam2 [ mdw] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap1 [ mdw] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap2 [ mdw] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpmaster [sdw2] 总用量 20 [sdw2] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam1 [sdw2] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam2 [sdw2] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap1 [sdw2] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap2 [sdw2] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpmaster [sdw1] 总用量 20 [sdw1] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam1 [sdw1] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatam2 [sdw1] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap1 [sdw1] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpdatap2 [sdw1] drwxrwxr-x 2 sdzw sdzw 4096 7月 18 19:46 gpmaster => exit 7. 配置 .bash_profile 环境变量(以 sdzw 用户在每台机器上) [sdzw@mdw ~]$ cd [sdzw@mdw ~]$ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH source /sdzw/greenplum/greenplum-db/greenplum_path.sh export MASTER_DATA_DIRECTORY=/sdzw/gpdata/gpmaster/gpseg-1 export PGPORT=5432 export PGDATABASE=gpdb 其实就是加上最后四行,然后 source .bash_profile让环境变量生效 ,如果后期出现了新窗口中 greenplum的命令找不到的情况, 就是 ( source /sdzw/greenplum/greenplum-db/greenplum_path.sh) 这一句没成功实现开机执行,再加到环境变量里 如 .bashrc 初始化配置文件(以sdzw用户只需在master机器上) [sdzw@mdw ~]$ cat /sdzw/conf/gpinitsystem_config ARRAY_NAME="Greenplum" SEG_PREFIX=gpseg PORT_BASE=33000 declare -a DATA_DIRECTORY=(/sdzw/gpdata/gpdatap1 /sdzw/gpdata/gpdatap2) MASTER_HOSTNAME=mdw MASTER_DIRECTORY=/sdzw/gpdata/gpmaster MASTER_PORT=5432 TRUSTED_SHELL=/usr/bin/ssh MIRROR_PORT_BASE=43000 REPLICATION_PORT_BASE=34000 MIRROR_REPLICATION_PORT_BASE=44000 declare -a MIRROR_DATA_DIRECTORY=(/sdzw/gpdata/gpdatam1 /sdzw/gpdata/gpdatam2) MACHINE_LIST_FILE=/sdzw/conf/seg_hosts 9. 初始化数据库(以 sdzw 用户只需在 master 机器上) gpinitsystem -c /sdzw/conf/gpinitsystem_config -s sdw3 其中 sdw3是指 master的 standby(备份)所在的节点,我看书上和网上的一些资料都将 standby放在最后一个节点,可能是约定俗成的吧。 如果上面有一些配置有问题, gpinitsystem就不能成功,日志在主节点 /home/sdzw/sdzwLogs/的 gpinitsystem_2016XXXX.log文件中。 需要注意的是如果初始化失败,一定要认真查看这个日志文件,一味重复安装没有太大意义,重要的是要找到主要原因。 4 、测试 到此为止 gp安装所有工作已完成,接下来进行个简单的测试 sdzw 用户 psql -p 5433 -d pgDB 集群 Postgres 用户 psql -p 5432 -d postgres 单个数据库 重启 服务重启 systemctl restart postgresql-9.4 5 、 GreenPlum Common Center 监控工具 安装 GPCC GreenPlum官方提供了一套可视化的监控工具,名为 GreenPlum Common Center(以下简称 GPCC),使用此工具可以以图形方式将各种性能指标以图形方式展现出来,接下来介绍如何安装。 创建监控数据库,数据库名为gpperfmon,并打开gp_enable_gpperfmon参数,并创建gpmon用户并设置用户密码。 $ createdb gpperfmon $ createuser gpmon ALTER USER gpmon WITH PASSWORD ‘gpmon’; $ gpperfmon_install --enable --password gpmon --port 5432 $ gpstop -r 重启数据库使以上设置生效 确认监控采集进程是否已经启动 $ ps -ef | grep gpmmon $ psql -d gpperfmon -c ‘select * from system_now’ 安装GPCC 切换到 root用户 把 pg_hba.conf 中 local all all ident 改为 local all all trust # chmod +x greenplum-cc-web-2.0-build-32-RHEL5.x86_64.bin # ./chmod +x greenplum-cc-web-2.0-build-32-RHEL5.x86_64.bin 安装时输入安装目录。 安装完后赋权并使环境变量生效 # chown -R gpadmin:gpadmin greenplum-4.3.3/ # chown -R gpadmin:gpadmin greenplum-cc-web # source /home/greenplum-4.3-cc/gpcc_path.sh 安装配置 # gpcmdr --setup 安装完后 gpcmdr --start gpcc 启动 浏览 http://mdw:28080 用户名和密码均为刚刚设置的 gpmon

分区表的创建

1.自动日期分区 CREATE TABLE sales (id int, date date, amt decimal(10,2)) DISTRIBUTED BY (id) PARTITION BY RANGE (date) ( START (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 day') ); 创建按月分区 CREATE TABLE sales (id int, date date, amt decimal(10,2)) DISTRIBUTED BY (id) PARTITION BY RANGE (date) ( PARTITION Jan08 START (date '2008-01-01') INCLUSIVE , PARTITION Feb08 START (date '2008-02-01') INCLUSIVE , PARTITION Mar08 START (date '2008-03-01') INCLUSIVE , PARTITION Apr08 START (date '2008-04-01') INCLUSIVE , PARTITION May08 START (date '2008-05-01') INCLUSIVE , PARTITION Jun08 START (date '2008-06-01') INCLUSIVE , PARTITION Jul08 START (date '2008-07-01') INCLUSIVE , PARTITION Aug08 START (date '2008-08-01') INCLUSIVE , PARTITION Sep08 START (date '2008-09-01') INCLUSIVE , PARTITION Oct08 START (date '2008-10-01') INCLUSIVE , PARTITION Nov08 START (date '2008-11-01') INCLUSIVE , PARTITION Dec08 START (date '2008-12-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE ); 按年分区 CREATE TABLE rank (id int, rank int, year int, gender char(1), count int) DISTRIBUTED BY (id) PARTITION BY RANGE (year) ( START (2001) END (2008) EVERY (1), DEFAULT PARTITION extra ); 列表分区,以性别做分区依据列,男女共两个分区 CREATE TABLE rank (id int, rank int, year int, gender char(1), count int ) DISTRIBUTED BY (id) PARTITION BY LIST (gender) ( PARTITION girls VALUES ('F'), PARTITION boys VALUES ('M'), DEFAULT PARTITION other ); 范围,列表,时间分区 CREATE TABLE sales (trans_id int, date date, amount decimal(9,2), region text) DISTRIBUTED BY (trans_id) PARTITION BY RANGE (date) SUBPARTITION BY LIST (region) SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia'), SUBPARTITION europe VALUES ('europe'), DEFAULT SUBPARTITION other_regions) START (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 month'), DEFAULT PARTITION outlying_dates ); 年,月,时间,列表分区 CREATE TABLE sales (id int, year int, month int, day int, region text) DISTRIBUTED BY (id) PARTITION BY RANGE (year) SUBPARTITION BY RANGE (month) SUBPARTITION TEMPLATE ( START (1) END (13) EVERY (1), DEFAULT SUBPARTITION other_months ) SUBPARTITION BY LIST (region) SUBPARTITION TEMPLATE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION europe VALUES ('europe'), SUBPARTITION asia VALUES ('asia'), DEFAULT SUBPARTITION other_regions ) ( START (2002) END (2010) EVERY (1), DEFAULT PARTITION outlying_years ); 增加表分区 ALTER TABLE sales ADD PARTITION START (date '2009-02-01') INCLUSIVE END (date '2009-03-01') EXCLUSIVE; 增加子分区 ALTER TABLE sales ADD PARTITION START (date '2009-02-01') INCLUSIVE END (date '2009-03-01') EXCLUSIVE ( SUBPARTITION usa VALUES ('usa'), SUBPARTITION asia VALUES ('asia'), SUBPARTITION europe VALUES ('europe') ); 1) Greenplum 通过外部表的方式让所有 segment 同时连接到一组外部服务 gpfdist, 同时拉取数据 2) gpfdist 随机分发数据给所有 segment. 3) segment拿到数据后先解析它,根据表的分发规则收下属于自己的数据,把不属于自己的数据再分发给所属的segment. 整个过程充分利用了网络和各 segment 的硬件资源,效率极高. demo: 1) 在文件服务器上启动gpfdist服务,端口号8080,指定文本文件所在目录  ./gpfdist -d /u01/gp001/dss-data/ -p 8080 -l /u01/gp001/loadlog.log 2) 连接Greenplum master节点,创建外部表 CREATE EXTERNAL TABLE LINEITEM_LOAD (     L_ORDERKEY      INTEGER ,      L_PARTKEY       INTEGER ,      L_SUPPKEY       INTEGER ,      L_LINENUMBER    INTEGER,     L_QUANTITY      DECIMAL,     L_EXTENDEDPRICE DECIMAL,     L_DISCOUNT      DECIMAL,     L_TAX           DECIMAL,     L_RETURNFLAG    CHAR(1),     L_LINESTATUS    CHAR(1),     L_SHIPDATE      DATE,     L_COMMITDATE    DATE,     L_RECEIPTDATE   DATE,     L_SHIPINSTRUCT  CHAR(25),     L_SHIPMODE      CHAR(10),     L_COMMENT       VARCHAR(44) ) LOCATION ('gpfdist://1192.168.1.1:8080/lineitem.csv') FORMAT 'CSV' (DELIMITER '|'); 关键信息:  1. 指定了外部数据源是刚才启动的gpfdist服务,并指定了需要导入的文本文件名 2 文本的根式是CSV,列之间用 | 分隔. 3) 按照需求创建表,数据会导入到这个表中         CREATE TABLE LINEITEM (                 L_ORDERKEY ,                     L_PARTKEY ,                   L_SUPPKEY ,                   L_LINENUMBER    INTEGER,                 L_QUANTITY              DECIMAL,                 L_EXTENDEDPRICE DECIMAL,                 L_DISCOUNT              DECIMAL,                 L_TAX                   DECIMAL,                 L_RETURNFLAG    CHAR(1),                 L_LINESTATUS    CHAR(1),                 L_SHIPDATE              DATE,                 L_COMMITDATE    DATE,                 L_RECEIPTDATE   DATE,                 L_SHIPINSTRUCT  CHAR(25),                 L_SHIPMODE              CHAR(10),                 L_COMMENT               VARCHAR(44)         )  with (OIDS=false) DISTRIBUTED BY (l_orderkey, l_linenumber); 4) 通过外部数据源把数据导入到 Greenplum 中 insert into lineitem select * from lineitem_load; 5) 通过执行计划,可以理解他是工作原理, 整个过程 master 节点不会处理数据,都由 segment完成. explain insert into lineitem select * from lineitem_load;                                              QUERY PLAN                                               -----------------------------------------------------------------------------------------------------  Insert (slice0; segments: 16)  (rows=62500 width=426)    ->  Redistribute Motion 16:16  (slice1; segments: 16)  (cost=0.00..18500.00 rows=62500 width=426)          Hash Key: l_orderkey, lineitem_load.l_linenumber          ->  External Scan on lineitem_load  (cost=0.00..18500.00 rows=62500 width=426)  Settings:  effective_cache_size=1GB (5 rows) 清理连接 postgresql9.1之后 SELECT      pg_terminate_backend(pid)  FROM      pg_stat_activity  WHERE       -- don't kill my own connection!     pid <> pg_backend_pid()     -- don't kill the connections to other databases      AND  datname =  'database_name'     ; If you're using Postgres 8.4-9.1 use procpid instead of pid SELECT      pg_terminate_backend(procpid)  FROM      pg_stat_activity  WHERE       -- don't kill my own connection!     procpid <> pg_backend_pid()     -- don't kill the connections to other databases      AND  datname =  'database_name'     ; 查看活跃连接 select * from  pg_stat_activity
最新回复(0)