DM8 大规模并行处理 MPP (MassivelyParallelProcessing) -- 环境搭建和使用

一、环境说明

本例配置一个两节点 MPP。两个节点都配置两块网卡,一块接入内部网络交换模块,一
块接入到外部交换机。

两节点实例名分别为 EP01 和 EP02,相关的 IP、端口等规划见下表。

 

实例名 MAL_INST_HOST MAL_INST_PORT  MAL_HOST MAL  端口 MPP_SEQNO
EP01  dmmpp1  5236   dmmpp1-priv 5269   0
EP02 dmmpp2 5237 dmmpp2-priv 5270  1

 

[root@dmmpp1 network-scripts]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.158  dmmpp1
192.168.31.159  dmmpp2
19.21.68.158    dmmpp1-priv
19.21.68.159    dmmpp2-priv

二、安装mpp

2.1、在dmmpp1与dmmpp2创建实例,分别是EP01,EP02

DM8 大规模并行处理 MPP (MassivelyParallelProcessing) -- 环境搭建和使用_第1张图片

DM8 大规模并行处理 MPP (MassivelyParallelProcessing) -- 环境搭建和使用_第2张图片

2.2、分别对两台实例的 dm.ini 进行配置。

修改 EP01 的 dm.ini 的以下几个参数如下:
INSTANCE_NAME  = EP01
PORT_NUM  = 5236
MAL_INI = 1
MPP_INI = 1
修改 EP02 的 dm.ini 的以下几个参数如下:
INSTANCE_NAME  = EP02
PORT_NUM  = 5237
MAL_INI = 1
MPP_INI = 1

2.3、分别对两台实例的 dmmal.ini 进行配置。

为两个 EP 配置 dmmal.ini 如下,配置完全一样,EP 间可互相拷贝。dmmal.ini 与
dm.ini 放在相同的目录下。

[root@dmmpp2 EP02]# cat dmmal.ini 
[MAL_INST1]
MAL_INST_NAME = EP01
MAL_HOST = dmmpp1-priv
MAL_PORT = 5269
MAL_INST_HOST = dmmpp1
MAL_INST_PORT = 5236

[MAL_INST2]
MAL_INST_NAME = EP02
MAL_HOST = dmmpp2-priv
MAL_PORT = 5270
MAL_INST_HOST = dmmpp2
MAL_INST_PORT = 5237

2.4、配置两台 dmmpp.ini。

dmmpp.ctl 是一个二进制文件,用户不能直接配置,需要先配置 dmmpp.ini。
配置 dmmpp.ini 如下:

[root@dmmpp1 EP01]# cat dmmpp.ini 
[SERVICE_NAME1]
MPP_SEQ_NO = 0
MPP_INST_NAME  = EP01
[SERVICE_NAME2]
MPP_SEQ_NO = 1
MPP_INST_NAME  = EP02

2.5、转换两台dmmpp.ctl

转换生成的 dmmpp.ctl 需要放在与 dm.ini 同一个目录。下面的命令将 dmmpp.ini 转换为 dmmpp.ctl,命令中的“TYPE=2”参数表示将文本文件转换成控制文件,也可以使用“TYPE=1”参数进行逆向转换。

[dmdba@dmmpp2 EP02]$ dmctlcvt  TYPE=2  SRC=/dm/dmdbms/data/EP02/dmmpp.ini DEST=/dm/dmdbms/data/EP02/dmmpp.ctl
DMCTLCVT V8
convert txt to ctl success!

3、分别重启服务

经过前面四个步骤,DM MPP 环境已经配置完成了。分别启动 EP01 和 EP02 的 DM 数据库实例(顺序不分先后),DM MPP 系统即能正常运行,用户就可以登录任一 EP 进行数据库操作了。

[root@dmmpp1 EP01]# systemctl restart DmServiceEP01.service  
systemctl restart DmAPService.service
[root@dmmpp1 EP01]# systemctl restart DmAPService.service


[root@dmmpp2 EP02]# systemctl restart DmServiceEP02.service  
systemctl restart DmAPService.service
[root@dmmpp2 EP02]# systemctl restart DmAPService.service

 

4、建立分布表

DM MPP 支持表数据的哈希分布、随机分布、复制分布、范围分布、LIST 分布类型,用户可根据实际情况选择合适的分布类型,MPP 的数据分布类型和具体设置在建表时指定,语法如下,建表的其他语法分支可参见

《DM8_SQL 语言使用手册》。
CREATE [[GLOBAL] TEMPORARY] TABLE <表名定义> <表结构定义>;
<表结构定义>::=<表结构定义 1> | <表结构定义 2>
<表结构定义 1>::= (<列定义> {,<列定义>} [,<表级约束定义>{,<表级约束定义>}]) [ON COMMIT
 ROWS] [][<空间限制子句>] [][<
压缩子句>] [][]
<表结构定义 2>::= [ON COMMIT  ROWS] [<空间限制子句>] [] [<压缩子句>]AS <不带 INTO 的 SELECT 语句>[];
::=DISTRIBUTED[|]
|DISTRIBUTED BY [](<列名> {,<列名>})
|DISTRIBUTED BY RANGE (<列名> {,<列名>})(<范围分布项> {,<范围分布项>})
|DISTRIBUTED BY LIST (<<列名> {,<列名>}>)( {,})
<范围分布项>::= VALUES LESS THAN (<表达式>{,<表达式>}) ON <实例名>
|VALUES EQU OR LESS THAN (<表达式>{,<表达式>}) ON <实例名>
::= VALUES (<表达式>{,<表达式>}) ON <实例名>

4.1、创建示例

例 1:创建哈希分布表 T_HASH,分布列为 C1。
CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);
例 2:创建随机分布表 T_RANDOM。
CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;
例 3:创建复制分布表 T_FULLY。
CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;
例 4:创建范围分布表 T_RANGE,分布列为 C1。
CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10))
DISTRIBUTED BY RANGE (C1) (VALUES EQU OR LESS THAN (100) ON EP01, VALUES LESS
THAN(MAXVALUE) ON EP02);
例 5:创建 LIST 分布表 T_LIST,分布列为 C1。
CREATE TABLE T_LIST(C1 INT, C2 CHAR(10))
DISTRIBUTED BY LIST (C1) (VALUES(3) ON EP01,VALUES(4) ON EP02);
例 6:创建哈希分布表的范围水平分区表。
CREATE TABLE T_HASH_RANGE_PARTITION
(C1 INT, C2 CHAR(10), C3 CHAR(10))
PARTITION BY RANGE(C1)
(
PARTITION PART_1 VALUES LESS THAN(0) ,
PARTITION PART_2 VALUES LESS THAN(10) ,
PARTITION PART_3 VALUES LESS THAN(100) ,
PARTITION PART_4 VALUES LESS THAN(MAXVALUE)
)
DISTRIBUTED BY HASH (C1);
在创建分布表时,用户应注意以下一些使用限制:
  单机模式下建的分布表和普通表一样,但是不能创建指定实例名的分布表(如范围
分布表和 LIST 分布表);
  在 MPP 模式下创建分布表,如果未指定列则默认为 RANDOMLY(随机)分布表;
分布列类型不支持 BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、
VARBINARY、LONGVARBINARY、BFILE、时间间隔类型、虚拟列和用户自定义类
型;
  HASH 分布、RANGE 分布、LIST 分布允许更新分布列,并支持包含大字段列的表
的分布列更新,但包含 INSTEAD OF 触发器的表、堆表不允许更新分布列;
  对于 FULLY(复制)分布表,只支持单表查询的更新和删除操作,并且查询项或者
条件表达式中都不能包含 ROWID 伪列表达式;
  RANGE(范围)分布表和 LIST(列表)分布表,分布列与分布列值列表必须一致,
并且指定的实例名不能重复;
  引用约束的引用列和被引用列都必需包含分布列,且分布情况完全相同;
  随机分布表不支持 UNIQUE 索引。

4.2、在dmmpp1主机上创建表

[dmdba@dmmpp1 dm]$ disql sysdba/dmdba1234

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 4.043(ms)
disql V8
SQL>  create tablespace jisen datafile '/dm/dmdbms/data/EP01/JISEN01.DBF' size 64;
executed successfully
used time: 91.153(ms). Execute id is 106.

SQL> create user jisen identified by jisen1234 default tablespace JISEN;
executed successfully
used time: 18.665(ms). Execute id is 107.

SQL> grant resource to JISEN;
executed successfully
used time: 10.955(ms). Execute id is 108.

SQL> conn jisen/jisen1234

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 3.775(ms)

SQL> create table t_hash(id int,sdate char(20)) distributed by hash (id); 
executed successfully
used time: 15.394(ms). Execute id is 109.

SQL>  create table t_random(c1 int, c2 char(10)) distributed randomly;
executed successfully
used time: 9.347(ms). Execute id is 110.

SQL> create table t_fully(c1 int, c2 char(10)) distributed fully; 
executed successfully
used time: 14.855(ms). Execute id is 111.

SQL> create table t_range (c1 int, c2 char(10)) distributed by range(c1) (values equ or less than (100) on EP01, values less than(maxvalue) on EP02);

executed successfully
used time: 15.254(ms). Execute id is 112.

SQL> SQL> create table t_list(c1 int, c2 char(10)) distributed by list (c1) (values(3) on EP01,values(4) on EP02);
executed successfully
used time: 12.801(ms). Execute id is 113.

SQL> create table t_hash_range_partition
2    (c1 int, c2 char(10), c3 char(10))
3    partition by range(c1)
4    (
5    partition part_1 values less than(0) ,
6    partition part_2 values less than(10) ,
7    partition part_3 values less than(100) ,
8     partition part_4 values less than(maxvalue) 
9    )
10   distributed by hash (c1);
executed successfully
used time: 18.577(ms). Execute id is 114.
SQL> 

4.3、在dmmpp2上查看创建的内容

 

 

[dmdba@dmmpp2 ~]$ disql sysdba/dmdba1234:5237

Server[LOCALHOST:5237]:mode is normal, state is open
login used time: 4.165(ms)
disql V8
SQL> select username from dba_users;

LINEID     USERNAME  
---------- ----------
1          SYSSSO
2          JISEN
3          SYSDBA
4          SYS
5          SYSAUDITOR

used time: 10.847(ms). Execute id is 662509.
SQL> 

[dmdba@dmmpp2 ~]$ disql sysdba/dmdba1234:5237

Server[LOCALHOST:5237]:mode is normal, state is open
login used time: 4.165(ms)
disql V8
SQL> select username from dba_users;

LINEID     USERNAME  
---------- ----------
1          SYSSSO
2          JISEN
3          SYSDBA
4          SYS
5          SYSAUDITOR

used time: 10.847(ms). Execute id is 662509.
SQL> conn jisen/jisen1234:5237

Server[LOCALHOST:5237]:mode is normal, state is open
login used time: 4.014(ms)
SQL> desc user_tables;

LINEID     NAME            TYPE$        NULLABLE
---------- --------------- ------------ --------
1          TABLE_NAME      VARCHAR(128) N
2          TABLESPACE_NAME VARCHAR(128) Y
3          CLUSTER_NAME    VARCHAR(1)   Y
4          IOT_NAME        VARCHAR(128) N
5          STATUS          VARCHAR(8)   Y
6          PCT_FREE        NUMBER       Y
7          PCT_USED        NUMBER       Y
8          INI_TRANS       NUMBER       Y
9          MAX_TRANS       NUMBER       Y
10         INITIAL_EXTENT  NUMBER       Y
11         NEXT_EXTENT     NUMBER       Y

LINEID     NAME            TYPE$      NULLABLE
---------- --------------- ---------- --------
12         MIN_EXTENTS     NUMBER     Y
13         MAX_EXTENTS     NUMBER     Y
14         PCT_INCREASE    NUMBER     Y
15         FREELISTS       NUMBER     Y
16         FREELIST_GROUPS NUMBER     Y
17         LOGGING         VARCHAR(1) Y
18         BACKED_UP       VARCHAR(1) Y
19         NUM_ROWS        NUMBER     Y
20         BLOCKS          NUMBER     Y
21         EMPTY_BLOCKS    NUMBER     Y
22         AVG_SPACE       NUMBER     Y

LINEID     NAME                      TYPE$      NULLABLE
---------- ------------------------- ---------- --------
23         CHAIN_CNT                 NUMBER     Y
24         AVG_ROW_LEN               NUMBER     Y
25         AVG_SPACE_FREELIST_BLOCKS NUMBER     Y
26         NUM_FREELIST_BLOCKS       NUMBER     Y
27         DEGREE                    VARCHAR(1) Y
28         INSTANCES                 VARCHAR(1) Y
29         CACHE                     VARCHAR(1) Y
30         TABLE_LOCK                VARCHAR(7) Y
31         SAMPLE_SIZE               NUMBER     Y
32         LAST_ANALYZED             DATE       Y
33         PARTITIONED               VARCHAR(3) Y

LINEID     NAME             TYPE$       NULLABLE
---------- ---------------- ----------- --------
34         IOT_TYPE         VARCHAR(4)  Y
35         TEMPORARY        VARCHAR(1)  Y
36         SECONDARY        VARCHAR(1)  Y
37         NESTED           VARCHAR(1)  Y
38         BUFFER_POOL      VARCHAR(1)  Y
39         FLASH_CACHE      VARCHAR(7)  Y
40         CELL_FLASH_CACHE VARCHAR(7)  Y
41         ROW_MOVEMENT     VARCHAR(7)  Y
42         GLOBAL_STATS     VARCHAR(3)  Y
43         USER_STATS       VARCHAR(2)  Y
44         DURATION         VARCHAR(15) Y

LINEID     NAME            TYPE$      NULLABLE
---------- --------------- ---------- --------
45         SKIP_CORRUPT    VARCHAR(1) Y
46         MONITORING      VARCHAR(1) Y
47         CLUSTER_OWNER   VARCHAR(1) Y
48         DEPENDENCIES    VARCHAR(1) Y
49         COMPRESSION     VARCHAR(8) Y
50         COMPRESS_FOR    VARCHAR(1) Y
51         DROPPED         VARCHAR(1) Y
52         READ_ONLY       VARCHAR(1) Y
53         SEGMENT_CREATED VARCHAR(3) Y
54         RESULT_CACHE    VARCHAR(7) Y

54 rows got

used time: 308.531(ms). Execute id is 891935.
SQL> select TABLE_NAME from user_tables;

LINEID     TABLE_NAME            
---------- ----------------------
1          T_HASH
2          T_RANDOM
3          T_FULLY
4          T_RANGE
5          T_LIST
6          T_HASH_RANGE_PARTITION

6 rows got

used time: 55.583(ms). Execute id is 892289.
SQL> 

SQL> begin
2   for i in 1 .. 10000
3   loop
4   insert into  t_hash values (i,  'test');
5   commit;
6   end loop;
7   end;
8   /
DMSQL executed successfully
used time: 00:00:20.673. Execute id is 902329.
SQL> 

如果其中一台主机宕机,则会引发Mpp不可用。 

[dmdba@dmmpp1 ~]$ disql sysdba/dmdba1234
[-6024]:Remote node global login failed.
disql V8

 

 

你可能感兴趣的:(DM)