欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

谈谈MapReduce

程序员文章站 2022-06-04 14:49:43
...

我的废话1: 这篇文章不讲述有关mapreduce的具体技术和代码示例,只是谈谈我对mapreduce初试+摸索阶段的感受,所以欢迎各路英雄的板砖向我抛来。 我的废话2: MapReduce 让运算散列 且 并行着。 MapReduce被业界认定是Google推出,如今也不是什么新的技术,

我的废话1:
这篇文章不讲述有关mapreduce的具体技术和代码示例,只是谈谈我对mapreduce初试+摸索阶段的感受,所以欢迎各路英雄的板砖向我抛来。

我的废话2:
MapReduce 让运算散列 且 并行着。

MapReduce被业界认定是Google推出,如今也不是什么新的技术,自从Apache的Hadoop项目启动以来MapReduce就是整个Hadoop项目的核心内容,Pig、Hive和Hbase都是针对mapreduce框架的实现工具,所以对Hbase、Hive、Pig的深入了解必须对MapReduce有一定研究,以我自己的理解MapReduce就是把要计算的大型数据集切分成多个小的分区,根据这些被划分的小分区创建多个对应的任务去计算这些被切分的数据,在集群的节点上结合分区表分布式的执行计算,中间有调度器和计数器的环节,最后再把多个任务的计算结果进行合并,输出计算的结果。在这些执行每个分块的分布式集群节点中,可以使用非常廉价的机器,这样就可以使用低端的设备组成一个超大的型的运算。

MapReduce的原理是比较简单的,并且目前流行大部分语言都能实现。如今Yahoo利用MapReduce定期在搜索业务上使用Hadoop来提高其产品和服务,如排名功能和目标广告。Google利用MapReduce来进行分布排序,web连接图反转,每台机器的词矢量,web访问日志分析,也有一些开源项目利用MapReduce来实现产品的功能,例如:最著名的MongoDB和Apache的Nutch,还有一些项目提出使用MapReduce来执行对数据库的分布式计算,例如:Gearman(Ref),运行在微软云计算平台上的lokad-cloud(Ref) 。 MySpace也自己研制的MapReduce框架Qizmt开源了(Ref),可用于在大规模Windows集群上开发或运行分布式计算程序。

对于在Hadoop中涵盖的技术(Hive/HBase/Pig)对于传统的数据库来说,具有天然的可扩展性和支持海量数据存储的能力,并且对非结构化的数据处理能力完全超越于传统的数据库技术。例如,当MySQL运行的集群节点达到100台以上,虽然说理论上MySQL单张表的最大数据容量可以达到2T,但是如果真正需要依靠MySQL来存储的数据上T再加上大并发的用户访问,无论是维护还是操作都是非常头痛的事情,让MySQL或者传统数据库肩负超大型的数据运算/查询,化九牛二虎之力跑起来稳定一段时间过后,我想也会把MySQL累个半死,这是也并不是说让Hadoop/MapReduce/Hive 这些技术去替代传统的技术,而是希望Hadoop/MapReduce/Hive去用于做数据转换或者装载的(ETL)方面的工作,MapReduce适合海量数据数据被一次写入和多次读取的应用,在这些场合,MapReduce可以成为传统数据库的良好补充,而不是替代品。

某些特定的场景中要存储上亿个文件本身就是一个头疼的问题,还要找出上亿个文件中存储的文档、图片、网页 哪个最大,并且还要分别列出3类,那更是雪上加霜,但利用Hadoop提供的MapReduce框架,基于HDFS分布式海量数据存储的手段,相对传统的方法而言会轻松一点,因为利用Hadoop的技术可以让廉价的机器组成在一起带来更高的计算性能,并且支持海量存储,换而言之,如果你的数据还没有上千万 上了Hadoop基本上是用“关公的大刀切青菜”,资源浪费。

Hadoop并非是完全用于非结构化和半结构化的数据处理,在Apache Hadoop的MapReduce中为了方便MapReduce直接访问关系型数据库(Mysql,Oracle),MapReduce输入的键和值并不是数据固有的属性,可以人为的来选择数据来源。Hadoop提供了DBInputFormat和DBOutputFormat两个类。这样就可以将现有数据库中的数据转储到Hadoop/HDFS中,由MapReduce进行分布式计算,通过MapReduce框架对海量数据进行分析,或者也可以倒过来从海量的非结构/半结构/结构化的数据分析,将计算的结果存储到数据库。关键字:DBOutputFormatDBInputFormatDBConfiguration,根据这几个关键字可以Google到更多结果,暂时先不提供代码了,稍后会提供完整的代码示例和个人见解,需要了解的同学可以先看看这里(Ref)。

让我更值得关注的是如何将mapreduce使用在适合的场景,将hadoop mapreduce的框架用途发挥到极致,或者说当面对大型计算该如何借用mapreduce框架、原理将计算进项散列在不同的计算机上去执行同一份作业,去更高的发挥机器的资源,更快的得到计算的运行结果,我想这才是使用mapreduce真正的目标吧。

–end–