当前位置: 首页 > news >正文

Hive的 mapreduce 计算例子

Hive的计算例子

一、计算任务

>数据源:手机号,上行流量,下行流量

>运算过程统计每个手机号的上行流量总和,下行流量的总和,流量总和

>运算结果:手机号->上行流量和,下行流量和,总和

二、代码实现

1:Master

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.Job;


public class FlowMaster{
    public static void main(String[] args) throws Exception{
        //初始化配置
        Configuration cconfiguration = new Configuration();
        //初始化job
        Job job = Job.getInstance(cconfiguration);
        //设置相关class
        job.setJarByClass(FlowMaster.class);
        job.setMapperClass(FlowMapper.class);
        job.setReducerClass(FlowReducer.class);
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(Flow.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(Flow.class);
    //设置数据读入路径
    FileInputFormat.setInputPaths(job,new Path("hdfs://teach01:8020/input/dataflow.log"));
    //设置结果输出路径
    FileOutputFormat.setOutputPaths(job,new Path("hdfs://teach01:8020/output/flowCount"));
    //提交job
    boolean result = job.waitForCompletion(true);
    if(result){
        system.out.println("成功");
    }
    }
}

2:Mapper

import org.apache.hadoop.mapreduce.Mapper;

public class FlowMapper extends Mapper<LongWritable,Text,Text,Flow>{
    @Override
    protected void map(LongWritable key,Text value,Mapper<LongWritable,Text,Text,Flow>.Context context) throws IOException,InterruptedException{
        //获得当前行数据
        String line = value.toString();
        //逗号分隔
        String[] fields = line.split(",");
        //手机号
        String phoneNumber = fields[0];
        //上行流量
        long upFlow = Long.parseLong(fields[1]);
        //下行流量
        long downFlow = Long.parseLong(fields[2]);
        context.write(newText(phoneNumber),newFlow(upFlow,downFlow))
    }
}

3:Reducer

import org.apache.hadoop.mapreduce.Reducer;


public class FlowReducer extends Reducer<Text,Flow,Text,Flow>{
    @Override
    protected void reduce(Text key,Iterable<Flow> values,Reducer<Text,Flow,Text,Flow>.Context context) throws IOException,InterruptedException{
        long upFlow = 0;
        long downFlow = 0;
        //迭代计算求和
        for(Flow flow:values){
            upFlow += flow.getUpFlow();
            downFlow += flow.getDownFlow();
        }
        //实例化过程中计算总和
        Flow flow = new Flow(upFlow,downFlow);
        context.write(key,flow);
    }
}

4:封装实体类Flow

import org.apache.hadoop.id.Writables;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class Flow implements Writables
{
    public Flow(){}
    public Flow(long upFlow,long downFlow){
        super();
        this.upFlow = upFlow;
        this.downFlow = downFlow;
        this.sumFlow = upFlow+downFlow;
    }
    private long upFlow;
    private long downFlow;
    private long sumFlow;
    

    //getter,setter方法省略
    。。。。。。
    //toString方法省略
    。。。。。。
    
    @Override
    public void readFields(DataInput input) thows IOException{
        upFlow = input.readLong();
        downFlow = input.readLong();
        sumFlow = input.readLong();
    }
    @Override
    public void wirte(DataOutput output) thows IOException{
        output.writeLong(upFlow);
        output.writeLong(downFlow);
        output.writeLong(sumFlow);
    }
}

5:把NativeIO.java复制过来

修改609行为true

6:复制log4j.properties过来

7:在hdfs中创建目录

    hdfs dfs -mkdir /input

    hdfs dfs -mkdir /output

    hdfs dfs -put dataflow.log /input

相关文章:

  • 代码演示傅里叶合成演示
  • 【实用工具】magic-api接口快速开发框架
  • 在线客服功能介绍-了解常见在线客服系统的功能点
  • 基于安卓/Android/微信小程序的学生作业管理系统
  • 数据库读写分离和分库分表
  • 长江中下游先民最早驯化野生稻 国稻种芯:全球35亿人口主食
  • 数字逻辑设计(4)
  • Netty笔记
  • 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十五)
  • 【毕业设计】基于机器学习的跌倒检测系统 - 图像识别
  • paddlepaddle
  • 视频怎么转音频?推荐使用这几种方法
  • 欧洲玩具EN 71-3:2019的安全性某些元素的迁移
  • 【学习教程】遥感数据与DSSAT作物生长模型同化及在作物长势监测与估产中的应用
  • 海量机器类通信场景终端安全问题研究
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android单元测试 - 几个重要问题
  • django开发-定时任务的使用
  • eclipse的离线汉化
  • Effective Java 笔记(一)
  • JAVA SE 6 GC调优笔记
  • JavaScript学习总结——原型
  • PaddlePaddle-GitHub的正确打开姿势
  • Protobuf3语言指南
  • 动态规划入门(以爬楼梯为例)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前嗅ForeSpider中数据浏览界面介绍
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 自制字幕遮挡器
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #NOIP 2014# day.2 T2 寻找道路
  • (HAL库版)freeRTOS移植STMF103
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (windows2012共享文件夹和防火墙设置
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)换源+apt-get基础配置+搜狗拼音
  • (五)c52学习之旅-静态数码管
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • ./configure,make,make install的作用
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net 代码性能 - (1)
  • .net 调用php,php 调用.net com组件 --
  • .NET 发展历程
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET正则基础之——正则委托
  • .NET中的Exception处理(C#)