位置: 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)(关于猿猴的作文)

  • 抖音关注上限是多少(抖音关注上限是5000还是1万)

    抖音关注上限是多少(抖音关注上限是5000还是1万)

  • 微信最近封号为什么这么严重(最近几天微信封号)

    微信最近封号为什么这么严重(最近几天微信封号)

  • 支付宝数据如何迁移到新手机(支付宝数据如何迁移到苹果手机)

    支付宝数据如何迁移到新手机(支付宝数据如何迁移到苹果手机)

  • 钉钉会强制打开摄像头吗(钉钉会强制打开网页吗)

    钉钉会强制打开摄像头吗(钉钉会强制打开网页吗)

  • 小米手机换卡激活不了(小米手机换卡激活失败)

    小米手机换卡激活不了(小米手机换卡激活失败)

  • 为什么手机屏幕有暗影(为什么手机屏幕会触控失灵)

    为什么手机屏幕有暗影(为什么手机屏幕会触控失灵)

  • 打印机没网可以打印吗(打印机没网可以用吗)

    打印机没网可以打印吗(打印机没网可以用吗)

  • 微信的红包封面怎么弄(微信的红包封面图片序列号)

    微信的红包封面怎么弄(微信的红包封面图片序列号)

  • 为什么淘宝待收货不显示数量(为什么淘宝待收货数量比实际购买多)

    为什么淘宝待收货不显示数量(为什么淘宝待收货数量比实际购买多)

  • qq繁体字怎么设置(qq里怎么设置繁体字)

    qq繁体字怎么设置(qq里怎么设置繁体字)

  • 华为屏保图片怎么关闭(华为屏保图片怎么截图)

    华为屏保图片怎么关闭(华为屏保图片怎么截图)

  • 饿了么怎么异地叫外卖(饿了么怎么异地给别人订外卖)

    饿了么怎么异地叫外卖(饿了么怎么异地给别人订外卖)

  • 热敏打印机需要加墨吗(热敏打印机需要墨水吗)

    热敏打印机需要加墨吗(热敏打印机需要墨水吗)

  • 一加7T怎么切换虚拟按键位置(一加7pro怎么切换用户)

    一加7T怎么切换虚拟按键位置(一加7pro怎么切换用户)

  • 爱奇艺怎么把观看历史删除(爱奇艺怎么把观看历史关闭)

    爱奇艺怎么把观看历史删除(爱奇艺怎么把观看历史关闭)

  • 12306的用户名可以修改吗(12306用户名可以是汉字吗)

    12306的用户名可以修改吗(12306用户名可以是汉字吗)

  • 滴滴手机号码怎么改以前的不用了(滴滴手机号码怎么注销)

    滴滴手机号码怎么改以前的不用了(滴滴手机号码怎么注销)

  • 淘宝账期保障有必要开通吗(淘宝账期保障影响权重吗)

    淘宝账期保障有必要开通吗(淘宝账期保障影响权重吗)

  • 荣耀20有方舟编译器吗(荣耀20有方舟编号吗)

    荣耀20有方舟编译器吗(荣耀20有方舟编号吗)

  • 手机过安检会受损吗(手机过安检会受什么处罚)

    手机过安检会受损吗(手机过安检会受什么处罚)

  • 华为p30pro功能介绍(华为p30pro手机功能介绍视频)

    华为p30pro功能介绍(华为p30pro手机功能介绍视频)

  • 发朋友圈不想让一部分人看到怎么发(发朋友圈不想让所有人看到)

    发朋友圈不想让一部分人看到怎么发(发朋友圈不想让所有人看到)

  • 微博会员自动续费怎么取消(微博会员自动续费怎么取消支付宝)

    微博会员自动续费怎么取消(微博会员自动续费怎么取消支付宝)

  • 【Redis】关于Redis数据结构简单动态字符串(SDS)的一些杂记(redis相关)

    【Redis】关于Redis数据结构简单动态字符串(SDS)的一些杂记(redis相关)

  • initctl命令  管理init守护进程(init 6命令)

    initctl命令 管理init守护进程(init 6命令)

  • 没有签订劳动合同可以直接离职吗
  • 税务局开票需要交钱吗
  • 行政单位要不要税号
  • 营利性幼儿园怎样登记
  • 固定资产折旧直接计入成本
  • 公司零星支出没有发票收据怎么开
  • 企业亏损结转年限举例说明
  • 企业向个人借款是否合法
  • 递延所得税转回的会计分录
  • 个人所得税怎么交
  • 社保局的员工是公务员吗
  • 发票右上角数字是什么
  • 营业收入包括其收入吗
  • 小规模纳税人季度申报表怎么填
  • 电子税务局社保申报截止日期每月
  • 企业所得税减免政策2023
  • 建筑行业暂估成本的会计分录怎么写
  • 建筑企业存款账户
  • 增值税专用发票怎么开
  • win10专业版版本号2009
  • 经费开支原则是什么
  • 详谈php编码转换过程
  • 重建索引命令
  • win11系统如何
  • koc文件用什么软件打开
  • win7打开启动
  • 企业代扣代缴个人所得税会计分录
  • 网络层IP协议的配套协议有哪些
  • 免费镜像翻转软件
  • php序列化和反序列化函数
  • vscode+cmake
  • 数字图像处理实验一实验报告
  • 大学生web前端期刊有哪些
  • 金融机构贷款准备金
  • 制造费用的主要内容
  • 为什么开发票能抵税
  • 分享帝国cms选取什么
  • 未使用固定资产有哪些
  • 基础电信服务和增值电信服务税率
  • 支付水费委托收款
  • 实物投资入股
  • sqlserver分页查询越到最后越慢
  • 软件属于哪种无形资产
  • 增值税纳税申报类型有哪些
  • 盈利能力还有什么能力
  • 话费报销属于什么费用
  • 零售金银首饰是否缴纳消费税
  • 小规模纳税人缴纳本月未交增值税
  • 年度所得税费用
  • 房租费用计入什么现金流量
  • 收到银行的贷款怎么做会计分录
  • 确认应付职工薪酬如何计算
  • 职工医保报销会扣医保卡的钱吗
  • 怎么查企业适用的会计准则
  • 存货期末成本的计量
  • 篮球俱乐部归什么部门管理
  • 怎么验证触发器的执行
  • win8系统升级到win 10
  • 如何配置samba配置文件
  • xp系统咋样
  • xp 桌面图标
  • 简述linux的系统结构
  • win8启动设置选哪个
  • win7微软账户
  • cocos做游戏
  • glht函数
  • 入门级啥意思
  • cocos2dx官方教程
  • shell脚本运行linux命令
  • node.js+express
  • shell脚本自动化
  • 手把手教怎么说
  • js domcontentloaded
  • adb push、adb install 和强制安装
  • bootstrap-treeview自定义双击事件实现方法
  • 报税时一直显示申报中
  • 广西地方税务局2017年公务员拟录用
  • 北京第三税务所咨询电话
  • 各国进口汽车综合税率表
  • 武汉 工资 税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设