1. 程式人生 > >開發MapReduce程式 實驗2

開發MapReduce程式 實驗2

一、實驗題目

開發MapReduce程式

二、實驗要求

WeatherData應用程式是為分析文字檔案、獲得明確結果而編寫的計算程式。 在文字分析過程中,程式分別對(數)值和溫度做了分類和比較。 本次實驗練習,我們將編寫MapReduce程式,目的是找出weather.txt文字檔案中儲存的最高溫度的記錄。

三、操作步驟

1.開啟Eclipse,建立一個Java Project,匯入上述實驗中提到的jar包;
2.建立“com.letsdobigdata”包,在包下建立“MaxTemparatureMapper”類(可用附件檔案);
3.將MaxTemparatureMapper專案匯出為Jar檔案;
4.啟動Hadoop,複製weather.txt檔案到“/home/wcbdd/data/weather.txt”;
5.訪問localhost:50070,利用檔案選擇器選擇選擇weather.txt;
6.執行MapReduce程式,“bin/hadoop jar/home/wcbdd/data/weatherdata.jar com.letsdobigdata.MaxTemperatureDriver/weather.txt /home/wcbdd/weather1”;
7.開啟瀏覽器檢視輸出結果;
8.複製結果到output.txt;
9.檢視output.txt。

四、實驗結果

該實驗和實驗1的大體過程是相似的。 其主要區別在於,實驗1中將map,reduce,drive三個模組寫到了一個類中。 而實驗2中,這三個模組是分著寫的。這一部分將給出其不同部分。相同的建立Java Project將不再截圖。 首先是專案的組織結構: 可以看到,實驗2將專案分成了三部分,map,reduce,drive。 其中map負責提取感興趣的內容,在本程式中,就是氣溫。 其程式碼如下;
package com.letsdobigdata;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MaxTemperatureMapper extends
		Mapper<LongWritable, Text, Text, IntWritable> {
	private static final int MISSING = 9999;

	@Override
	public void map(LongWritable key, Text value, Context context)
			throws IOException, InterruptedException {
		String line = value.toString();
		String year = line.substring(15, 19);
		int airTemperature;
		if (line.charAt(87) == '+') { // parseInt doesn't like leading plus
		// signs
			airTemperature = Integer.parseInt(line.substring(88, 92));
		} else {
			airTemperature = Integer.parseInt(line.substring(87, 92));
		}
		String quality = line.substring(92, 93);
		if (airTemperature != MISSING && quality.matches("[01459]")) {
			context.write(new Text(year), new IntWritable(airTemperature));
		}
	}
}
然後是reduce部分,負責將map得到的資料整合,並且輸出,在本程式中,就是比較氣溫大小,並輸出最大值。
package com.letsdobigdata;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class MaxTemperatureReducer extends
		Reducer<Text, IntWritable, Text, IntWritable> {
	@Override
	public void reduce(Text key, Iterable<IntWritable> values, Context context)
			throws IOException, InterruptedException {
		int maxValue = Integer.MIN_VALUE;
		for (IntWritable value : values) {
			maxValue = Math.max(maxValue, value.get());
		}
		context.write(key, new IntWritable(maxValue));
	}
}
最後是drive部分,負責程式的執行,流程控制。
package com.letsdobigdata;

//This is the Driver module, i.e. MaxTemperatureDriver.java,created in the com.letsdobigdata package.
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/*This class is responsible for running map reduce job*/
public class MaxTemperatureDriver extends Configured implements Tool {
	public int run(String[] args) throws Exception {
		if (args.length != 2) {
			System.err
					.println("Usage: MaxTemperatureDriver <input path> <outputpath>");
			System.exit(-1);
		}
		Job job = new Job();
		job.setJarByClass(MaxTemperatureDriver.class);
		job.setJobName("Max Temperature");
		FileInputFormat.addInputPath(job, new Path(args[0]));
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		job.setMapperClass(MaxTemperatureMapper.class);
		job.setReducerClass(MaxTemperatureReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		System.exit(job.waitForCompletion(true) ? 0 : 1);
		boolean success = job.waitForCompletion(true);
		return success ? 0 : 1;
	}

	public static void main(String[] args) throws Exception {
		MaxTemperatureDriver driver = new MaxTemperatureDriver();
		int exitCode = ToolRunner.run(driver, args);
		System.exit(exitCode);
	}
}
寫好程式後,將程式Export成jar檔案,並且執行。 通過瀏覽器檢視結果:
將檔案從HDFS中匯出:
檢視結果: 可以看到,結果和瀏覽器中的結果是一致的。最熱的一天是1901年,那一天溫度達到了317,這裡的317應該是指開氏度,換算成攝氏度就是43.85,確實很熱。 總結: 這兩次的實驗是告訴我們MapReduce程式的結構是什麼樣的,應該怎樣編寫,編寫後怎樣執行。 我現在有的疑惑就是,這個程式沒法測試啊,要執行,先要Export成jar,那要是寫錯了除錯起來豈不是很麻煩? 但願接下來的學習可以解決我的疑惑。


相關推薦

開發MapReduce程式 實驗2

一、實驗題目 開發MapReduce程式 二、實驗要求 WeatherData應用程式是為分析文字檔案、獲得明確結果而編寫的計算程式。 在文字分析過程中,程式分別對(數)值和溫度做了分類和比較。 本次實驗練習,我們將編寫MapReduce程式,目的是找出weather.tx

使用Visual Studio 2017開發Python程式2

建立第一個Hello Word程式 (1)開啟Microsoft Visual Studio 2017,依次單擊頂部工具欄中的“檔案”>“新建” >“專案”命令,彈出“新建專案”對話方塊。在左側模板列表中選擇“Python”選項,在右側選擇“Python應用程式”選項。在下方文字

並行作業3:在eclipse中開發MapReduce程式

在eclipse中開發MapReduce程式 系統採用vm下ubuntu16.04 一、eclipse安裝(參考我的其它部落格) 二、eclipse配置 1、下載hadoop-eclipse-plugin-2.7.3.jar外掛,並將其拖到虛擬機器桌面 2、將其移動到/u

基於Maven使用eclipse開發mapreduce 程式

1.安裝mvn(可以省略)1.1上傳安裝包到linux1.2解壓maven安裝包 mkdir /usr/maven tar -zxvf apache-maven-3.2.1-bin.tar.gz -C /usr/maven1.3新增maven到環境變數 vim /et

2017-2018-2 20165236 實驗四《Android開發基礎》實驗報告

pan and 發表 rda RoCE AS .cn main 博客 2017-2018-2 20165236 實驗四《Android開發基礎》實驗報告 一、實驗報告封面 課程:Java程序設計 班級:1652班 姓名:郭金濤 學號:20

2017-2018-2 20165215 實驗四《Android開發基礎》實驗報告

PE 對齊 ftw src 創建 信息 多個 界面 線性布局 2017-2018-2 20165215 實驗四《Android開發基礎》實驗報告 一、實驗報告封面 課程:Java程序設計 班級:1652班 姓名:張家佳 學號:20165215 指導教師:婁嘉鵬 實驗日期:2

2017-2018-2 20165218 實驗四《Android開發基礎》實驗報告

信息 and 修改 cti 自己的 res 鏈接 學習 main 實驗三 Android開發基礎 課程:java程序設計 姓名:趙冰雨 學號:20165218 指導教師:婁嘉鵬 實驗日期:2018.4.14 實驗內容: 1.基於Android Studio開發簡單的And

2.1顯示程式實驗

2.1.3 實驗內容及說明   一般來說,有很多程式需要顯示輸出提示執行的狀況和結果,有的還需要將 資料區中的內容顯示在螢幕上。本實驗要求將指定資料區的資料以十六進位制數形 式顯示在螢幕上,並利用 DOS 功能呼叫完成一些提示資訊的顯示。通過本實驗, 初步掌握實驗系統配

微機實驗報告2 顯示程式實驗

桂 林 理 工 大 學 實  驗  報  告 班級  軟體工程16-1班  學號  3162052051116  姓名  張識虔  同組實驗者      

從零開始學微信小程式開發---2、小程式專案的建立、相關檔案的作用及小程式IDE

一、建立一個小程式專案 1、下載安裝微信web開發者工具,目前最新版本是1.02.1811141。 2、開啟,掃碼登入, 3、選擇小程式專案 4、點選專案管理旁邊的+ 5、如果你有小程式賬號會有一個APPID,詳情見小程式簡易教程申請賬號那一節,如果還沒有,可以

微信小程式開發入門——請使用2.2.3或以上的基礎庫以使用雲能力

今天下載微信小程式開發工具安裝使用,選擇“建立雲開發快速啟動模板”後,出現了這樣的提示----“請使用2.2.3或以上的基礎庫以使用雲能力”。   查看了官方文件後,解決方案如下: 1、點選選擇“詳情”   2、除錯基礎庫選擇2.2.3或

在myeclipse上連線hadoop-2.8.0 執行mapreduce程式

首先 hadoop叢集是要先搭建的沒的說。 可以先在hadoop上執行自帶的mapreduce jar包,跑一下,不成功說明配置檔案沒有配置好,這裡就不說配置哪些了,網上很多。 1.在windows下下載hadoop-2.8.0.tar.gz 並且解壓  2.下載 &n

hadoop 2.2.0 執行MapReduce程式

  環境: 2臺虛擬機器搭建Hadoop環境 系統Fedora 10 Hadoop 2.2.0   準備工作: 1、Hadoop 2.2.0 環境配置執行 2、建立Hdfs的輸入資料夾和輸入檔案: hadoop fs -copyFromLoca

Slog69_實現一個帶引數的雲函式GET!(微信小程式之雲開發-全棧時代2

ArthurSlog SLog-69 Year·1 Guangzhou·China Sep 11th 2018 禍兮福之所倚 福兮禍之所伏 開發環境MacOS(High Sierra 10.13.5) 需要的資訊和資訊源: 前言 騰訊推出“雲開發”概

關於MapReduce程式開發的一些總結

mapreduce在程式設計的時候,基本上一個固化的模式,沒有太多可靈活改變的地方,除了以下幾處: 1 輸入資料介面:InputFormat FileInputFormat(檔案型別資料讀取的通用抽象類) DBInputFormat (資料庫資料讀取的通用抽象類) 預設使用的

Bmob 開發 Android程式快速入門 2

                                Bmob 開發  Android程式快速入門 2  

MapReduce程式開發元件說明

1、WordCount編碼回顧 MapReduce程式設計涉及的主要元件,如下: InputFormat類:分割成多個splits和每行怎麼解析。 Mapper類:對輸入的每對<key,value>生成中間結果。 Combiner類:在map端,對相同的key進行合併。 Pa

微信小程式2)-小程式資訊完善以及開發前準備,程式碼稽核與釋出

1.完成註冊後,在微信公眾平臺官網首頁(mp.weixin.qq.com)的登入藉口直接登入 2.完善小程式資訊(完成註冊後,微信小程式資訊完善步驟和開發可同步進行) *選擇對公打款的使用者,完成匯款後,可以補充小程式名稱資訊,上傳小程式影象,填寫小程式介紹並且確定小程式服

10天Hadoop快速突擊(3)——開發MapReduce應用程式

開發MapReduce應用程式一、系統引數的配置1.通過API對相關元件的引數進行配置這些API被分成了一下幾個部分:org.apache.hadoop.conf:定義了系統引數的配置檔案處理APIorg.apache.hadoop.fs:定義了抽象的檔案系統APIorg.a

如何在開發環境中建立mapreduce程式

1. 首先建立開發環境(eclipse-hadoop),網上搭建部落格很多,不細說 2. 開發環境建立之後自己建立一個包,這個名字是隨便起的,可以起名為mapreduce。 3.然後建立一個.java檔案,可以是mapreduce檔案:mapreduce.java。 4.把