1. 问题
  2. 借鉴

  3. https://blog.csdn.net/sunshine920103/article/details/61615948

    https://www.cnblogs.com/xdlaoliu/p/7235675.html

package com.**.pcdnas.mr.job;import com.alibaba.fastjson.JSON;
import com.**.pcdnas.mr.model.LogInfo;
import com.**.pcdnas.mr.util.MrCommonUtil;
import com.**.pcdnas.mr.util.StringUtil;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
import java.io.IOException;/*** Created by * 2018/11/8.*/
public class OpenPeerMR {/*** 4个泛型中,前两个是指定mapper输入数据的类型,KEYIN是输入的key的类型,VALUEIN是输入的value的类型*/public static class OpenPeerMapper extends Mapper<Object, Text, Text, Text> {/*** 输出key*/private Text outKey = new Text();@Overrideprotected void map(Object key, Text value, Context context) throws IOException, InterruptedException {String peerLog = value.toString().trim();LogInfo logInfo = JSON.parseObject(peerLog, LogInfo.class);outKey.set(MrCommonUtil.getOpenPeerMapKey(logInfo));context.write(outKey, value);}}/*** 经过mapper处理后的数据会被reducer拉取过来,所以reducer的KEYIN、VALUEIN和mapper的KEYOUT、VALUEOUT一致*/public static class OpenPeerReducer extends Reducer<Text, Text, Text, Text> {private MultipleOutputs outputs;@Overrideprotected void setup(Context context) throws IOException, InterruptedException {outputs = new MultipleOutputs(context);}@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {String keyVal = key.toString().trim();String[] arrs = keyVal.split(",");String companyId = "ip";String token = "token";String date = "yyyyMMdd-HH";if(arrs.length == 3){companyId = arrs[0];token = arrs[1];date = arrs[2];}for (Text value : values) {/*** 指定写出不同文件的数据*/outputs.write("MOSText", NullWritable.get() , value, companyId + "/" + token + "/" + (StringUtil.getUUIDFromToken(token) + "_" + date));}}@Overrideprotected void cleanup(Context context) throws IOException, InterruptedException {outputs.close();super.cleanup(context);}}
}
package com.**.pcdnas.mr.job;import com.**.pcdnas.mr.text.MyTextOutputFormat;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
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;
import java.io.IOException;
import java.util.Arrays;/*** Created by jiangzhou* 2018/11/9.*/
public class OpenPeerMRTest {MapDriver<Object, Text, Text, Text> mapDriver;ReduceDriver<Text, Text, Text, Text> reduceDriver;MapReduceDriver<Object, Text, Text, Text, Text, Text> mapReduceDriver;@Beforepublic void setUp() {//测试mapreduceOpenPeerMR.OpenPeerMapper mapper = new OpenPeerMR.OpenPeerMapper();OpenPeerMR.OpenPeerReducer reducer = new OpenPeerMR.OpenPeerReducer();mapDriver = MapDriver.newMapDriver(mapper);reduceDriver = ReduceDriver.newReduceDriver(reducer);mapReduceDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer);}@Testpublic void OpenPeerMapper() throws IOException {LongWritable key = new LongWritable(0);String content = "{\"peerType\":0,\"countryCode\":1,\"provinceCode\":16,\"ispCode\":1,\"ip\":\"61.171.51.200\",\"ipcountry\":\"中国\",\"ipprovince\":\"上海\",\"ipisp\":\"电信\",\"time\":1541523309467,\"date\":\"181107\",\"hour\":0,\"minute\":5509,\"submitTime\":1541523289720,\"token\":\"10100101000100000004016db042cd0e204d028a3ef961ab216d92\",\"deviceId\":\"2D15397E0E2CD4067FF185B5E2459706\",\"osName\":\"p\",\"osVersion\":\"\",\"deviceType\":\"\",\"cpuAbi\":\"\",\"networkType\":\"\",\"appversion\":\"\",\"appName\":\"\",\"peerVersion\":\"2.5.1.0\",\"pcdnType\":\"6\",\"natType\":4,\"queryPeerNum\":0,\"uploadAvgSpeed\":31026,\"uploadMaxSpeed\":0,\"uploadLimitSpeed\":2097152,\"uploadtotalBytes\":597747830,\"uploadtime\":0,\"uploadMaxConnect\":0,\"connPeerNum\":0,\"validconnPeerNum\":0,\"domainName\":\"114.80.186.137\",\"logcode\":\"\",\"repTtfb\":0,\"repTime\":0,\"t4\":0,\"t5\":53977000,\"t6\":0,\"t7\":53977000,\"t8\":299,\"cacheUsedSize\":0,\"cacheRemainSize\":5632,\"cacheSetSize\":5632,\"systemValidSpace\":188468,\"isthirdStorage\":0,\"isdiskcanwrite\":0,\"cpuNum\":0,\"syscpuRate\":0,\"plugcpuRate\":0,\"sysMem\":0,\"restMem\":0,\"plugMem\":0,\"ioread\":0.0,\"iowrite\":0.0,\"await\":0.0,\"svctm\":0.0,\"util\":0.0,\"type\":\"peer\"}";Text value = new Text(content);new MapDriver<Object, Text, Text, Text>().withMapper(new OpenPeerMR.OpenPeerMapper()).withInput(key,value).withOutput(new Text("401,10100101000100000004016db042cd0e204d028a3ef961ab216d92,2018-11-07_00"),new Text(content)).runTest();}/*@Testpublic void OpenPeerReducer() throws IOException {String content = "{\"peerType\":0,\"countryCode\":1,\"provinceCode\":16,\"ispCode\":1,\"ip\":\"61.171.51.200\",\"ipcountry\":\"中国\",\"ipprovince\":\"上海\",\"ipisp\":\"电信\",\"time\":1541523309467,\"date\":\"181107\",\"hour\":0,\"minute\":5509,\"submitTime\":1541523289720,\"token\":\"10100101000100000004016db042cd0e204d028a3ef961ab216d92\",\"deviceId\":\"2D15397E0E2CD4067FF185B5E2459706\",\"osName\":\"p\",\"osVersion\":\"\",\"deviceType\":\"\",\"cpuAbi\":\"\",\"networkType\":\"\",\"appversion\":\"\",\"appName\":\"\",\"peerVersion\":\"2.5.1.0\",\"pcdnType\":\"6\",\"natType\":4,\"queryPeerNum\":0,\"uploadAvgSpeed\":31026,\"uploadMaxSpeed\":0,\"uploadLimitSpeed\":2097152,\"uploadtotalBytes\":597747830,\"uploadtime\":0,\"uploadMaxConnect\":0,\"connPeerNum\":0,\"validconnPeerNum\":0,\"domainName\":\"114.80.186.137\",\"logcode\":\"\",\"repTtfb\":0,\"repTime\":0,\"t4\":0,\"t5\":53977000,\"t6\":0,\"t7\":53977000,\"t8\":299,\"cacheUsedSize\":0,\"cacheRemainSize\":5632,\"cacheSetSize\":5632,\"systemValidSpace\":188468,\"isthirdStorage\":0,\"isdiskcanwrite\":0,\"cpuNum\":0,\"syscpuRate\":0,\"plugcpuRate\":0,\"sysMem\":0,\"restMem\":0,\"plugMem\":0,\"ioread\":0.0,\"iowrite\":0.0,\"await\":0.0,\"svctm\":0.0,\"util\":0.0,\"type\":\"peer\"}";new ReduceDriver<Text, Text, Text, Text>().withReducer(new OpenPeerMR.OpenPeerReducer()).withInput(new Text("401,10100101000100000004016db042cd0e204d028a3ef961ab216d92,2018-11-07_00"), Arrays.asList(new Text(content))).withMultiOutput("MOSText",new Text(content),new Text(content)).runTest();}*/@Testpublic void testMR() throws Exception{try{String content = "{\"peerType\":0,\"countryCode\":1,\"provinceCode\":16,\"ispCode\":1,\"ip\":\"61.171.51.200\",\"ipcountry\":\"中国\",\"ipprovince\":\"上海\",\"ipisp\":\"电信\",\"time\":1541523309467,\"date\":\"181107\",\"hour\":0,\"minute\":5509,\"submitTime\":1541523289720,\"token\":\"10100101000100000004016db042cd0e204d028a3ef961ab216d92\",\"deviceId\":\"2D15397E0E2CD4067FF185B5E2459706\",\"osName\":\"p\",\"osVersion\":\"\",\"deviceType\":\"\",\"cpuAbi\":\"\",\"networkType\":\"\",\"appversion\":\"\",\"appName\":\"\",\"peerVersion\":\"2.5.1.0\",\"pcdnType\":\"6\",\"natType\":4,\"queryPeerNum\":0,\"uploadAvgSpeed\":31026,\"uploadMaxSpeed\":0,\"uploadLimitSpeed\":2097152,\"uploadtotalBytes\":597747830,\"uploadtime\":0,\"uploadMaxConnect\":0,\"connPeerNum\":0,\"validconnPeerNum\":0,\"domainName\":\"114.80.186.137\",\"logcode\":\"\",\"repTtfb\":0,\"repTime\":0,\"t4\":0,\"t5\":53977000,\"t6\":0,\"t7\":53977000,\"t8\":299,\"cacheUsedSize\":0,\"cacheRemainSize\":5632,\"cacheSetSize\":5632,\"systemValidSpace\":188468,\"isthirdStorage\":0,\"isdiskcanwrite\":0,\"cpuNum\":0,\"syscpuRate\":0,\"plugcpuRate\":0,\"sysMem\":0,\"restMem\":0,\"plugMem\":0,\"ioread\":0.0,\"iowrite\":0.0,\"await\":0.0,\"svctm\":0.0,\"util\":0.0,\"type\":\"peer\"}";LongWritable key = new LongWritable(0);mapReduceDriver.withInput(key, new Text(content));mapReduceDriver.withMultiOutput("MOSText",new Text(content),new Text(content));mapReduceDriver.runTest();}catch(Exception ex){}}}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>pcdnas-pom</artifactId><groupId>com.**.pcdnas</groupId><version>0.0.1</version><relativePath>../pcdnas-pom/pom.xml</relativePath></parent><modelVersion>4.0.0</modelVersion><groupId>com.**.**</groupId><artifactId>pcdnas-mr</artifactId><properties><hadoop.version>2.6.1</hadoop.version><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop.version}</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>${hadoop.version}</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>${hadoop.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><!--单元测试 start --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.mrunit</groupId><artifactId>mrunit</artifactId><version>1.1.0</version><classifier>hadoop2</classifier><scope>test</scope></dependency><!--单元测试 end --></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4.1</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><!--<mainClass>com.**.**.mr.job.Driver</mainClass>--><mainClass>com.**.**.mr.job.OpenPeerDriver</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin></plugins></build>
</project>

参考:https://blog.csdn.net/xiaocaidexuexibiji/article/details/17471627 仍不能解决

注释部分 仍然没有解决 好心人支援下!!!

题外话

在搜索的过程中发现几个不错的maperduce文章:
使用hadoop multipleOutputs对输出结果进行不一样的组织:
https://www.cnblogs.com/yuhan-TB/p/3705665.html 
MR-2.输出格式(OutputFormat)Multiple outputs多目录输出:

https://blog.csdn.net/shenfuli/article/details/50589339

MapReduce处理输出多文件格式(MultipleOutputs)
https://blog.csdn.net/u010366796/article/details/44753071

MapReduce编程实战之“调试”和"调优"

https://blog.csdn.net/puma_dong/article/details/24120045

MapReduce单元测试(MRunit)相关推荐

  1. hadoop_单元测试Java Hadoop作业

    hadoop 在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在这篇文章中,我将展示如何将MapRedu ...

  2. java hadoop_单元测试Java Hadoop作业

    java hadoop 在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在这篇文章中,我将展示如何将Ma ...

  3. 单元测试Java Hadoop作业

    在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在本文中,我将展示如何将MapReduce单元测试添加到 ...

  4. 使用Spock框架进行单元测试

    阅读目录 2.1.1.单元测试是什么 2.1.2.单元测试的定位 2.2.1.单元测试的资料不够全 2.2.2.单元测试难以理解和维护 2.2.3.单元测试难以去除依赖 3.1.1.groovy 3. ...

  5. apache 基金会 project 概述

    ==================================================== Ambari 是一种基于Web的工具,支持Apache Hadoop集群的供应.管理和监控.A ...

  6. Hadoop和大数据技术精讲班

    尊敬的先生/女士: 思数于计算和大数据服务中心http://www.bihadoop.com,简称思数于(隶属亍北京思数科技有限公司),是国内与业大数据分析培训.咨询机构.中国于计算大数据处理委员会. ...

  7. 使用MRUnit,Mockito和PowerMock进行Hadoop MapReduce作业的单元测试

    0.preliminary 环境搭建 Setup development environment Download the latest version of MRUnit jar from Apac ...

  8. 【MapReduce】数据去重、多表查询、倒排索引、单元测试等案例编程

    数据去重.多表查询.倒排索引.单元测试等案例编程 1 数据去重 2 多表查询 2.1 笛卡尔积 2.2 等值连接 2.3 自连接 3 倒排索引 4 单元测试 手动反爬虫,禁止转载: 原博地址 http ...

  9. 对Mapreduce代码进行单元测试

    hadoop自带一个wordcount的示例代码,用于计算单词个数.我将其单独移出来,测试成功.源码如下: package org.apache.hadoop.examples; import jav ...

最新文章

  1. CentOS7在防火墙开启与关闭以及端口操作
  2. 助力AI腾飞,深度学习走向何方?
  3. jQuery兼容IE和Chrom浏览器-得到页面滚动条的坐标值
  4. C# Windows服务
  5. ios开发读取剪切板的内容_ios开发读取剪切板的内容_苹果隐私问题堪忧!多个iOS应用未经许可读取剪贴板......
  6. 51单片机简谱音乐3-音阶与频率表问题以及简谱小笔记
  7. .rpt文件内容读取java_python读取Excel,12代码将Excel内容写入txt文件
  8. Python + Face_recognition人脸识别之考勤统计
  9. npm list 报错 extraneous
  10. 【TCAX相关】TCC文件详细说明
  11. SDNU-ACM第一次月赛地大武汉选拔赛
  12. python基础学习笔记12:Python面向对象编程
  13. 《2022微隔离技术与安全用例研究报告》发布
  14. 辰视将携3D视觉技术及各领域解决方案参加华南工博会国际机器视觉展
  15. 微信小程序----学生信息注册篇
  16. 在线压缩转换文件的软件
  17. iot 开源平台thingsboard使用总结
  18. 【免费】中国省级行政单位ISO 3166-2对照表
  19. 数学辅助软件Geogebra工具介绍
  20. 2021杨雪洋高考成绩查询,十万火急!多省已开通2020高考成绩查询通道(附各省最新查询网址)...

热门文章

  1. python pyplot画图_matplotlib绘图——再谈axes和pyplot方法
  2. 人脸识别之人脸检测(一)--综述
  3. 解决Android studio安装下载Gradle速度慢的问题
  4. 手机OTG 我的世界_【新品教程】GP100安卓手机OTG功能详解
  5. C语言实现:三色球问题
  6. 搭建 本地数据接口 json-server
  7. 9.数电复刻 之 CMOS反相器+其他类型CMOS门电路
  8. 数电笔记之第三章门电路之cmos反相器动态特性:动态(导通功耗+负载功耗)和静态功耗
  9. WebRTC源码研究(1)WebRTC架构
  10. 想跳槽涨薪的必看!Java开发了解这些自然无惧面试,附面试题