MongoDB与Hadoop MapReduce的海量非结构化数据处理方案
2021-04-20宋辰萱孔祥文
宋辰萱 孔祥文
(中国市政工程华北设计研究总院有限公司 天津市 300074)
1 MongoDB与MapReduce数据传输机制
MongoDB 与MapReduce 的整合主要由MongoDB Cluster、MongoDB-Connector for Hadoop 以及MapReduce Cluster 组成,MongoDB-Connector for Hadoop 充当数据读写存储的重要组成部分,MongoDB Cluster 承担对非结构化数据分片存储的工作,MapReduce Cluster 负责并行计算的任务。[1]该连接器同时支持Pig以及Hive,从而可通过简单的脚本执行相对复杂的MapReduce 工作流。
2 基于MongoDB分片技术的性能改进
MapReduce 使用javascript 语法编写,其内部基于javascript V8引擎解析并执行,javascript 语言的灵活性使mapreduce 可以处理更加复杂的业务场景。
MapReduce 主要分为以下几个阶段,如图1所示。
Map:识别各种操作并将其分散至数据集群的各文档中。
Shuffle:根据Key 值将数据集分组,同时为每一Key 值生成与其对应的值表。
Reduce:数据表中的数据元素经过反复处理解析,将数据表回写至Shuffle,最终每个Key 有且只有一个数据表与其对应,同时该数据表只存在一个元素。
Finalize:获得数据最终计算结果并对该结果进行加工整合。
图2清楚地说明 Map-Reduce 的执行过程。
针对现有的分片技术提出性能改进方案,如图3所示。
2.1 设置合适的分片方式以及chunk size
由于数据执行或更改时,频繁拆分及迁移数据信息,输入输出资源会在splitting 和balancing 的过程中被大量消耗,因此数据迁移时,数据块的大小设置对资源的开销有一定的决定作用。数据块大小默认是64M,但实际运用时为避免输入输出资源的大量消耗则灵活选择分片方式,结合各自的业务特征,通常选择基于范围的分片方式或者基于Hash 索引的分片方式。
2.2 合理部署MongoDB分片集群Sharded Cluster
分散存储Sharded Cluster 中的数据,实现系统性能最大化,当用户发起数据读写请求时,mongos 在Config Server 即时访问数据接口,获取该数据集群中数据节点的路由信息,并将获取的读写请求转发至相关的数据分片中。……
