Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629

Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927

Hadoop读书笔记(三)Java API操作HDFS:http://blog.csdn.net/caicongyang/article/details/41290955

Hadoop读书笔记(四)HDFS体系结构 :http://blog.csdn.net/caicongyang/article/details/41322649

Hadoop读书笔记(五)MapReduce统计单词demo:http://blog.csdn.net/caicongyang/article/details/41453579

Hadoop读书笔记(六)MapReduce自定义数据类型demo:http://blog.csdn.net/caicongyang/article/details/41490379

Hadoop读书笔记(七)MapReduce 0.x版本API使用demo:http://blog.csdn.net/caicongyang/article/details/41493325

0.demo说明

与上篇文章一样实现手机流量的统计,数据文件的数据格式相同...

1.代码改造

KpiApp.java

package cmd;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/*** * <p> * Title: KpiApp.java * Package mapReduce * </p>* <p>* Description: 统计流量  (打包jar命令行运行) :extends Configured implements Tool* <p>* @author Tom.Cai* @created 2014-11-25 下午10:23:33 * @version V1.0 **/
public class KpiApp extends Configured implements Tool{public static void main(String[] args) throws Exception {ToolRunner.run(new KpiApp(), args);}@Overridepublic int run(String[] arg0) throws Exception {String INPUT_PATH = arg0[0];String OUT_PATH = arg0[1];FileSystem fileSystem = FileSystem.get(new URI(INPUT_PATH), new Configuration());Path outPath = new Path(OUT_PATH);if (fileSystem.exists(outPath)) {fileSystem.delete(outPath, true);}Job job = new Job(new Configuration(), KpiApp.class.getSimpleName());FileInputFormat.setInputPaths(job, INPUT_PATH);job.setInputFormatClass(TextInputFormat.class);job.setMapperClass(KpiMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(KpiWite.class);job.setPartitionerClass(HashPartitioner.class);job.setNumReduceTasks(1);job.setReducerClass(KpiReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(KpiWite.class);FileOutputFormat.setOutputPath(job, new Path(OUT_PATH));job.setOutputFormatClass(TextOutputFormat.class);job.waitForCompletion(true);return 0;}static class KpiMapper extends Mapper<LongWritable, Text, Text, KpiWite> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] splited = value.toString().split("\t");String num = splited[1];KpiWite kpi = new KpiWite(splited[6], splited[7], splited[8], splited[9]);context.write(new Text(num), kpi);}}static class KpiReducer extends Reducer<Text, KpiWite, Text, KpiWite> {@Overrideprotected void reduce(Text key, Iterable<KpiWite> value, Context context) throws IOException, InterruptedException {long upPackNum = 0L;long downPackNum = 0L;long upPayLoad = 0L;long downPayLoad = 0L;for (KpiWite kpi : value) {upPackNum += kpi.upPackNum;downPackNum += kpi.downPackNum;upPayLoad += kpi.upPayLoad;downPayLoad += kpi.downPayLoad;}context.write(key, new KpiWite(String.valueOf(upPackNum), String.valueOf(downPackNum), String.valueOf(upPayLoad), String.valueOf(downPayLoad)));}}
}class KpiWite implements Writable {long upPackNum;long downPackNum;long upPayLoad;long downPayLoad;public KpiWite() {}public KpiWite(String upPackNum, String downPackNum, String upPayLoad, String downPayLoad) {this.upPackNum = Long.parseLong(upPackNum);this.downPackNum = Long.parseLong(downPackNum);this.upPayLoad = Long.parseLong(upPayLoad);this.downPayLoad = Long.parseLong(downPayLoad);}@Overridepublic void readFields(DataInput in) throws IOException {this.upPackNum = in.readLong();this.downPackNum = in.readLong();this.upPayLoad = in.readLong();this.downPayLoad = in.readLong();}@Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upPackNum);out.writeLong(downPackNum);out.writeLong(upPayLoad);out.writeLong(downPayLoad);}}

2.打成jar

通过Eclipse的Export将上述的类打成kpi.jar

将jar包上传到Linux下通过 hadoop jar xxx.jar [parameter] [parameter]命令执行即可

例如:hadoop jar kpi.jar hdfs://192.168.80.100:9000/wlan hdfs://192.168.80.100:9000/wlan_out

即将上篇的代码完成改造可以在命令行下运行!

欢迎大家一起讨论学习!

有用的自己收!

记录与分享,让你我共成长!欢迎查看我的其他博客;我的博客地址:http://blog.csdn.net/caicongyang

Hadoop读书笔记(八)MapReduce 打成jar包demo相关推荐

  1. Linux运行hadoop命令,将hadoop程序打成jar包,在linux下以命令行方式运行(例如单词计算程序)...

    自定义Mapper import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.ha ...

  2. Hadoop读书笔记(六)MapReduce自定义数据类型demo

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  3. TCPIP详解Protocol 读书笔记(八) Traceroute程序

    TCP/IP详解:Protocol 读书笔记(八) Chapter8 Traceroute程序 文章目录 TCP/IP详解:Protocol 读书笔记(八) Chapter8 Traceroute程序 ...

  4. 手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令

    手动将web项目的class文件打成jar包. 我们的项目在使用IDE进行编译后,在项目的target目录下将会生成class文件.我们可以将class文件打成jar包. 使用的到命令为: 在targ ...

  5. idea将项目打成jar包

    在用jmeter做压测时,需要将项目打成jar包放至在如下目录 /Users/admin/Documents/software/apache-jmeter-5.1.1/apache-jmeter-5. ...

  6. 打成jar包_keras, tensorflow模型部署通过jar包部署到spark环境攻略

    这是个我想干很久的事情了.之前研究tensorflow on spark, DL4j 都没有成功.所以这里首先讲一下我做这件事情的流程.模型的部署,首先你得有一个模型.这里假设你有了一个keras模型 ...

  7. Java如何读取JAR包外的properties文件及打成jar包后无法读取到jar包内的properties文件

    项目中,经常把一部分功能独立出来,做一个java  project,然后打成jar包供其他项目引用.这时候,如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采 ...

  8. SpringBoot打成jar包cmd中运行时修改配置文件的值

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 在上面 ...

  9. MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行

    场景 MobileIMSDK: https://gitee.com/jackjiang/MobileIMSDK MobileIMSDK是一套专为移动端开发的原创IM通信层框架 注: 博客: https ...

最新文章

  1. codeup:问题 D: 最短路径
  2. 【资源干货】超全!我常用的70个数据分析网址
  3. js 操作json对象增删改
  4. SQL like 模糊查询
  5. Hadoop的Python语言封装
  6. 在lnmp1.3布置的web服务器上运行thinkphp3.2.3项目pathinfo路径模式
  7. wxWidgets:wxDialUpManager类用法
  8. 【error】Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs.
  9. qopenglwidget 透明_廊坊透明真空袋用途-祺泰包装
  10. java工具类使用_Java工具类使用注意事项
  11. C语言学习笔记---结构体中的字符数组和字符指针
  12. 我的MVVM框架 v3教程——todos例子
  13. 覆盖索引与联合索引_MySQL:你知道什么是覆盖索引吗?
  14. 建立类成员函数与字符串的对应关系
  15. 网站分析基础概念之初访者
  16. 开发人员如何在面试中介绍自己的项目经历
  17. 干货!基于元消歧的偏多标记学习
  18. 错误:未报告的异常错误,必须对其进行捕获或声明以便抛出
  19. Python基础——零基础学Python
  20. 搭建基于 Vim 的 C++和 Python 开发环境[持续更新]

热门文章

  1. 智能优化算法-阿里巴巴和四十大盗算法Ali baba and the Forty Thieves algorithm(附Matlab代码)
  2. 一些常见BootLoader介绍
  3. 解决M1芯片 MAC 下 Goland(Intellij系列都适用) 无法 Debug 的问题
  4. 在斜坡上哪个物体滚的最快_教科版小学三年级科学下册第一单元第4课《物体在斜面上运动》教案...
  5. 怎么购买虚拟服务器账号,虚拟主机购买流程_购买的虚拟主机怎么开通
  6. c语言单片机实训心得体会,单片机实训心得体会_单片机实习感悟与收获
  7. loss 加权_CrossEntropyLoss类别权重问题
  8. 后序遍历的非递归算法python_后的解释|后的意思|汉典“后”字的基本解释
  9. python bottle框架分析_总结关于bottle框架注意点
  10. JS(受人以鱼 不如受人以渔)第十七课