自定义InputFormat

HIVE 处理日志,自定义inputformat 完整版 网上找了很多材料都是写了部份代码的,今天在峰哥的帮助下实现了此功能。 为何要设置此功能是由于 hive fields terminated by '||||' 不支持 字符串导致 将你的inputformat类打成jar包,如MyInputFormat.jar 将MyInputFormat.jar放到 hive/lib里,然后就可以建表了 假设你的inputFormat类路 阅读详情
package com.cn.demo_xwjhb;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import java.io.IOException;

public class MyInputFormat extends FileInputFormat<NullWritable, BytesWritable> {
    /**
     * 目的:实现小文件的合并,合并成一个二进制文件
     * 返回值代表文件是否分割,因为要合并小文件,不分割
     */
    @Override
    protected boolean isSplitable(JobContext context, Path filename) {
        return false;
    }

    /**
     * 读取的时候主要使用此程序,需要返回重写的RecordReader
     * @param inputSplit    切片
     * @param taskAttemptContext     上下文
     * @return
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    public RecordReader<NullWritable, BytesWritable> createRecordReader(InputSplit inputSplit, TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException {
        MyRecordReader reader = new MyRecordReader();
        reader.initialize(inputSplit,taskAttemptContext);
        return reader;
    }
}



package com.cn.demo_xwjhb;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;

public class MyRecordReader extends RecordReader<NullWritable, BytesWritable> {
    private FileSplit fileSplit;
    private Configuration configuration;
    private BytesWritable value = new BytesWritable();
    private boolean processed = false;



    /**
     * RecordReader的核心工作逻辑:
     *              通过nextKeyValue()方法去读取数据构造将返回的key   value,主要重写这个方法的逻辑
     *   通过getCurrentKey 和 getCurrentValue来返回上面构造好的key和value
     *
     */
    @Override
    public void initialize(InputSplit inputSplit, TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException {
        this.fileSplit = (FileSplit) inputSplit;
        this.configuration = taskAttemptContext.getConfiguration();
    }

    /**
     * 获取K1 V1的逻辑
     * 定义一个数组,长度必须能够放下一整个切片
     * 利用IOUtils工具类的readFully   传入FSDataInputStream流   读入数据
     * 结束后关闭流
     * @return
     * @throws IOException
     */
    @Override
    public boolean nextKeyValue() throws IOException {
        if(!processed){
            byte[] contents = new byte[(int) fileSplit.getLength()];
            Path file = fileSplit.getPath();
            FileSystem fs = file.getFileSystem(configuration);
            FSDataInputStream in = null;

            try {
                in = fs.open(file);
                //IOUtils有两个,保持统一去使用即可
                IOUtils.readFully(in,contents,0,contents.length);
                value.set(contents,0,contents.length);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                IOUtils.closeStream(in);
            }
            processed = true;
            return true;
        }
        return false;
    }

    /**
     * 返回k1
     */
    @Override
    public NullWritable getCurrentKey() throws IOException, InterruptedException {
        return NullWritable.get();
    }

    /**
     * 返回V1
     */
    @Override
    public BytesWritable getCurrentValue() throws IOException, InterruptedException {
        return value;
    }

    /**
     * 获取文件进度的东西,没什么用
     */
    @Override
    public float getProgress() throws IOException, InterruptedException {
        return processed?1.0f:0.0f;
    }

    @Override
    public void close() throws IOException {

    }
}

---------------------------------主程序二进制文件输出-------------------------

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(BytesWritable.class);

job.setOutputFormatClass(SequenceFileOutputFormat.class);
SequenceFileOutputFormat.setOutputPath(job,new Path("file:///D:\\dsj\\baishi课件\\hadoop\\5、大数据离线第五天\\5、大数据离线第五天\\自定义inputformat_小文件合并\\output"));
自定义MapReduce的InputFormat 自定义MapReduce的InputFormat,实现提取指定开始与结束限定符的内容。 立即下载

相关推荐

记录汇川:自由口通信-梯形图

最常见的就是MODBUS通信协议,指令主要通过RS232和RS485端口进行报文发送,所以通信报文格式可以选择MODBUS RTU通信格式或MODBUS ASCII通信格式。255---Y10-Y17:ON(1111 1111)指令进行报文的发送与接收,但是报文内部的数据格式不是由主站PLC决定, 而是由。修改从站一个保持寄存器数据。修改从站多个保持寄存器数据。读取从站的输出信号状态。读取从站的输入信号状态。读取从站保持寄存器数据。读取从站输入寄存器数据。

m0_61837027的博客 4913

自定义InputFormat和OutputFormat案例

一、自定义InputFormat   InputFormat是输入流,在前面的例子中使用的是文件输入输出流FileInputFormat和FileOutputFormat,而FileInputFormat和FileOutputFormat它们默认使用的是继承它们的子类TextInputFormat和TextOutputFormat,以Text的方式去读取数据。   当我们遇到许多小文...

SHZHJ2000的博客 324

亿图图示(edrawmax中文版) v10.1.7pjb

edrawmax中文名叫做亿图图示,是一款非常棒的综合图形图表设计软件,既能实现流程图、架构图、工程图、思维导图等数百种专业领域图形图表的绘制,又能提供一个白板进行头脑风暴和任意编排,轻松实现数据和创意的可视化呈现。软件支持Windows、Mac、Linux及网络版,一端创作,多端同步,从而为跨端办公绘图提供新的解决方案,还兼容常用文档类的办公软件格式,包括图片、Office、PDF、Visio、Html、SVG等,尽可能的在文件格式这块满足用户多方面需求。软件支持创建260多种图表类型,拥有超过12500

qq_43293214的博客 1万+

自定义InputFormat、自定义OutputFormat

1.自定义inputFormat合并小文件 需求 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案,将多个小文件合并成一个文件 SequenceFile.SequenceFile 里面存储着多个文件。存储的形式为文件名称为 key,文件内容为 value。 分析 小文件的优化无非以下几种方式: 在数据采集的时候...

依旧的博客 4003

告别反复格式化!用Ventoy制作2025年终极启动盘,Windows/Linux/macOS一网打尽

本文详细介绍了如何使用Ventoy制作2025年终极多系统启动盘,彻底告别反复格式化U盘的烦恼。Ventoy通过创新的引导加载器架构,允许用户在一个U盘内同时存放并直接启动Windows、Linux、macOS等多种系统镜像和WePE等维护工具,实现真正的非破坏性管理和极高的U盘利用率。文章涵盖从安装配置、镜像库构建到安全启动设置等全流程实战指南。

weixin_29280219的博客 241

Mimics 21.0软件学习笔记(一)基本操作

Materialise Mimics 21.0打开工程窗口化Thresholding 二值化Region growing区域增长创建一个3D表示,并显示股骨头从髋臼中区分出来,并单独为股骨头建立3D模型 打开工程 Opening the Project 窗口化 Windowing 二值化 Thresholding 区域增长 Region Growing 建立 3D 表示 Creating a 3D representation 显示 3D 表示 Displaying a 3D representation

qq_35495464的博客 4万+

MapReduce【自定义InputFormat】

MapReduce自定义InputFormat

功不唐捐,玉汝于成 759

飞秒激光加工石英玻璃的COMSOL多物理场仿真研究

多物理场仿真是现代工程研发的重要工具,通过耦合电磁、热传导和流体力学等物理场,可以准确预测复杂工况下的材料行为。COMSOL Multiphysics作为主流仿真平台,其双温模型能精确描述飞秒激光加工中的电子-声子耦合过程。这种仿真技术可显著降低实验成本,在微纳加工领域尤为关键。针对石英玻璃这类光学材料,仿真能有效优化激光参数,实现亚微米级精度的冷加工。研究显示,结合移动网格技术和自定义材料状态函数,可以准确预测烧蚀形貌与热影响区分布,为光学器件和微流控芯片制造提供可靠工艺指导。

weixin_29290863的博客 240

自定义hadoop的InputFormat

小小的抱怨一番这两天处理从文件中

zhongyifly的专栏 8043

C# WinForm和Sherlock进行对接

文章目录 前言 一、使用步骤 二、使用步骤 1.引入库 2.读入数据 总结 前言 本人公司最近在做一款瑕疵检测的视觉项目,项目中利用Sherlock从相机中取图和对图像进行视觉处理,然后将图像和数据传输到项目中。这过程中软件需要和Sherlock进行图像和数据的传递,这就需要WinForm和Sherlock进行对接,但我在网上查找了许久能用上的资料十分有限,所以我决定写下这篇文章,来做一次总结,同时也希望能帮助到同样在为此问题困扰的你。 一、使用步骤 废话不...

adminmmrt的博客 3221

5G初始注册流程详解(2)-Registration Request

1:了解注册的本质,5G终端为什么要注册? 2:SUCI,SUPI,5G-GUTI的区别? 3:为什么会有COMPLETE REGISTRATION REQUEST呢?

weixin_53220301的博客 3794

Hadoop之自定义InputFormat

一、前提: 无论HDFS还是MapReduce,在处理小文件时效率都非常低,但又难免面临处理大量小文件的场景,此时,系统提供的InputFor就不适用了,就需要有相应解决方案。可以自定义InputFormat实现小文件的合并。 二、需求: 将多个小文件合并成一个SequenceFile文件(SequenceFile文件是Hadoop用来存储二进制形式的key-value对的文件格式),SequenceFile里面存储着多个文件,存储的形式为文件路径+名称为key,文件内容为value。 ...

Hao_JunJie的博客 1万+

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

算法大师! 793

maperduce自定义inputformat

MapReduce提供的inputformat输入类型并不能满足我们的使用需求,因此,mapreduce可以由用户自定义inputformat逻辑来处理各类数据。 步骤: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-naJgpogf-1603113808497)(https://s1.ax1x.com/2020/10/19/0xiCKH.png)] 自定义InputFormat方案解决处理大量小文件的问题 需求: 将多个小文件合并成一个SequenceFile文件(Sequ

qq_45841239的博客 164

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

hadoop案例:自定义inputformat

文章目录需求输入数据期望输出数据需求分析编写代码自定义inputformat自定义WholeRecordReaderMapper类Reducer类Driver类执行结果 无论HDFS还是MapReduce,在处理小文件时效率都非常低,但又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。可以自定义InputFormat实现小文件的合并 需求 将多个小文件合并成一个SequenceFile文件(SequenceFile文件是Hadoop用来存储二进制形式的key-value对的文件格式),Seq

张国荣家的弟弟 1032

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MapReduce之自定义InputFormat

在企业开发中,Hadoop框架自带的InputFormat类型不能满足所有应用场景,需要自定义InputFormat来解决实际问题。 自定义InputFormat步骤如下: (1)自定义一个类继承FilelnputFormat。 (2)自定义一个类继承RecordReader,实现一次读取一个完整文件,将文件名为key,文件内容为value。 (3)在输出时使用SequenceFileOutPutFormat输出合并文件。 无论HDFS还是MapReduce,在处理小文件时效率都非常低,但又难免面.

Sun's Blog 420

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

自定义inputFormat合并小文件

inputFormat合并小文件 1.需求: 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案 2.分析 小文件的优化无非以下几种方式: 1、在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS 2、在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并 3、在mapreduce处理时,可采用co...

5199

通过自定义inputformat后读取SequeneFile

需求回顾 通过自定义的inputformat,将一个文件夹的三个小文件读取成一个SequenceFile文件,文件格式为:文件路径+内容,具体代码实现在 https://blog.youkuaiyun.com/qq_33598343/article/details/85015898 (在我的博客Hadoop分类第18篇,自定义Inputformat) ,因为要存为SequenceFile,我们将value设...

开水烫鱼的博客 209

MapReduce原理分析:自定义输入格式InputFormat

1 问题的提出 MapReduce任务的输入文件一般是存储在HDFS里面。输入的文件格式包括:基于行的日志文件、二进制格式文件等,这些文件单个可能会达到GB甚至更大。那么MapReduce是如何读取这些数据的呢? 当提交MapReduce任务时,驱动程序内会通过FileInputFormat.setInputPaths(job, new Path(inputPath))为任务注入数据,这个路径包含...

机器熊的技术大杂烩 1233

【转自】自定义InputFormat、OutputFormat

转自:http://www.cnblogs.com/xiaolong1032/p/4529534.html 一:自定义实现InputFormat *数据源来自于内存*1.InputFormat是用于处理各种数据源的,下面是实现InputFormat,数据源是来自于内存.*1.1 在程序的job.setInputFormatClass(MyselfmemoryInputFormat.c...

amo1561的博客 214

hive自定义InputFormat

自定义分隔符 package com.lwz.inputf; import java.io.IOException; import java.io.InputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import or...

疯狂的矩阵 797

自定义InputFormat实操

(1)自定义InputFromat package inputformat; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.InputSplit; import org.apache.hadoop.mapreduce.R...

weixin_43497444的博客 534

【转载】Mapreduce实现自定义的InputFormat

转自:http://www.cnblogs.com/dlutxm/archive/2011/09/30/2196653.html 在mapreduce程序运行的开始阶段,hadoop需要将待处理的输入文件进行分割,按预定义的格式对文件读取等操作,这些操作都在InputFormat中进行。主要工作有以下3个: 1.Validate the input-specificati...

amo1561的博客 202

hadoop mapreduce 自定义InputFormat

很久以前为了满足公司的需求写过一些自定义InputFormat,今天有时间拿出来记一下 需求是这样的,如果如果使用FileInputFormat作为输入,是按照行来读取日志的,也就是按照\n来区分每一条日志的,而由于一条日志中记录着一些错误信息,比如java的异常信息,这些信...

chudajin2983的博客 220
上一篇: reduce端的join算法和map端的join算法
下一篇: 自定义OutputFormat
RZH_long
博客等级 码龄6年 17粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值