位置: IT常识 - 正文

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出(大数据相关框架)

编辑:rootadmin
大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出 3.6.1OutputFormat接口实现类

推荐整理分享大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出(大数据相关框架),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:大数据框架结构,大数据技术框架有哪些,大数据处理框架,大数据整合的框架,大数据 框架,大数据 框架,大数据框架基础教程,大数据框架基础教程,内容如对您有帮助,希望把文章链接给更多的朋友!

OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。下面我们介绍几种常见的OutputFormat实现类。

1、文本输出TextOutputFormat

默认的输出格式是TextOutputFormat,它把每条记录写为文本行。它的键和值可以是任意类型,疑问TextOutputFormat调用toString()方法把他们转换为字符串。

2、SequenceFileOutputFormat

将SequenceFileOutputFormat输出作为后续MapReduce任务的输入,这便是一种好的输出格式,因为它的格式紧凑,很容易被压缩。

3、自定义OutputFormat

根据用户需求,自定义实现输出。

3.6.2自定义OutputFormat

1、使用场景

为了实现控制最终文件的输出路径和输出格式,可以自定义OutputFormat。

例如:要在一个MapReduce程序中根据数据的不同输出两类结果到不同的目录,这类灵活的输出需求可以通过自定义OutputFormat来实现。

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出(大数据相关框架)

2、自定义OUtputFormat步骤

(1)自定义一个类继承FileOutputFormat。

(2)改写RecordWriter,具体改写输出数据的方法write()。

3.6.3自定义OutputFormat案例实操

1、需求

过滤输入的log日志,包含atguigu的网站输出到e:/atguigu.log,不包含atguigu的网站输出到e:/other.log。

(1)输入数据

http://www.baidu.comhttp://www.google.comhttp://cn.bing.comhttp://www.atguigu.comhttp://www.sohu.comhttp://www.sina.comhttp://www.sin2a.comhttp://www.sin2desa.comhttp://www.sindsafa.com

(2)期望输出数据

http://www.atguigu.comhttp://cn.bing.comhttp://www.baidu.comhttp://www.google.comhttp://www.sin2a.comhttp://www.sin2desa.comhttp://www.sina.comhttp://www.sindsafa.comhttp://www.sohu.com

2、需求分析

3、案例实操

(1)编写FilterMapper类

package com.cuiyf41.output;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class FilterMapper extends Mapper<LongWritable, Text, Text, NullWritable> { @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, NullWritable>.Context context) throws IOException, InterruptedException { // 写出 context.write(value, NullWritable.get()); }}

(2)编写FilterReducer类

package com.cuiyf41.output;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class FilterReducer extends Reducer<Text, NullWritable, Text, NullWritable> { Text k = new Text(); @Override protected void reduce(Text key, Iterable<NullWritable> values, Reducer<Text, NullWritable, Text, NullWritable>.Context context) throws IOException, InterruptedException { // 1 获取一行 String line = key.toString(); // 2 拼接 line = line + "\r\n"; // 3 设置key k.set(line); // 4 输出 context.write(k, NullWritable.get()); }}

(3)自定义一个OutputFormat类

package com.atguigu.mapreduce.outputformat;import java.io.IOException;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.RecordWriter;import org.apache.hadoop.mapreduce.TaskAttemptContext;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class FilterOutputFormat extends FileOutputFormat<Text, NullWritable>{@Overridepublic RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext job)throws IOException, InterruptedException {// 创建一个RecordWriterreturn new FilterRecordWriter(job);}}

(4)编写RecordWriter类

package com.cuiyf41.output;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IOUtils;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.RecordWriter;import org.apache.hadoop.mapreduce.TaskAttemptContext;import java.io.IOException;public class FilterRecordWriter extends RecordWriter<Text, NullWritable> { FSDataOutputStream atguiguOut = null; FSDataOutputStream otherOut = null; public FilterRecordWriter(TaskAttemptContext job) { // 1 获取文件系统 FileSystem fs; try { fs = FileSystem.get(job.getConfiguration()); // 2 创建输出文件路径 Path atguiguPath = new Path("e:/atguigu.log"); Path otherPath = new Path("e:/other.log"); // 3 创建输出流 atguiguOut = fs.create(atguiguPath); otherOut = fs.create(otherPath); } catch (IOException e) { e.printStackTrace(); } } @Override public void write(Text key, NullWritable value) throws IOException, InterruptedException { // 判断是否包含“atguigu”输出到不同文件 if (key.toString().contains("atguigu")) { atguiguOut.write(key.toString().getBytes()); } else { otherOut.write(key.toString().getBytes()); } } @Override public void close(TaskAttemptContext context) throws IOException, InterruptedException { // 关闭资源 IOUtils.closeStream(atguiguOut); IOUtils.closeStream(otherOut); }}

(5)编写FilterDriver类

package com.cuiyf41.output;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class FilterDriver { public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { // 输入输出路径需要根据自己电脑上实际的输入输出路径设置 args = new String[] { "e:/input/log.txt", "e:/output2" }; Configuration conf = new Configuration(); Job job = Job.getInstance(conf); job.setJarByClass(FilterDriver.class); job.setMapperClass(FilterMapper.class); job.setReducerClass(FilterReducer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(NullWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(NullWritable.class); // 要将自定义的输出格式组件设置到job中 job.setOutputFormatClass(FilterOutputFormat.class); Path input = new Path(args[0]); Path output = new Path(args[1]); // 如果输出路径存在,则进行删除 FileSystem fs = FileSystem.get(conf); if (fs.exists(output)) { fs.delete(output,true); } FileInputFormat.setInputPaths(job, input); // 虽然我们自定义了outputformat,但是因为我们的outputformat继承自fileoutputformat // 而fileoutputformat要输出一个_SUCCESS文件,所以,在这还得指定一个输出目录 FileOutputFormat.setOutputPath(job, output); boolean result = job.waitForCompletion(true); System.exit(result ? 0 : 1); }}
本文链接地址:https://www.jiuchutong.com/zhishi/299790.html 转载请保留说明!

上一篇:谷歌研究员走火入魔事件曝光:认为AI已具备人格,被罚带薪休假,聊天记录让网友San值狂掉...(谷歌研究院)

下一篇:猿创征文|【React 三】组件实例的三大属性(state、props、refs)(关于猿猴的作文)

  • ios14支持机型(ios14支持机型iPad)

    ios14支持机型(ios14支持机型iPad)

  • 神舟笔记本开机黑屏(神舟笔记本开机启动选项)

    神舟笔记本开机黑屏(神舟笔记本开机启动选项)

  • 咸鱼里面的曝光是什么意思(咸鱼里面曝光啥意思)

    咸鱼里面的曝光是什么意思(咸鱼里面曝光啥意思)

  • 滴滴注销后多久可以重新注册(滴滴注销后多久可以重新注册同样的手机号)

    滴滴注销后多久可以重新注册(滴滴注销后多久可以重新注册同样的手机号)

  • 抖音加公会和不加公会区别(抖音加公会和不加公会哪个赚钱多)

    抖音加公会和不加公会区别(抖音加公会和不加公会哪个赚钱多)

  • 苹果x触屏失灵乱跳原因(苹果x触屏失灵怎么重启手机)

    苹果x触屏失灵乱跳原因(苹果x触屏失灵怎么重启手机)

  • 华为畅聊通话有什么用(华为畅聊通话有通话记录吗)

    华为畅聊通话有什么用(华为畅聊通话有通话记录吗)

  • 苹果充电发热严重(苹果充电 发烫)

    苹果充电发热严重(苹果充电 发烫)

  • 单删对方还有聊天记录吗(单方面删除好友,对方聊天记录还在吗)

    单删对方还有聊天记录吗(单方面删除好友,对方聊天记录还在吗)

  • 未上传白底图是什么意思(上传白底图是什么意思)

    未上传白底图是什么意思(上传白底图是什么意思)

  • 小米手机信号差是手机问题还是卡的问题(小米手机信号差你只是没打开这个选项)

    小米手机信号差是手机问题还是卡的问题(小米手机信号差你只是没打开这个选项)

  • 苹果无线耳机二代触摸技巧(苹果无线耳机二代)

    苹果无线耳机二代触摸技巧(苹果无线耳机二代)

  • 抖音密码忘了手机号换了(抖音密码忘了手机号不用了怎么重新登陆)

    抖音密码忘了手机号换了(抖音密码忘了手机号不用了怎么重新登陆)

  • 拼多多怎么免拼直接成团(拼多多怎么免拼单发货)

    拼多多怎么免拼直接成团(拼多多怎么免拼单发货)

  • 相机iso一般调多少(相机iso怎么调才好看)

    相机iso一般调多少(相机iso怎么调才好看)

  • qq衣领图标是什么(qq领带图标是什么意思)

    qq衣领图标是什么(qq领带图标是什么意思)

  • 考驾照手机号被占用怎么办(考驾照电话号码被注册了怎么办)

    考驾照手机号被占用怎么办(考驾照电话号码被注册了怎么办)

  • win7如何快速分屏(win7如何分屏快捷键)

    win7如何快速分屏(win7如何分屏快捷键)

  • cad中正多边形的画法(cad中正多边形的快捷键命令)

    cad中正多边形的画法(cad中正多边形的快捷键命令)

  • 拼多多怎么清空收藏(拼多多怎么清空购买记录)

    拼多多怎么清空收藏(拼多多怎么清空购买记录)

  • 怎么让自己的电脑断网?(怎么让自己的电脑有网吧认证)

    怎么让自己的电脑断网?(怎么让自己的电脑有网吧认证)

  • 联想ThinkPad L380 笔记本Windows10系统改Windows7系统的(联想thinkpad l380yoga)

    联想ThinkPad L380 笔记本Windows10系统改Windows7系统的(联想thinkpad l380yoga)

  • Node16.xx 解压版安装(nodejs解压)

    Node16.xx 解压版安装(nodejs解压)

  • 斑鹿,滕波尔国家公园,印度 (© Ondrej Prosicky/Shutterstock)

    斑鹿,滕波尔国家公园,印度 (© Ondrej Prosicky/Shutterstock)

  • JAVA(java是什么意思)

    JAVA(java是什么意思)

  • 扶贫入股分红能领多久
  • 劳务分包人是实际施工人吗
  • 坏账准备应计入
  • 购买车辆交纳的费用
  • 应发工资和实发工资计算公式excel
  • 企业所得税税前扣除凭证管理办法
  • 发票没作废写上作废了怎么办
  • 个体工商户化妆品经营范围
  • 增值税的核算方式
  • 员工补偿金扣税
  • 分公司与总公司承担责任的法律规定
  • 商业保险可以税前扣除多少
  • 预缴税多交了,税务局退吗
  • 迁出注销类别怎么写
  • 政府补贴物业公司
  • 建筑企业怎么缴纳社保
  • 为什么win10系统更新不了
  • windows11家庭版本地策略组
  • 本期已缴税额不能大于本期应纳税额
  • 购买固定资产算投资吗
  • 股票股利和现金股利的共同点
  • 进口设备和备件有哪些
  • 多交的所得税退回来账务处理
  • php 代码生成
  • 亚士顿森林薄雾日出,英国东萨塞克斯郡 (© Tim Stocker Photography/Getty Images)
  • 大溪地海岛在什么地方
  • php浮点数
  • 报销加油票怎么开票
  • php分类信息
  • 允许加计扣除的委托境外研发费用
  • yolov5改进点
  • 前端 自动化脚本 怎么写
  • modulenotfounderror
  • 微擎框架破解版v2.7.7
  • 【Discuz】实现主题标题和正文同时显示
  • 减资的程序
  • 公司购买黄金计入什么科目
  • 扣税免除项
  • sqlserver修改值
  • 商品售后回购分录
  • 出口汽车配件怎么报关
  • 免税企业税金及附加计算
  • 事业单位小规模纳税人增值税账务处理
  • 长期待摊费用待抵扣税金
  • 建筑施工企业质量管理规范
  • 个体工商户要进行汇算清缴吗
  • 非公司股东可以分红吗
  • 每个月房租
  • 银企对账如何操作
  • 个税租房抵扣细则
  • 对公账户是不是哪个银行都可以
  • 去年的物业费今年收到了可以确认收入吗
  • 销项税小于进项税怎么结转
  • 流动比率多少合理
  • sqlserver自动更新工资
  • VirtualBox虚拟机中文免费
  • ubuntu 10.04安装
  • winxp系统用户不见了
  • ie9收藏夹
  • 强制升级win11后果
  • win7系统怎么修改开机密码
  • win7系统如何给文件夹加密
  • Javascript selection的兼容性写法介绍
  • viewpager2+fragment
  • 月经其间可以吃消摇丸吗
  • unity中canvas怎么调框大小
  • 用于登录
  • node.js 环境配置
  • javascript的dom
  • java arraysort
  • 如何解决android兼容问题
  • 一个绿色
  • js创建一个对象,里面有属性和方法
  • 一起学下载软件
  • jquery插件库怎么导入
  • javascript中Date format(js日期格式化)方法小结
  • 重庆国家税务电子税务局官网登录
  • 外购已税小汽车用于连续生产小汽车为啥可以抵扣
  • 大同县税务局
  • 公司忘记报税了怎么补
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设