Inhaltsverzeichnis
导读
MRunit简介
Heim Datenbank MySQL-Tutorial MRUnit使用技巧

MRUnit使用技巧

Jun 07, 2016 pm 04:33 PM
für 使用技巧

导读 为了能测试编写的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
Nach dem Login kopieren

需要做的事情是查找所有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);
    }
  }
}
Nach dem Login kopieren

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));
  }
}
Nach dem Login kopieren

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();
  }
}
Nach dem Login kopieren

使用过JUnit的就应该知道怎么运行上面的代码了,这里就不重复了。

MRUint可以测试单个Map,单个Reduce和一个MapReduce或者多个MapReduce程序。
详细的可以参考官网文档:MRUnit Tutorial

参考:http://www.cnblogs.com/gpcuster/archive/2009/10/04/1577921.html

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich die Go-Sprache für quantitative Finanzanalysen? Wie verwende ich die Go-Sprache für quantitative Finanzanalysen? Jun 11, 2023 am 08:51 AM

Im Bereich des modernen Finanzwesens ist die quantitative Finanzierung mit dem Aufkommen der Datenwissenschaft und der Technologie der künstlichen Intelligenz nach und nach zu einer immer wichtigeren Richtung geworden. Als statisch typisierte Programmiersprache, die Daten effizient verarbeiten und verteilte Systeme bereitstellen kann, hat die Go-Sprache im Bereich der quantitativen Finanzen nach und nach Aufmerksamkeit erregt. In diesem Artikel wird die Verwendung der Go-Sprache zur Durchführung quantitativer Finanzanalysen vorgestellt. Der spezifische Inhalt ist wie folgt: Finanzdaten erhalten Zuerst müssen wir Finanzdaten erhalten. Die Netzwerkprogrammierfunktionen der Go-Sprache sind sehr leistungsfähig und können zum Abrufen verschiedener Finanzdaten verwendet werden. Vergleichen

Wie man mit PHP einfache SEO-Optimierungsfunktionen entwickelt Wie man mit PHP einfache SEO-Optimierungsfunktionen entwickelt Sep 20, 2023 pm 04:18 PM

Wie man mit PHP einfache SEO-Optimierungsfunktionen entwickelt SEO (SearchEngineOptimization) oder Suchmaschinenoptimierung bezieht sich auf die Verbesserung des Rankings der Website in Suchmaschinen durch Verbesserung der Struktur und des Inhalts der Website, wodurch mehr organischer Traffic erzielt wird. Wie kann man bei der Website-Entwicklung mit PHP einfache SEO-Optimierungsfunktionen implementieren? In diesem Artikel werden einige häufig verwendete SEO-Optimierungstechniken und spezifische Codebeispiele vorgestellt, um Entwicklern bei der Implementierung der SEO-Optimierung in PHP-Projekten zu helfen. 1. Freundliche Nutzung

Wie verwende ich die Go-Sprache für Data Mining? Wie verwende ich die Go-Sprache für Data Mining? Jun 10, 2023 am 08:39 AM

Mit dem Aufkommen von Big Data und Data Mining unterstützen immer mehr Programmiersprachen Data Mining-Funktionen. Als schnelle, sichere und effiziente Programmiersprache kann die Go-Sprache auch für das Data Mining verwendet werden. Wie nutzt man also die Go-Sprache für das Data Mining? Hier sind einige wichtige Schritte und Techniken. Datenerfassung Zunächst müssen Sie die Daten beschaffen. Dies kann auf verschiedene Weise erreicht werden, z. B. durch das Crawlen von Informationen auf Webseiten, die Verwendung von APIs zum Abrufen von Daten, das Lesen von Daten aus Datenbanken usw. Die Go-Sprache verfügt über umfangreiches HTTP

So schreiben Sie den Minimum-Spanning-Tree-Algorithmus mit C# So schreiben Sie den Minimum-Spanning-Tree-Algorithmus mit C# Sep 19, 2023 pm 01:55 PM

So schreiben Sie mit C# den Minimum-Spanning-Tree-Algorithmus. Der Minimum-Spanning-Tree-Algorithmus ist ein wichtiger Algorithmus der Graphentheorie, der zur Lösung des Konnektivitätsproblems von Graphen verwendet wird. In der Informatik bezeichnet ein minimaler Spannbaum einen Spannbaum eines zusammenhängenden Graphen, bei dem die Summe der Gewichte aller Kanten des Spannbaums am kleinsten ist. In diesem Artikel wird erläutert, wie Sie mit C# den Minimal-Spanning-Tree-Algorithmus schreiben, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir eine Diagrammdatenstruktur definieren, um das Problem darzustellen. In C# können Sie eine Adjazenzmatrix zur Darstellung eines Diagramms verwenden. Eine Adjazenzmatrix ist ein zweidimensionales Array, in dem jedes Element dargestellt wird

So verwenden Sie Nginx, um Hotlinking zu verhindern So verwenden Sie Nginx, um Hotlinking zu verhindern Jun 11, 2023 pm 01:25 PM

Mit der Popularität des Internets bieten immer mehr Websites externe Linkfunktionen für Bilder, Videos und andere Ressourcen. Diese externe Linkfunktion kann jedoch leicht gestohlen werden. Hotlinking bedeutet, dass andere Websites Bilder, Videos und andere Ressourcen auf Ihrer Website verwenden, um diese Ressourcen über die Referenzadresse direkt auf ihrer eigenen Website anzuzeigen, anstatt sie auf ihren eigenen Server herunterzuladen. Auf diese Weise können Hotlink-Websites den Datenverkehr und die Bandbreitenressourcen Ihrer Website kostenlos nutzen, was Ressourcen verschwendet und die Website-Geschwindigkeit beeinträchtigt. Um dieses Problem zu lösen, kann Nginx verwendet werden, um Hotlinking zu verhindern. Nginx ist

Einfache Lösung: Eine vollständige Anleitung zur Verwendung von Pip-Mirror-Quellen Einfache Lösung: Eine vollständige Anleitung zur Verwendung von Pip-Mirror-Quellen Jan 16, 2024 am 10:31 AM

Ein-Klick-Lösung: Beherrschen Sie schnell die Verwendungsfähigkeiten der Pip-Spiegelquelle. Einführung: Pip ist das am häufigsten verwendete Paketverwaltungstool für Python, mit dem Python-Pakete einfach installiert, aktualisiert und verwaltet werden können. Aus bekannten Gründen ist die Verwendung der Standard-Spiegelquelle zum Herunterladen des Installationspakets jedoch langsamer. Um dieses Problem zu lösen, müssen wir eine inländische Spiegelquelle verwenden. In diesem Artikel wird erläutert, wie Sie die Verwendungsfähigkeiten von Pip Mirror Source schnell beherrschen, und es werden spezifische Codebeispiele bereitgestellt. Bevor Sie beginnen, machen Sie sich mit dem Konzept der Pip-Spiegelquelle vertraut.

Beherrschen Sie die Vorteile und Betriebstechniken der virtuellen Conda-Umgebung Beherrschen Sie die Vorteile und Betriebstechniken der virtuellen Conda-Umgebung Feb 18, 2024 pm 07:46 PM

Um die Vorteile und Nutzungstechniken der virtuellen Conda-Umgebung zu verstehen, sind spezifische Codebeispiele erforderlich. Python ist eine sehr beliebte Programmiersprache und wird häufig in Bereichen wie wissenschaftlichem Rechnen, Datenanalyse und künstlicher Intelligenz verwendet. Im Python-Ökosystem gibt es viele Bibliotheken und Tools von Drittanbietern, und möglicherweise müssen in verschiedenen Projekten unterschiedliche Versionen der Bibliotheken verwendet werden. Um die Abhängigkeiten dieser Bibliotheken zu verwalten, wird die virtuelle Umgebung von Conda zu einem wichtigen Werkzeug. Conda ist ein Open-Source-Paketverwaltungssystem und ein Umgebungsverwaltungssystem, das einfach erstellen und erstellen kann

So verwenden Sie den Divide-and-Conquer-Algorithmus in C++ So verwenden Sie den Divide-and-Conquer-Algorithmus in C++ Sep 20, 2023 pm 03:19 PM

Verwendung des Divide-and-Conquer-Algorithmus in C++ Der Divide-and-Conquer-Algorithmus ist eine Methode, die ein Problem in mehrere Unterprobleme zerlegt und dann die Lösungen der Unterprobleme kombiniert, um eine Lösung für das ursprüngliche Problem zu erhalten. Es hat ein breites Anwendungsspektrum und kann zur Lösung verschiedener Arten von Problemen verwendet werden, einschließlich mathematischer Probleme, Sortierprobleme, Diagrammprobleme usw. In diesem Artikel wird die Verwendung des Divide-and-Conquer-Algorithmus in C++ vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Grundidee Die Grundidee des Divide-and-Conquer-Algorithmus besteht darin, ein großes Problem in mehrere kleinere Teilprobleme zu zerlegen, jedes Teilproblem rekursiv zu lösen und schließlich die Teilprobleme zusammenzuführen.

See all articles