您的位置:首页 > 其它

第二章 第二节 使用UNIX工具分析数据

2016-03-21 10:12 162 查看
天气数据下载

数据集中在记录的每一年地球上最高的温度是多少?我们先不使用HADOOP来

回答这个问题,因为这个信息可以提供效率的底线,也是校验我们的结果的一个

有用方法。

处理面向行的数据的经典工具是awk。Example2-2是一个计算每年最高温度的

小脚本。



这个脚本循环读取每一年的压缩文件,先打印出年,然后使用awk处理每一个文件。

awk脚本从数据中提取出两个属性:气温和质量码。气温被加了一个0来转成整形。然后,

测试这个温度是不是合法的(NDDC数据集合中,9999代表缺失值),质量码表示这个

读数不是可疑的或是错误的。如果读数正确,这个值与目前的最大值比较,如果它比

最大值还大,这个最大值会被更新。文件的所有行都被处理完毕后,END块会被执行,

它打印出最大值。

这里是刚开始运行:

% ./max_temperature.sh
1901 317
1902 244
1903 289
1904 256
1905 283
...
源文件里的温度值被扩大了10倍,所以它计算出1901年的最高温度是31.7°C(20世纪初

只有很少的计数,所以这个是可信的)。计算20世纪的数据用时42分钟,运行在单独的

EC2 High-CPU Extra Large 机器上。

为了提高处理速度,我们需要并行运行程序的各部分。理论上来说,这个是很直接的:我

们可以用不同的进程处理不同的的数据,使用机器上所有可以使用的硬件线程。但是这还是

有一些问题。

首先,把这个工资分成同样尺寸的块不是很容易或是很明显的。在这个例子中,不同年分的

文件大小差距很大,所以一些进程会比别的进程先完成。即使它开始进一步的工作,整个运行

时间还是由最大的文件决定。一个更好的方法是(尽管它需要做更多的工作),把输入分成

固定大小的块, 把每一块分配给一个进程。

其次,从相互独立的进程中合并结果需要进一步的处理。在这个例子中,每一年的结果与别的

年分是独立的,它们可以通过连接所有的结果并根据年分排序来合并。如果使用固定大小数据块

的方式,合并更复杂。在这个例子中,特殊的年分的数据会被分成几个数据块,每一个处理进程

都是独立的。我们每一块的处理结束后产生一个最高温度,所以最后一个步骤是找到每一年的最

高温度。

第三,你还是受一台机器的处理能力的限制。如果使用你的特定数量的处理器可以取得的最好

成绩是20分钟,那它就那样了。你不能让它更快。相对于独立的机器的处理能力,一引起数据集

还在增长。当我们开始使用更多的机器的时候,一大堆别的问题又来了,协调问题,可靠性问题等,

谁来执行总体工作?我们怎么处理失败的进程?

所以,尽管并行处理是可行的,实际它是麻烦的。使用一个像HADOOP的框架来处理这些问题

是很有帮助的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: