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

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
<DELETE | PRESERVE> ROWS] [<PARTITION 子句>][<空間限制子句>] [<STORAGE 子句>][<
壓縮子句>] [<ROW MOVEMENT 子句>][<DISTRIBUTE 子句>]
<表結構定義 2>::= [ON COMMIT <DELETE | PRESERVE> ROWS] [<空間限制子句>] [<STORAGE
子句>] [<壓縮子句>]AS <不帶 INTO 的 SELECT 語句>[<DISTRIBUTE 子句>];
<DISTRIBUTE 子句>::=DISTRIBUTED[<RANDOMLY>|<FULLY>]
|DISTRIBUTED BY [<HASH>](<列名> {,<列名>})
|DISTRIBUTED BY RANGE (<列名> {,<列名>})(<範圍分佈項> {,<範圍分佈項>})
|DISTRIBUTED BY LIST (<<列名> {,<列名>}>)(<LIST 分佈項> {,<LIST 分佈項>})
<範圍分佈項>::= VALUES LESS THAN (<表達式>{,<表達式>}) ON <實例名>
|VALUES EQU OR LESS THAN (<表達式>{,<表達式>}) ON <實例名>
<LIST 分佈項>::= 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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章