目次
导读
MRunit简介

MRUnit使用技巧

Jun 07, 2016 pm 04:33 PM
のために スキル

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

定量的な財務分析に Go 言語を使用するにはどうすればよいですか? 定量的な財務分析に Go 言語を使用するにはどうすればよいですか? Jun 11, 2023 am 08:51 AM

現代の金融の分野では、データサイエンスと人工知能技術の台頭により、定量的金融が徐々に重要な方向になってきています。 Go 言語は、データを効率的に処理し、分散システムを展開できる静的型プログラミング言語として、クオンツ ファイナンスの分野で徐々に注目を集めています。この記事では、Go 言語を使用して定量的な財務分析を行う方法を紹介します 具体的な内容は次のとおりです: 財務データの取得 まず、財務データを取得する必要があります。 Go 言語のネットワーク プログラミング機能は非常に強力で、さまざまな財務データを取得するために使用できます。比較する

データマイニングに Go 言語を使用するにはどうすればよいですか? データマイニングに Go 言語を使用するにはどうすればよいですか? Jun 10, 2023 am 08:39 AM

ビッグデータとデータマイニングの台頭により、ますます多くのプログラミング言語がデータマイニング機能をサポートし始めています。 Go 言語は、高速、安全、効率的なプログラミング言語として、データ マイニングにも使用できます。では、Go 言語をデータマイニングに使用するにはどうすればよいでしょうか?ここでは、重要な手順とテクニックをいくつか紹介します。データの取得 まず、データを取得する必要があります。これは、Web ページ上の情報のクローリング、API を使用したデータの取得、データベースからのデータの読み取りなど、さまざまな手段を通じて実現できます。 Go 言語にはリッチ HTTP が付属しています

PHP を使用して簡単な SEO 最適化関数を開発する方法 PHP を使用して簡単な SEO 最適化関数を開発する方法 Sep 20, 2023 pm 04:18 PM

PHP を使用して簡単な SEO 最適化機能を開発する方法 SEO (SearchEngineOptimization)、または検索エンジン最適化とは、Web サイトの構造とコンテンツを改善することで検索エンジンでの Web サイトのランキングを向上させ、それによってより多くのオーガニック トラフィックを獲得することを指します。 Web サイト開発において、PHP を使用して簡単な SEO 最適化機能を実装するにはどうすればよいでしょうか?この記事では、開発者が PHP プロジェクトに SEO 最適化を実装するのに役立つ、一般的に使用される SEO 最適化テクニックと具体的なコード例をいくつか紹介します。 1. 使いやすい

C# を使用して最小スパニング ツリー アルゴリズムを作成する方法 C# を使用して最小スパニング ツリー アルゴリズムを作成する方法 Sep 19, 2023 pm 01:55 PM

C# を使用して最小スパニング ツリー アルゴリズムを作成する方法. 最小スパニング ツリー アルゴリズムは、グラフの接続性の問題を解決するために使用される重要なグラフ理論アルゴリズムです。コンピューター サイエンスでは、最小スパニング ツリーとは、スパニング ツリーのすべてのエッジの重みの合計が最小となる、接続されたグラフのスパニング ツリーを指します。この記事では、C# を使用して最小限のスパニング ツリー アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。まず、問題を表すグラフ データ構造を定義する必要があります。 C# では、隣接行列を使用してグラフを表現できます。隣接行列は、各要素が表す 2 次元配列です。

nginx を使用してホットリンクを防ぐ方法 nginx を使用してホットリンクを防ぐ方法 Jun 11, 2023 pm 01:25 PM

インターネットの普及に伴い、写真や動画などの外部リンク機能を提供するWebサイトが増えています。しかし、この外部リンク機能は盗まれやすいのです。ホットリンクとは、他の Web サイトがあなたの Web サイト上の写真、ビデオ、その他のリソースを使用し、それらのリソースを独自のサーバーにダウンロードするのではなく、参照アドレスを通じて自分の Web サイトに直接表示することを意味します。このようにして、ホットリンク Web サイトは Web サイトのトラフィックと帯域幅のリソースを無料で使用できるため、リソースが無駄になり、Web サイトの速度に影響を与えます。この問題に対処するには、Nginx を使用してホットリンクを防ぐことができます。 Nginxは

簡単な解決策: pip ミラー ソースの使用テクニックの完全ガイド 簡単な解決策: pip ミラー ソースの使用テクニックの完全ガイド Jan 16, 2024 am 10:31 AM

ワンクリック ソリューション: pip ミラー ソースの使用スキルをすばやくマスターします はじめに: pip は、Python で最も一般的に使用されるパッケージ管理ツールであり、Python パッケージのインストール、アップグレード、管理を簡単に行うことができます。ただし、よく知られている理由により、デフォルトのミラー ソースを使用してインストール パッケージをダウンロードすると時間がかかるため、この問題を解決するには、国内のミラー ソースを使用する必要があります。この記事では、pip ミラー ソースの使用スキルをすぐにマスターする方法と、具体的なコード例を紹介します。始める前に、pip ミラー ソースの概念を理解してください。

C++ で分割統治アルゴリズムを使用する方法 C++ で分割統治アルゴリズムを使用する方法 Sep 20, 2023 pm 03:19 PM

C++ で分割統治アルゴリズムを使用する方法 分割統治アルゴリズムは、問題をいくつかのサブ問題に分解し、サブ問題の解を組み合わせて元の問題の解を得る方法です。応用範囲が広く、数学問題、並べ替え問題、グラフ問題など、さまざまな種類の問題の解決に使用できます。この記事では、C++ で分割統治アルゴリズムを使用する方法を紹介し、具体的なコード例を示します。 1. 基本的な考え方 分割統治アルゴリズムの基本的な考え方は、大きな問題をいくつかの小さなサブ問題に分解し、各サブ問題を再帰的に解決し、最後にサブ問題をマージすることです。

conda仮想環境の利点と運用テクニックをマスターする conda仮想環境の利点と運用テクニックをマスターする Feb 18, 2024 pm 07:46 PM

conda 仮想環境の利点と使用テクニックを理解するには、具体的なコード例が必要です Python は、科学計算、データ分析、人工知能などの分野で広く使用されている非常に人気のあるプログラミング言語です。 Python エコシステムには、多数のサードパーティ ライブラリとツールがあり、プロジェクトごとに異なるバージョンのライブラリを使用する必要がある場合があります。これらのライブラリの依存関係を管理するには、conda 仮想環境が重要なツールになります。 conda は、簡単に作成および実行できるオープンソースのパッケージ管理システムおよび環境管理システムです。

See all articles