本篇文章1752字,读完约4分钟
内容摘要
Mapreduce是一个离线计算框架,是典型的大数据分析技术之一。它以大数据块为运算单元,先用映射的方式进行数据划分(微分),然后对集合中的数据进行约简(积分)。
大规模数据分析演算
“主机+磁盘阵列”的系统结构实现了计算能力和存储能力的分离,适用于数据访问次数多、单个数据量小的事务型应用。
然而,在大数据时代,海量数据(pb+)被处理。“主机+磁盘阵列”的系统架构会消耗大量主机集群和磁盘阵列之间的网络带宽,大大降低了系统的处理效率,不能满足大数据时代的要求。
为了解决大规模数据的处理效率问题,需要开放不同的思维模式。
例如,您能否将数据存储在主机内部,并减少数据访问的外部io(输入和输出),而不是主机外部的磁盘阵列?
举另一个例子,我们可以使用大数据块作为访问单元来减少数据访问的数量,而不是使用小数据字节作为单个数据访问单元吗?
围绕上述问题和思路,谷歌公司提出了gfs、mapreduce、bigtable等大规模分布式数据处理方案,以解决互联网上大规模数据的存储和快速检索问题。
Gfs以大数据块为单位存储数据,而mapreduce相当于一个基于gfs的数据分析引擎,它根据分析需求处理大数据块,其处理思想类似于高等数学中的微积分。
mapreduce的数据处理过程如图8-3-4所示:
8-3-4简化数据处理过程
从图8-3-4可以看出,输入文件1到输入文件3是文件形式的原始数据,原始数据经过映射、排序和归约三个子过程,最终输出满足统计要求的结果文件。
为了更直观地看到mapreduce的数据处理过程,以电信运营商的海量互联网记录统计为例,从时间和地理维度统计一定时期内的互联网数据流。
移动用户在互联网上记录的原始数据如下:
以上五条在线记录作为原始数据源,我们的目标是按日期统计在线流量。
为简单起见,在互联网记录的样本数据中,仅保留本案例所需的互联网流量(最左边的8位数列)、互联网日期(中间的列)和代码(最右边的列)。
如果第1条和第2条中的在线记录作为输入文件1的内容,则第3条和第4条中的在线记录作为输入文件2的内容,第5条中的在线记录作为输入文件3的内容,如下所示:
首先,映射三个输入文件,从输入文件的指定位置提取键值对到不同的映射集作为排序输入。
本例中的日期是“关键”,本例中的值是互联网流量,如下所示:
提取的键值对包括五个,如下所示:
这些键值对通过排序操作放入相应的组中,分组结果如下:
排序操作的结果再次成为reduce的输入,其中reduce1的输入是sort1,reduce2的输入是sort2。事实上,reduce是一个求和运算。根据预编译的reduce程序,需要对多个值求和。结果如下:
以上是mapreduce的输出结果,可以描述为:
2013年12月23日,总流量为92,583,701字节(约92.58兆字节),2013年12月24日,总流量为79,233,468字节(约79.23兆字节)。
以上是通过映射、排序和归约操作从多个文件对mapreduce进行统计分析的一般过程。
以上只是分析原理的一个简单例子。在mapreduce的实际运行环境中,会有大量的输入文件。由于大量的输入文件分布在不同的主机设备上,分割后的大文件不需要在主机外的磁盘阵列上访问,解决了大文件传输造成的网络带宽占用大的问题。
在大规模分布式计算环境中,映射、排序和约简操作通常在不同的主机上完成,通过并行执行多个任务,它们之间不存在相关性依赖,从而大大提高了大规模数据分析的整体效率。
Mapreduce是一种典型的大数据分析技术,总体实现思路并不复杂,但在hadoop开源框架下的mapreduce中仍然存在很多问题。为了克服这些缺点,许多软件在此基础上进行了改进和完善,如:
#卡珊德拉;,这是一个由#facebook开发并开放的分布式nosql数据库软件。
#开源分布式文件系统ceph(支持对象存储);
#cleversafe的分散存储网络将元数据分散到集群中;
#ibm的gpfs(general parallel files system););
#emc公司的isilon、mapr文件系统、netapp公司的hadoop开放方案等。
标题:大数据运营技术与工具:大规模数据分析的微积分
地址:http://www.hcsbodzyz.com/hcxw/284.html