

dm.ini dmmal.ini
dmmpp.ini
INSTANCE_NAME = EP01PORT_NUM = 5236MAL_INI = 1MPP_INI = 1(启用MPP)
配置dmmal.ini
[MAL_EP01]MAL_INST_NAME = EP01MAL_HOST = 192.168.18.1MAL_PORT = 5347MAL_INST_HOST = 10.129.18.1MAL_INST_PORT = 5236[MAL_EP02]MAL_INST_NAME = EP02MAL_HOST = 192.168.18.2MAL_PORT = 5347MAL_INST_HOST = 10.129.18.2MAL_INST_PORT = 5236
配置dmmpp.ini
[SVC_EP01]MPP_SEQ_NO = 0 (MPP的节点编号)MPP_INST_NAME = EP01[SVC_EP02]MPP_SEQ_NO = 1MPP_INST_NAME = EP02
配置dmmpp.ctl
dmmpp.ctl是一个二进制文件,不能直接编辑,要通过dmctlcvt工具将dmmpp.ini转成dmmpp.ctl。
跟O记的spfile是有点类似,文本编辑需借助pfile。
/> dmctlcvt TYPE=2 SRC=/dm8/data/EP01/dmmpp.ini DEST=/dm8/data/EP01/dmmpp.ctl// TYPE=2 文本转二进制,TYPE=1 逆向转换
将生成的dmmpp.ctl同步到其他EP节点,保证所有节点的配置完全相同。
注意:dmmpp.ctl需要与dm.ini在同一目录。
配置完成后,就可以启动验证MPP了,因为DM MPP是对等架构,所以实例启动和停止顺序不分先后。
不过,DM MPP的登录还有全局登录与本地登录的区别。
DM8> disql sysdba/PASSWORD@DMMPP//本地登录DM8> disql sysdba/PASSWORD@IP:PORT#{mpp_type=local}
此外,对于EP节点扩容,也可以通过手动或自动的方式进行,步骤跟部署差不多,除了配置新增节点外,还要初始化实例,并创建表结构。

随机分布(RANDOMLY)
节点个数变动后,如果没有节点数据均衡的要求,可以不用对节点现有的数据进行变动。
一般来说,随机分布对于复杂查询及存在较多的节点间数据分发情况,性能不如哈希分布高。
复制分布(FULLY)
每个节点都包含全量数据,潭主喜欢称之为Replicated Table。
早年间的DB2 DPF没有该功能,但现在复制分布策略已经是分布式系统的标配,目的就是减少数据在不同节点间的移动,主要适用于小表,或数仓的维表。
其他分布(HASH/RANGE/LIST)
通过范围分布和LIST分布,可以决定将数据存储到MPP的哪个相应的EP节点上。
DM MPP同样也支持表分区和数据分布,分布的类型和分区的类型可以混合搭配,比如建立哈希分布表的范围水平分区表。
这其中,比较重要的是分布键的选择,既要考虑数据的均匀分布,又要考虑业务数据的查询方式。
潭主当年的DB2 DPF用的HASH分布,就遇到了数据分布不均的情况。
具体的数据分布类型和设置在建表时指定,语法参见《DM8_SQL语言使用手册》。

DM MPP的高可用
MPP架构是一个整体,单个EP节点发生故障时,会导致整个MPP系统处于服务不可用状态。
当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。
为保证MPP系统的高可用性,厂商建议为MPP的每个EP搭建DM Watcher。
Watcher备库用于数据容灾和备份,只是某个MPP节点(主库)的镜像,并不是MPP集群的一部分。
此外,如图所示,为提升性价比,DM MPP主备系统可采用交叉守护的方式,每个EP和其对应的备库实例不在同一台主机上,将EP与别的EP的备库放在一台主机上。
部署与监控
MPP相关过程与视图

快速数据装载
dmfldr提供两种MPP数据加载模式:(MPP_CLIENT参数)
客户端分发模式:数据在dmfldr客户端进行分发,然后直接向指定EP发送数据 本地分发模式:每个EP对应一个dmfldr和一份数据,每个dmfldr只选择出对应本节点的数据并发送,不管其他节点的数据
默认使用客户端分发模式,用法参见《DM8_dmfldr 使用手册》。
dmfldr跟GP的gpfdist命令类似,是MPP架构的标配工具。
注意:DM MPP支持绝大多数单机版DM功能,但在某些功能点的使用上存在一些限制。
- END -
感谢阅读。如果觉得写得还不错,就请点个赞或“在看”吧。
公众号所有文章仅代表个人观点,与供职单位无关。





