hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

hadoop分割与读取输入文件的方式被定义在InputFormat接口的一个实现中,TextInputFormat是默认的实现,当你想要一次获取一行内容作为输入数据时又没有确定的键,从TextInputFormat返回的键为每行的字节偏移量,但目前没看到用过

以前在mapper中曾使用LongWritable(键)和Text(值),在TextInputFormat中,因为键是字节偏移量,可以是LongWritable类型,而当使用KeyValueTextInputFormat时,第一个分隔符前后都是Text类型,所以你必须修改mapper的实现以及map()方法来适应这个新键类型

一个MapReduce的输入不一定是外部数据,常常是一些其他MapReduce的输出数据,还可以自定义输出格式,默认的输出格式与KeyValueTextInputFormat能够读取的的数据格式保持一致(记录中的每行均为一个由制表符分隔的键和值),不过Hadoop提供了更加有效的二进制压缩文件格式,称为序列文件,这个序列文件为hadoop处理做了优化,当连接多个MapReduce作业时,它是首选,读取序列文件的类为SequenceFileInputFormat,序列文件的键和值对象可以由用户自定义,输出和输入类型必须匹配

自定义InputFormat,实现两个方法:

getSplit()确定所有用于输入数据的文件,并将输入数据分割为输入分片,每个map任务处理一个分片

getRecordReader()循环提取给定分片中的记录,并解析每个记录为预定义类型的键和值

在实际情况中一个分片总是以数据块为大小,在HDFS中默认一个块为64MB

FileInputFormat中isSplitable()方法,检查你是否可以将给定文件分片,默认返回为true,有时你可能想要一个文件为其自身的分块,这时可以设定返回为false

LineRecordReader实现RecordReader,基于实现的封装,大多数操作存放在next中

我们通过扩展FileInputFormat生成我们的InputFormat类,并实现一个factory方法来返回recordreader

除了类的构建之外,TimeUrlRecordReader会在RecordReader实现6种方法,它主要在KeyValueInputFormat之外的一个封装,但吧记录的Text类型转换为URLWritable

输出数据到文件时,使用的是OutputFormat,因为每个reducer仅需将它的输出写入自己的文件中,输出不需要分片。

输出文件放在一个公用目录中,通常命名为part-nnnnn,这里的nnnnn是reducer的分区ID,RecordWriter对输出结果进行格式化,而RecordReader对输入格式进行解析

NullOutPutFormat简单的实现了OutputFormat,无输出,并不需要继承FileOutputFormat。更主要的是OutputFormat(InputFormat)处理的是数据库,并非文件

个性化输出可以在继承了FileOutputFormat的类中的封装的继承RecordReader类中的write()方法,如果不只想输出到文件中

jar -xvf  ../example.jar  解压jar包

向hdfs迁移本地文件可以,程序中地址别写错了,别写成其他不关联的机子上的

在eclipse中写完程序,打成jar包,放到hadoop文件夹下,运行hadoop指令可以查看结果

若运用第三方插件fatjar,将mapreduce的jar包和jedis的jar包整合到一起放入hadoop,这样不需要修改manifest配置信息

搭建三种模式,一般默认单机模式:不使用HDFS,也不加载任何守护进程,主要用于开发调试

伪分布模式在“单节点集群”上运行hadoop,其中所有守护进程都在一台机子上,增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互

全分布模式,真实情况用这种模式,强调分布式存储和分布式计算,明确声明了NameNode和JobTracker守护进程所在的主机名。增大了HDFS备份参数发挥分布式存储优势

hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

时间: 2024-10-10 23:54:42

hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式的相关文章

hadoop学习;自己定义Input/OutputFormat;类引用mapreduce.mapper;三种模式

hadoop切割与读取输入文件的方式被定义在InputFormat接口的一个实现中.TextInputFormat是默认的实现,当你想要一次获取一行内容作为输入数据时又没有确定的键.从TextInputFormat返回的键为每行的字节偏移量,但眼下没看到用过 曾经在mapper中曾使用LongWritable(键)和Text(值),在TextInputFormat中,由于键是字节偏移量.能够是LongWritable类型,而当使用KeyValueTextInputFormat时,第一个分隔符前后

TimesTen 应用层数据库缓存学习:19. 理解AWT缓存组的三种模式

概述 本文很好的讲述了AWT三种缓存组的概念和区别,并给出了3种缓存组从建立到摧毁的完整过程. AWT缓存组有3中类型: 1. AWT 缺省 (Manually load) 2. AWT Dynamic 3. AWT Dynamic Globle (Cache Grid) 各种AWT类型的区别 AWT 缺省 (Manually load) TimesTen中inserted/updated/deleted的数据传递到Oracle Oracle中新增的数据通过"LOAD CACHE GROUP&q

hadoop学习;block数据块;mapreduce实现例子;UnsupportedClassVersionError异常;关联项目源码

Football on Table 题意:一些杆上有人,人有一个宽度,然后现在有一个球射过去,要求出球不会碰到任何人的概率 思路:计算出每根杆的概率,之后累乘,计算杆的概率的时候,可以先把每块人的区间长度再移动过程中会覆盖多少长度累加出来,然后(1?总和/可移动距离)就是不会碰到的概率 代码: #include <stdio.h> #include <string.h> #include <math.h> const double eps = 1e-8; int t,

Flex事件机制学习-自定义事件实现类间通信 .

今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite     {            public function Main()            { //演示ChildSprite类是与Main类通信,ChildSprite类稍后说明: var child:ChildSprite=new ChildSprite(); //指示该实例的属性值            child.flag="01";

hadoop 学习自定义分区

(网易云课程hadoop大数据实战学习笔记) 如图所示:有三个ReducerTask,因此处理完成之后的数据存储在三个文件中: 默认情况下,numReduceTasks的数量为1,前面做的实验中,输出数据都是在一个文件中.通过自定义myPatitioner类,可以把ruduce处理后的数据分类汇总,这里MyPartitioner是Partitioner的基类,如果需要定制partitioner也需要继承该类.HashPartitioner是mapreduce的默认partitioner.计算方法

Hadoop 学习自定义数据类型

(学习网易云课堂Hadoop大数据实战笔记) 序列化在分布式环境的两大作用:进程间通信,永久存储. Writable接口, 是根据 DataInput 和 DataOutput 实现的简单.有效的序列化对象. MR的任意Value必须实现Writable接口: MR的key必须实现WritableComparable接口,WritableComparable继承自Writable和Comparable接口: (本节先讲自定义value值,下一节再讲自定义key值,根据key值进行自定义排序) 以

hadoop 学习自定义排序

(网易云课程hadoop大数据实战学习笔记) 自定义排序,是基于k2的排序,设现有以下一组数据,分别表示矩形的长和宽,先按照面积的升序进行排序. 99 66 78 11 54 现在需要重新定义数据类型,MR的key值必须继承WritableComparable接口,因此定义RectangleWritable数据类型如下: import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import

hadoop学习之----------IntelliJ IDEA上实现MapReduce中最简单的单词统计的程序(本地 和 hadoop 两种实现方式)

idea上的maven中的pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.a

Spring学习(二)spring ioc注入的三种方式

一.spring ioc注入有哪三种方式: a setter 原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法:"让ioc容器调用该setter方法",将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中. b 构造器 原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数.ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值:将ioc实例化的依赖对象作为构造器的参数传入