大数据开发平台Hadoop |
您所在的位置:网站首页 › 海南每年最高气温 › 大数据开发平台Hadoop |
标题统计全球每年的最高气温和最低气温
**数据资源来源:ftp://ftp.ncdc.noaa.gov/pub/data/gsod/
1 实训目标 (1) 掌握 Combiner 的使用。 (2) 掌握自定义数据类型。 2 实训环境 (1) 使用 1.7版本的 JDK 。 (2) 使用带有三个节点的集群,主节点为 master ,子节点为 slave1 , slave2 。 (3) 使用 2.6.4 版本的 Hadoop 。 3 实训内容 (1) 上传并解压数据。 (2) 编写 MapReduce 程序统计全球每年最高气温和最低气温。 4 实训步骤 4.1 上传并解压数据 (1) 解压 /opt/data/ncdc 目录下所有压缩文件,命令为“ gunzip * ”。解压完成后结果如 图 4‑1 所 示。 (2) 查看其中一个文件,其数据格式如 图 4‑2 所示。 其中, YEARMODA 对应年月日, TEMP 对应温度,并且每列数据的分隔符空格的数量是不同的,这个在数据预处理的时候应该注意。 (1) 在 /opt/data 目录下创建一个文件 data.txt ,命令为“ touch /opt/data /data.txt ”。 (2) 回到 ncdc 目录执行命令“ sed -i ‘1d’ * ”删除所有文件的首行字段。 (3) ncdc 目录下执行“ cat * >> /opt/data/ data.txt ”将所有数据输出到 data.txt 中。 (4) 将 data.txt 上传到 HDFS 的 /user/root/ 目录下。 4.2 编写 MapReduce 程序统计全球每年的最高气温和最低气温 (1) 打开 Eclipse ,创建工程 temperature 。 (2) 在工程 temperature 下的 src 目录下建立包 demo 。 (3) 在 包 demo 下新建类 YearMaxTAndMinT, 自定义一个数据类型 YearMaxTAndMinT 继承 Writable 接口,在这个类里面定义字符串类型的变量 year ,定 义 double 类型的变量 maxTemp 和 minTemp ,获取 get() 方法和 set() 方法,实现构造函数。代码如 代码 4‑1 所示。 代码 4 ‑ 1 自定义数据类型YearMaxTAndMinT package demo; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.Writable; public class YearMaxTAndMinT implements Writable{ private String year; private double maxTemp; private double minTemp; public YearMaxTAndMinT() { } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public double getMaxTemp() { return maxTemp; } public void setMaxTemp(double maxTemp) { this.maxTemp = maxTemp; } public double getMinTemp() { return minTemp; } public void setMinTemp(double minTemp) { this.minTemp = minTemp; } @Override public void readFields(DataInput in) throws IOException { this.year=in.readUTF(); this.maxTemp=in.readDouble(); this.minTemp=in.readDouble(); } @Override public void write(DataOutput out) throws IOException { out.writeUTF(year); out.writeDouble(maxTemp); out.writeDouble(minTemp); }(4) 创建一个 Mapper 类取名 MaxTAndMinTMapper ,主要功能为获取年份和气温。并将年份作为 key ,气温作为 value 输出。代码如 代码 4‑2 所示。 代码 4 ‑ 2 创建 Mapper 类 package demo; import java.io.IOException; import org.apache.hadoop.io.DoubleWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MaxTAndMinTMapper extends Mapper { @Override protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { String line = value.toString().trim(); int[] indexs = getIndexs(line);// 获取年份和气温数据的索引范围 String year = getYear(line, indexs |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |