MRUnit使用技巧
导读 为了能测试编写的hadoop组件和MapReduce程序,一般有下面三种思路: 一、使用hadoop-eclipse插件来调试MapReduce程序,不过这在hadoop比较新的版本里已经不再提供了; 二、是配置jvm参数远程调试hadoop组件。这种方式用于读hadoop源代码比较适合,而如
导读
为了能测试编写的hadoop组件和MapReduce程序,一般有下面三种思路:
一、使用hadoop-eclipse插件来调试MapReduce程序,不过这在hadoop比较新的版本里已经不再提供了;
二、是配置jvm参数远程调试hadoop组件。这种方式用于读hadoop源代码比较适合,而如果用于远程调试MapReduce还是有点麻烦的;
详细参考的文档有:
http://blog.javachen.com/hadoop/2013/08/01/remote-debug-hadoop/
http://zhangjie.me/eclipse-debug-hadoop/
三、最后我选择了MRuinit来用于主要开发调试MapReduce应用程序。
MRunit简介
MRunit是用于做MapReduce单元测试的java库。使用apache发布,下载地址是:http://mrunit.apache.org/general/downloads.html
MRUnit测试框架是基于JUnit的。我们可以方便的测试Map ?Reduce程序。它适用于?0.20 , 0.23.x , 1.0.x , 2.x 等 Hadoop版本。
下面我们来做些MRunit的使用官方例子(SMS CDR (call details record) analysis):
使用记录如下
CDRID;CDRType;Phone1;Phone2;SMS Status Code 655209;1;796764372490213;804422938115889;6 353415;0;356857119806206;287572231184798;4 835699;1;252280313968413;889717902341635;0
需要做的事情是查找所有CDRType 为1的记录和它相关的状态码(SMS Status Code)
Map输出应该是:
6, 1
0, 1
代码如下:
public class SMSCDRMapper extends Mapper { private Text status = new Text(); private final static IntWritable addOne = new IntWritable(1); /** * Returns the SMS status code and its count */ protected void map(LongWritable key, Text value, Context context) throws java.io.IOException, InterruptedException { //655209;1;796764372490213;804422938115889;6 is the Sample record format String[] line = value.toString().split(";"); // If record is of SMS CDR if (Integer.parseInt(line[1]) == 1) { status.set(line[4]); context.write(status, addOne); } } }
Reduce 程序把最后的结果相加,程序如下:
public class SMSCDRReducer extends Reducer { protected void reduce(Text key, Iterable values, Context context) throws java.io.IOException, InterruptedException { int sum = 0; for (IntWritable value : values) { sum += value.get(); } context.write(key, new IntWritable(sum)); } }
MRunit的测试程序如下:
import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver; import org.apache.hadoop.mrunit.mapreduce.ReduceDriver; import org.junit.Before; import org.junit.Test; public class SMSCDRMapperReducerTest { MapDriver mapDriver; ReduceDriver reduceDriver; MapReduceDriver mapReduceDriver; @Before public void setUp() { SMSCDRMapper mapper = new SMSCDRMapper(); SMSCDRReducer reducer = new SMSCDRReducer(); mapDriver = MapDriver.newMapDriver(mapper);; reduceDriver = ReduceDriver.newReduceDriver(reducer); mapReduceDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer); } @Test public void testMapper() { mapDriver.withInput(new LongWritable(), new Text( "655209;1;796764372490213;804422938115889;6")); mapDriver.withOutput(new Text("6"), new IntWritable(1)); mapDriver.runTest(); } @Test public void testReducer() { List values = new ArrayList(); values.add(new IntWritable(1)); values.add(new IntWritable(1)); reduceDriver.withInput(new Text("6"), values); reduceDriver.withOutput(new Text("6"), new IntWritable(2)); reduceDriver.runTest(); } }
使用过JUnit的就应该知道怎么运行上面的代码了,这里就不重复了。
MRUint可以测试单个Map,单个Reduce和一个MapReduce或者多个MapReduce程序。
详细的可以参考官网文档:MRUnit Tutorial
参考:http://www.cnblogs.com/gpcuster/archive/2009/10/04/1577921.html
原文地址:MRUnit使用技巧, 感谢原作者分享。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在現代金融領域中,隨著數據科學和人工智慧技術的興起,量化金融逐漸成為了越來越重要的方向。而作為一門能夠高效處理資料和部署分散式系統的靜態類型程式語言,Go語言也逐漸受到了量化金融領域的關注。本文將介紹如何使用Go語言進行量化金融分析,具體內容如下:取得金融數據首先,我們需要取得金融數據。 Go語言的網路程式設計能力非常強大,可以用來取得各種金融數據。比

如何使用C#編寫最小生成樹演算法最小生成樹演算法是一種重要的圖論演算法,它用於解決圖的連結性問題。在電腦科學中,最小生成樹是指一個連通圖的生成樹,該生成樹的所有邊的權值總和最小。本文將介紹如何使用C#編寫最小生成樹演算法,並提供具體的程式碼範例。首先,我們需要定義一個圖的資料結構來表示問題。在C#中,可以使用鄰接矩陣來表示圖。鄰接矩陣是一個二維數組,其中每個元素表示

隨著大數據和資料探勘的興起,越來越多的程式語言開始支援資料探勘的功能。 Go語言作為一種快速、安全、高效的程式語言,也可以用於資料探勘。那麼,如何使用Go語言進行資料探勘呢?以下是一些重要的步驟和技術。數據獲取首先,你需要取得數據。這可以透過各種途徑實現,例如爬取網頁上的資訊、使用API取得資料、從資料庫讀取資料等等。 Go語言自備了豐富的HTTP

如何使用PHP開發簡單的SEO優化功能SEO(SearchEngineOptimization)即搜尋引擎優化,是指透過改進網站的結構和內容來提高網站在搜尋引擎中的排名,從而獲得更多的自然流量。在網站開發中,如何使用PHP來實現簡單的SEO優化功能呢?本文將介紹一些常用的SEO最佳化技巧和具體的程式碼範例,幫助開發者在PHP專案中實現SEO最佳化。一、使用友好

隨著網路的普及,越來越多的網站提供了圖片、影片等資源的外鏈功能。然而,這種外鏈功能卻容易被偷鏈。盜鍊是指其它網站利用你網站上的圖片、影片等資源,直接透過引用地址在自己的網站顯示這些資源,而不是將其下載到自己的伺服器上。這樣一來,盜鏈網站就可以免費使用你網站的流量和頻寬資源,這既浪費資源又影響網站速度。針對這種問題,可以使用Nginx進行防盜鏈。 Nginx是

如何使用C++中的分治演算法分治演算法是一種將問題分解成若干個子問題,再將子問題的解合併起來得到原問題解的方法。它的應用廣泛,可以用來解決各種類型的問題,包括數學問題、排序問題、圖表問題等等。本文將介紹如何使用C++中的分治演算法,並提供具體的程式碼範例。一、基本思想分治演算法的基本思想是將一個大問題分解成若干個規模較小的子問題,對每個子問題進行遞歸求解,最後合併子問題

一鍵解決:快速掌握pip鏡像來源的使用技巧導語:pip是Python最常用的套件管理工具,可以方便地安裝、升級和管理Python套件。然而,由於眾所周知的原因,使用預設的鏡像來源下載安裝包速度較慢,為了解決這個問題,我們需要使用國內的鏡像來源。本文將介紹如何快速掌握pip鏡像來源的使用技巧,並提供具體的程式碼範例。了解pip鏡像來源的概念在開始之前,先來了

了解conda虛擬環境的優勢與使用技巧,需要具體程式碼範例Python是一門非常流行的程式語言,廣泛應用於科學計算、資料分析和人工智慧等領域。在Python的生態系中,有許多第三方函式庫和工具,在不同的專案中可能需要使用不同版本的函式庫。為了管理這些函式庫的依賴關係,conda虛擬環境成為了一個重要的工具。 conda是一個開源的套件管理系統和環境管理系統,能夠方便地創建和
