MapReduce:一种可用于数据处理的编程模型。Hadoop可以运行各种语言版本的MapReduce程序。接下来可能看到Java、Ruby、Python和C++语言版本的同一个程序。MapReduce程序本质上是并行运行的,因此可以将大规模的数据分析任务分发给任何一个拥有足够多机器的数据中心。MapReduce 的优势在于处理大规模的数据集。
书中以气象数据集为例,此不作改变
取例气象数据中:每一行是一条记录。
每年的数据再拼接成一个单独的文件。
使用Unix工具分析数据:下面小程序提取某一个值并进行比较取最大值
awk:非常强大的文本操纵工具,sed,awk,grep 这个三个命令 都是操作文本文件的
unix系统有几个非常命令的特点:
1. 对于内核而言,unix文件都是字节序列。io设备也是文件。
2. 至于文件的含义交由应用程序来解释。其中文本文件非常重要,因为unix提供 很多了实用程序(utility),这些程序功能相对独立,但可以通过管道来实现进程间通信(IPC),这样松散的耦合可以完成复杂的操作。那么进程间的通信的数据格式是怎样的呢? 其实对于实用程序而言,这个数据格式就是简单的文本文件。此外,还有IO重定向,也是一个不错的创意。至于文本文件中的内容采用什么格式呢?这个很具体的命令有关,那么操作文本就变得非常重要。grep,sed和awk就是三个操纵文本文件的命令
grep搜索
sed 修改和编辑文本文件中某些行
awk 是访问文本文件,操纵文本文件中某些数据
明白了吗?
摘自:https://zhidao.baidu.com/question/301782640.html?fr=iks&word=awk&ie=gbk
#! /usr/bin/env bash
for year in all/*
do
echo -ne `basename $year .gz`"\t"
gunzip -c $year | \
awk`{temp = substr($0, 88, $) + 0;
q = substr($0, 93, 1);
if(temp != 9999 && q - /[01459]/&& temp > max) max = temp}
End{print max}'
done
这个脚本循环遍历按年压缩的数据文件,首先是显示年份,然后使用awk处理每一个文件。awk从数据中提取两个字段气温和质量代码。气温值加0后转换为整数。接着测试气温值是否有效(用9999替代NCDC数据集中的缺失的值),通过质量代码来检测读取的数据值是否有疑问或错误。如果数据读取正确,那么该值将于目前读取到的最大气温值进行比较,如果该值比原先的最大值大,就替换目前的最大值。处理完问价那种所有的行后,在执行END块中的代码并在屏幕上输出最大气温值。
使用Hadoop来分析数据
map和recude
MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个阶段都以键值对作为输入和输出。其类型由程序员来选择。程序员还需要写两个函数:map 函数和reduce函数。
map阶段的输入是原始数据。选择文本格式作为输入格式,将数据集的每一行作为文本输入。键是某一行起始位置相对于文件起始位置的偏移量,不过我们不需要这个信息,所以将其忽略。
2.3.2