Google在2001年推出图片搜索功能时,拥有2.5亿张索引图片。 不到十年后,这家搜索巨头就索引了超过100亿张图片。 每分钟有35个小时的内容上传到YouTube。 据说Twitter平均每天处理5500万条推文。 今年早些时候,其搜索功能每天记录6亿个查询。 这就是我们谈论大数据时的意思。
如此大规模的数据曾经仅限于大型公司,大学和政府,这些实体能够购买非常昂贵的超级计算机,并需要员工来维持运行。 如今,随着存储成本的降低和处理能力的商品化,较小的公司和一些个人已经开始存储和挖掘相同的数据,从而引发了应用创新浪潮。
大数据革命的使能技术之一是MapReduce,这是Google开发的用于处理大规模分布式数据集的编程模型和实现。 在本文中,我介绍了Apache的开源MapReduce实现Hadoop,有人将其称为云计算的杀手级应用。
关于Hadoop
Apache的Hadoop框架本质上是一种用于分析大型数据集的机制,不一定需要将其存储在数据存储区中。 Hadoop抽象了MapReduce的海量数据分析引擎,使开发人员更易于使用。 Hadoop可以扩展到无数节点,并且可以处理与数据排序相关的所有活动和协调。
Hadoop的众多功能和配置使其成为了一个非常有用且功能强大的框架。 雅虎! 无数其他组织发现它是一种有效的机制,可以分析大量的位和字节。 Hadoop也很容易在单个节点上工作。 您只需要一些数据即可分析和熟悉Java代码(包括泛型)。 Hadoop还可以与Ruby,Python和C ++一起使用。
作为用于处理海量数据集的概念性框架,MapReduce经过了高度优化,可使用大量计算机来解决分布式问题。 顾名思义,该框架包含两个功能。 map
功能旨在接收大数据输入并将其分成较小的部分,然后将其移交给可以对其执行某些操作的其他进程。 reduce
功能可提取由map
收集的各个答案,并将其呈现为最终输出。
在Hadoop中,您可以通过扩展Hadoop自己的基类来定义map
并reduce
实现。 这些实现由指定它们的配置以及输入和输出格式捆绑在一起。 Hadoop非常适合处理包含结构化数据的大文件。 Hadoop的一个特别方便的方面是它可以处理输入文件的原始解析,因此您一次只能处理一行。 因此,定义map
功能实际上仅是确定要从输入的文本行中获取的内容的问题。
数据,数据无处不在!
美国政府产生了大量数据,其中许多数据对于普通公民来说是非常有趣的。 各种政府机构免费分发与美国经济健康状况和不断变化的社会人口状况有关的数据。 美国地质调查局(USGS)发布国际地震数据。
世界各地每天都发生多次小地震。 它们中的大多数都发生在地壳深处,因此没有人能感觉到它们,但听众仍在记录它们。 USGS以每周CSV(或逗号分隔值)文件的形式发布其地震数据。
平均每周文件不是很大-大约只有100KB左右。 尽管如此,它将作为学习Hadoop的基础。 记住这一点,虽然,Hadoop是能够处理更大的数据集。
追踪地震
我最近从USGS网站下载的CSV文件包含大约920行,如清单1所示:
清单1. USGS地震数据文件的行数
$> wc -l eqs7day-M1.txt
920 eqs7day-M1.txt
CVS文件的内容类似于清单2中的内容(即前两行):
清单2. CVS文件的前两行
$> head -n 2 eqs7day-M1.txt
Src,Eqid,Version,Datetime,Lat,Lon,Magnitude,Depth,NST,Region
ci,14896484,2,"Sunday, December 12, 2010 23:23:20 UTC",33.3040,-116.4130,1.0,11.70,22,
"Southern California"
这就是我所说的信息丰富的文件,尤其是当您考虑到它总共920行时。 但是,我只想知道此文件报告的一周中的每一天发生了多少次地震。 然后,我想知道在那七天内哪个地区地震最多。
我的第一个想法是,我可以使用简单的grep
命令来搜索每天的地震次数。 查看该文件,我看到它的数据从12月12日开始。所以我对该字符串进行了grep -c
,