1 DM MPP 环境搭建
1.1 系统规划
配置一个两节点 MPP。如果有条件两个节点都配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机。两节点实例名分别为 EP01 和 EP02,相关的 IP、端口等规划见下表。
实例名 | MAL_INST_HOST | MAL_INST_PORT | MAL_HOST | MAL 端口 | MPP_SEQNO |
EP01 | 192.168.117.129 | 5240 | 192.168.117.129 | 5270 | 0 |
EP02 | 192.168.117.128 | 5241 | 192.168.117.128 | 5271 | 1 |
注意:DM MPP 各 EP 使用的 DM 服务器版本应一致,同时还应注意各 EP 所在主机的操作系统位数、大小端模式、时区及时间设置都应一致,否则可能造成意想不到的错误。 |
1.2 配置 dm.ini
首先,在 EP01 和 EP02 上分别创建数据库,各 EP 的数据库初始化参数都保持一致,以免产生错误。
分别对两个实例的 dm.ini 进行配置。
修改 EP01 的 dm.ini 的以下几个参数如下:
INSTANCE_NAME = EP01 PORT_NUM = 5240 MAL_INI = 1 MPP_INI = 1 |
修改 EP02 的 dm.ini 的以下几个参数如下:
INSTANCE_NAME = EP02 PORT_NUM = 5241 MAL_INI = 1 MPP_INI = 1 |
1.3 配置 dmmal.ini
为两个 EP 配置 dmmal.ini 如下,配置完全一样,EP 间可互相拷贝。dmmal.ini 与dm.ini 放在相同的目录下。
[MAL_INST1] MAL_INST_NAME = EP01 MAL_HOST = 192.168.117.129 MAL_PORT = 5270 MAL_INST_HOST = 192.168.117.129 MAL_INST_PORT = 5240 [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 192.168.117.128 MAL_PORT = 5271 MAL_INST_HOST = 192.168.117.128 MAL_INST_PORT = 5241 |
1.4 配置 dmmpp.ctl
dmmpp.ctl 是一个二进制文件,用户不能直接配置,需要先配置 dmmpp.ini。
配置 dmmpp.ini 如下:
[SERVICE_NAME1] MPP_SEQ_NO = 0 MPP_INST_NAME = EP01 [SERVICE_NAME2] MPP_SEQ_NO = 1 MPP_INST_NAME = EP02 |
使用 DM 提供的工具 dmctlcvt 将 dmmpp.ini 转换成 dmmpp.ctl,dmctlcvt 工具在 DM 安装目录的“bin”子目录中。
转换生成的 dmmpp.ctl 需要放在与 dm.ini 同一个目录。
下面的命令将 dmmpp.ini 转换为 dmmpp.ctl。
dmctlcvt TYPE=2 SRC=\dmdbms\data\dameng\dmmpp.ini DEST=\dmdbms\data\dameng\dmmpp.ctl |
1.5 运行 MPP
经过前面四个步骤,DM MPP环境已经配置完成了。分别启动 EP01 和 EP02 的 DM 数据库实例(顺序不分先后),DM MPP 系统即能正常运行,用户就可以登录任一 EP 进行数据库操作了。
2 建立分布表
DM MPP 系统中的数据分布在各 EP 中,支持表数据的哈希分布、随机分布、复制分布、范围分布、LIST 分布类型,用户可根据应用的实际情况为表数据选择合适的分布类型。
2.1哈希分布
哈希分布按照表定义中指定的一列或多列对行数据计算一个哈希值,再根据哈希值和哈希映射表,将该行数据分布到映射的节点上。
当表的连接查询中使用的连接键为哈希分布列时,MPP 下的查询计划会进行优化,比如可能减少计划中通讯操作符个数、使用索引、对分组计划优化等,减少数据在节点间的分发,提高查询效率。
使用哈希分布时,节点间的数据是否均衡,取决于设置的哈希分布列以及表中的数据情况。当节点个数变动时,各个节点的数据需要按照新的哈希映射表重新进行分发。
例子:创建哈希分布表 T_HASH,分布列为 C1。
CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1); |
2.2随机分布
随机分布表不存在分布列,插入表数据时会按照一定的随机算法,将数据随机均衡分布到各个节点。
随机分布的优点是数据和节点间不存在映射关系。节点个数变动后,如果没有节点数据均衡的要求,可以不用对节点现有的数据进行变动。
一般来说,随机分布对于复杂查询及存在较多的节点间数据分发情况,性能不如哈希分布高。
例子:创建随机分布表 T_RANDOM。
CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY; |
2.3复制分布
复制分布表在每个节点上的本地数据都是一份完整的拷贝,查询该表数据时在任意节点
上都能单独完成,不需要从其他节点获取数据。
复制分布一般用于数据量不是很大的表。
例子:创建复制分布表T_FULLY.
CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY; |
2.4范围分布
范围分布按照表定义中指定的一个或多个列的列值范围分布项,决定将一行数据存储到MPP 的哪个相应 EP 上。
例子:创建范围分布表 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); |
2.5 LIST 分布
LIST 分布通过指定表中的一个或多个列的离散值集,来确定将一行数据存储到 MPP 的哪个相应 EP 上。此分布用于表中列值可列举的情况。
例子:创建 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); |
MPP 的数据分布类型和具体设置在建表时指定,建表的其他语法分支可参见《DM8_SQL 语言使用手册》。
下面在一个 EP节点上创建表T_HASH并指定哈希分布类型,添加3条数据。
使用系统视图CALL SP_GET_EP_COUNT('SYSDBA','TABLE')查看表 T_HASH 在每个实例上的数据行数
可以看到,T_HASH表在实例EP01 中有1条数据;在实例EP02 中有2条数据。