MapReduce-day05-第三章框架原理-3.4OutputFormat机制

MapReduce-day01-第一章MapReduce概述 1:MapReduce定义 是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2:MapReduce优缺点 优点1:易于编程。用户只关心业务逻辑,实现框架的接口即可。 2:良好的扩展性。可以动态的增加服务器,解决计算资源不够的问题。 3:高容错性。任何一台机器挂掉,可以将任务转移到其他节点。 ... 阅读详情

1:默认输出格式TextOutputFormat

2:自定义OutputFormat

      2.1:应用场景:输出数据到mysql/hbase/elasticsearch等存储框架中

      2.2:自定义步骤

               2.2.1:自定义一个类继承FileOutputFormat

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

3:自定义OutputFormat案例

   

 4:代码编写

LogDriver:

package com.atguigu.mapreduce.outputformat;

import org.apache.hadoop.conf.Configuration;
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 LogDriver {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);
        job.setJarByClass(LogDriver.class);
        job.setMapperClass(LogMapper.class);
        job.setReducerClass (LogReducer.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(NullWritable.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);
//设置自定义的outputformat
        job.setOutputFormatClass(LogOutputFormat.class);
        FileInputFormat.setInputPaths(job, new Path("F:\\input\\inputoutputformat"));
// 虽然我们自定义了outputformat , 但是因为我们的outputformat 继承fileoutputformat
//而fileoutputformat 要输出一个_SUCCESS 文件,所以在这还得指定一个输出目录
        FileOutputFormat.setOutputPath(job, new Path("F:\\hadoop\\output111"));
        boolean b = job.waitForCompletion(true);
        System.exit(b ? 0 : 1);
    }

}

LogMapper

package com.atguigu.mapreduce.outputformat;

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 LogMapper extends Mapper<LongWritable, Text,Text, NullWritable> {

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        //不做任何处理
        context.write(value,NullWritable.get());
    }
}

LogReducer

package com.atguigu.mapreduce.outputformat;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class LogReducer extends Reducer<Text, NullWritable,Text,NullWritable> {

    @Override
    protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
        for (NullWritable value : values) {
            context.write(key,NullWritable.get());
        }
    }
}

LogOutputFormatc

package com.atguigu.mapreduce.outputformat;

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;

import java.io.IOException;

public class LogOutputFormat extends FileOutputFormat<Text, NullWritable> {
    @Override
    public RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext job) throws IOException, InterruptedException {

        LogRecordWriter lrw = new LogRecordWriter(job);

        return lrw;
    }
}

   LogRecordWriter

package com.atguigu.mapreduce.outputformat;

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 LogRecordWriter extends RecordWriter<Text, NullWritable> {

    private  FSDataOutputStream atguiguOut;
    private  FSDataOutputStream otherOut;

    public LogRecordWriter(TaskAttemptContext job) {
        //创建两条流
        try {
            FileSystem fs = FileSystem.get(job.getConfiguration());

            atguiguOut = fs.create(new Path("F:\\hadoop\\atguigu.log"));

            otherOut = fs.create(new Path("F:\\hadoop\\other.log"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void write(Text key, NullWritable value) throws IOException, InterruptedException {


        String log = key.toString();
        //具体写
        if (log.contains("atguigu")){
            atguiguOut.writeBytes(log+"\n");
        }else {
            otherOut.writeBytes(log+"\n");
        }
    }

    @Override
    public void close(TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException {

        //关流
        IOUtils.closeStream(atguiguOut);
        IOUtils.closeStream(otherOut);
    }
}

PCIe-4.2.3.2 Processing of Ordered Sets During Flit Mode Data Stream 动态门控检测(Gated Detection):绝不能在非预定时钟周期进行全时段 OS 匹配。这能节省大量动态功耗。并行容错比较器:必须实现 64-bit 宽的容错匹配器(5/8 表决),这对时序(Timing)要求较高,需要考虑多级流水线(Pipeline)设计。变长状态机(Variable Length FSM):SKP 子状态机必须具有Count_8B计数器,并且要有上限强退保护(Max Count = 6)。控制信号广播。 阅读详情

相关推荐

Workbench中直接调用ICEM CFD进行网格划分

自从ANSYS 12.0之后,ICEM CFD就从Workbench中被分离出去,作为一个独立的程序使用了。取而代之的是Meshing模块。 在Meshing的属性节点菜单中右键点击Mesh,选择Insert > Method,插入方法。 选择需要划分网格的几何体,点击apply。此时Geometry显示为1 Body。 设置Method为MultiZone,如果不设置成这个的话,找不到进入ICEM CFD的入口。如果要划分四面体,可以在Mapped Mesh Type中选择其他类型。

Yan的博客 6513

Yarn-day01-课程入门

一:课程介绍 1:理论 1.1:yarn的基础结构 1.2:yarn的工作机制 1.3:MapReduce/HDFS/Yarn 1.4:调度器和调度算法 1.4.1:FIFO 1.4.2:容量调度器 1.4....

AlphaG的博客 342

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下表格宽度为100%显示,并且列项未指定宽度情况下,剩余部分会平均分配宽度,本案例实际需求是由内容自动撑开显示。componentUpdated

觉醒法师的专栏 1万+

MapReduce-day03-第三章框架原理-3.1InputFormat数据输入

1:上图理解 1:Map阶段是在数据源通过InputFormat来设置通过什么样的一个方式来读取数据,比如之前的数据一行一行的方式读取,读取完之后交给Mapper,即用户编写的业务逻辑代码进行处理。 2:然后通过Shuffle把Mapper阶段的数据拉到Reducer阶段,此阶段可以对数据进行排序,分区,压缩,合并等功能。 3:Reducer处理完之后,通过OutputFormat可以对输出格式进行设置,比如设置把处理之后的数据写道HBase,数据库...

AlphaG的博客 336

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 383

DoDAF2.0与UAF1.0与UPDM与IBD与Rhapsody与MagicDraw与SysML

参考:fr=ge_alafr=ge_ala。

计算机辅助工程 1421

Hadoop-day01-课程入门

1:概念 1:Hadoop是什么 1:Hadoop是一个由apache基金会所开发的分布式系统基础架构。 2:主要解决:海量数据的存储和海量数据的分析计算问题。 2:Hadoop发展历史 3:Hadoop的三大发行版本 4:Hadoop的优势 1:高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出...

AlphaG的博客 328

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2887

HDFS-day02-第五章NN和2NN

思考:NN中的数据存放在什么位置: 如果是内存:那么计算快,但是可靠性差。如果是磁盘,可靠性好,但是计算慢。如果是内存+磁盘,由于内存计算快,然后持久到话磁盘,所以磁盘会拖慢整体效率,导致效率低下。 可以采用fsimage来存储磁盘中的数据,如果是随机读写,因为hdfs修改的效率比较低,所以不推荐。但是hdfs支持追加的方式进行读写(edits),edits文件只用来记录文件,不计算值,例如只记录a+10、a-30但是不计算等于多少。 内存中存储一部分数...

AlphaG的博客 323

MediaPipe 从入门到精通:安装、配置与多场景应用实战手册

人体姿态检测是 MediaPipe 的核心功能之一,它能够从图像或视频中识别人体姿态,并输出关键点的坐标。这些关键点覆盖了身体的主要部位,例如肩膀、肘部、髋部、膝盖等,总计 33 个点。每个关键点包含 x、y、z 坐标(归一化到 0-1 范围)以及可见性评分,可用于分析动作、姿势或开发健身、游戏等应用。手部关键点检测是 MediaPipe 的另一大亮点,它可以识别图像或视频中的手部,并输出 21 个关键点的坐标。这些关键点覆盖手掌和手指的各个部位,适用于手势识别、虚拟现实或交互式应用。

m0_71589036的博客 389

Allegro如何画Photoplot_Outline操作指导

在用Allegro进行PCB设计的时候,最后进行光绘输出前,Photoplot_Outline是必备一个图形,所有在Photoplot_Outline中的图形将被输出,Photoplot_Outline以外的图形都将不被输出。如何绘制Photoplot_Outline,具体操作如下。如何画Photoplot_Outline操作指导。

weixin_54787054的博客 2637

HDFS-day03-第六章DataNode

1:DataNode工作机制 1:首先,插上电的时候,DataNode会向NameNode汇报块信息,进行注册并记录块信息。 2:NameNode返回注册成功 3:因为可能DataNode的块在工作中可能会损坏,所以每周期会上报一次,默认是六小时,这个时间可以修改。这六个小时,是DataNode先检查一下自己所包含的块,然后再汇报。 4:为了保证DataNode节点正常允许,需要检测该节点的状态,就默认DataNode与NameNo...

AlphaG的博客 251

基于Simulink开发一个完整的直驱式永磁同步发电机DDPMSG仿真模型

需求分析直驱式永磁同步发电机(Direct-Drive Permanent Magnet Synchronous Generator, DDPMSG)广泛应用于风力发电、海洋能发电等可再生能源领域。与传统的齿轮箱驱动系统相比,DDPMSG具有结构简单、效率高、可靠性好等优点,能够直接将机械能转换为电能,减少了中间传动环节,降低了维护成本。本项目将基于Simulink平台,开发一个完整的DDPMSG仿真模型,模拟其在风力发电场景中的应用。我们将详细讲解如何设计和实现该系统,并结合实际应用案例进行说明。

MHD0815的博客 465

HDFS-day01-第一章

1:HDFS产出背景及定义 1:产生背景 需要一种系统来管理多台机器上的文件,HDFS只是分布式文件管理系统中的一种。 2:定义 分布式的文件系统。适用场景是适合一次写入,多次读出的场景。 2:HDFS优缺点 优点 1:高容错性 数据自动保存多个副本,它通过增加副本的形式,提高容错性。 第一个副本丢失...

AlphaG的博客 246

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HDFS-day02-第四章HDFS的读写流程

1:HDFS写入数据的流程(如何在客户端把数据写入到HDFS集群) 1:首先客户端向NameNode发送上传请求 2:NameNode检查客户端所传递的用户以及权限问题,还有是否存在等问题,如果均满足,则响应客户端可以上传问题 3:客户端请求上传地址,即上传第一个块的地址,返回指定的DataNode 这种副本存储节点的选择有如图上的三种节点,应该是负载均衡方面的考虑。 4:NameNode返回节点,表示采用这几个节点存储数据 ...

AlphaG的博客 240

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MapReduce-day05-第三章框架原理-3.5MapReduce内核机制

1:MapTask工作机制 1:Read 阶段:MapTask 通过InputFormat 获得的RecordReader,从输入InputSplit 中解析出一个个key/value。就是InputFormat阶段。 2:Map 阶段:该节点主要是将解析出的key/value 交给用户编写map()函数处理,并产生一系列新的key/value。就是用户自定义Mapper函数阶段。 3:Collect 收集阶段:在用户编写map()函数中,当数据处理完成后,一般会...

AlphaG的博客 237

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MapReduce-day04-第三章框架原理-3.3Shuffle机制

1:shuffle机制 shuffle是处于Map方法之后,Reduce方法之前的数据处理过程。 2:Partition分区 1:要求将统计结果按照条件输出到不同的文件中(分区)。将统计结果按照手机归属地不同省份输出到不同文件中(分区)。 2:默认的Partition分区 public class HashPartitioner<K, V> extends Partitioner<K, V> { public int getPar...

AlphaG的博客 232

HDFS-day01-第二章HDFS的Shell操作

1基本语法 Hadoop fs 具体命令 OR hdfs dfs 具体命令 两个是完全相同的 2:命令大全 $ bin/hadoop fs #通过上述命令可查看所有HDFS的命令 3:常用命令实操 1:准备工作 1:启动Hadoop集群 [atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh 2:-hel...

AlphaG的博客 225

HDFS-day02-第三章HDFS的API操作

第二章的HDFS的shell操作是在虚拟机上进行远程连接控制HDFS操控的。 第三章的API操作时在Windows环境下,用idea开发工具使用Java代码进行远程操控的。 1:把资料包的hadoop文件夹拷贝到一个没有中路路径的地方。 2:在系统变量里面新增环境变量 HADOOP_HOME D:\hadoop-3.1.0 3:然后配置path环境变量,新增以下内容 %HADOOP_HOME%\bin 4:创建mav...

AlphaG的博客 223

MapReduce-day05-第三章框架原理-3.6ReduceJoin机制

1:案例

AlphaG的博客 214

MapReduce-day05-第三章框架原理-3.6MapJoin机制

因为Map阶段文件量可能很大,如果都是放到Reducer阶段进行Join的话,可能会造成处理效率低下的现象。所以尽可能采用MapJoin,同时要注意缓存文件的问题。 package com.atguigu.mapreduce.mapjoin; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.NullWritable; import.

AlphaG的博客 205

MapReduce-day02-第二章Hadoop序列化

1:序列化概述 1:序列化就是内存中的对象转换成字节序列,反序列化就是字节序列转换成内存中的对象。 2:原因:因为把一个虚拟机的内存中的对象数据传给另一台虚拟机内存,没办法传。 3:不用Java的序列化原因: 因为Java的一个对象被序列化后,会覆盖很多额外的信息(各种校验信息、头、继承体系),不便于在网络中进行高效传输。 4:特点:结构紧凑,高效使用存储空间。快速,读写数据的额外开销小。互操作性:支持多语言的交互。加入Hadoop1...

AlphaG的博客 198

告别规则黑盒:基于JVS-Rules的风控规则治理实践——可视化决策编排+血缘追踪+版本快照

可读’——通过决策流图谱与业务语义节点,让非技术人员理解逻辑;‘可溯’——依赖规则版本快照与执行日志,实现任意交易的全链路回放;‘可担责’——基于血缘追踪与权限基线,清晰界定业务定义、技术实现、合规验证三方责任。这三者共同构成风控规则治理的三角支柱,将隐性经验转化为可版本化、可审计、可协同的组织级数字资产。

weixin_42054392的博客 427

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 302

git checkout 与 git switch 的区别

git checkout 与 git switch 的区别

choumin的专栏 197

如何“无视“模型的上下文长度

本文阐述了在有限上下文窗口下实现“无限”对话体验的五层机制:分层窗口管理(保留近期对话、摘要早期内容)、跨会话记忆结构化存储与定期整理、按需加载技能目录、子代理隔离处理长任务、检索代替记忆。核心原则为“压流水不压事实”“检索即拉取”“写少读准”,通过压缩、迁移、按需注入与审计日志,实现高效、可追溯、低污染的长程交互。

m0_63486540的博客 363
上一篇: 关于出现hadoop102拒绝连接
下一篇: MapReduce-day05-第三章框架原理-3.5MapReduce内核机制
总会有天明
博客等级 码龄9年 95粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总会有天明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值