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备份参数发挥分布式存储优势

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
hadoop-mapreduce-client-core是Hadoop分布式计算框架中的核心模块之一。它主要包含了Hadoop MapReduce的核心功能和API接口,是实现MapReduce编程模型的必备组件。 Hadoop MapReduce是一种用于大规模数据处理的编程模型,其核心思想是将大规模数据集分解成多个较小的数据块,分别在集群中的不同机器上进行处理,最后将结果整合。hadoop-mapreduce-client-core模块提供了与MapReduce相关的和方法,方便开发者实现自定义的Map和Reduce任务。 具体来说,hadoop-mapreduce-client-core模块包含了以下重要组件和功能: 1. Job:Job表示一个MapReduce任务的定义和描述,包括输入路径、输出路径、Mapper和Reducer等。 2. MapperMapperMapReduce任务中的映射函数,它负责将输入数据转换成<key, value>键值对的形式。 3. Reducer:Reducer是MapReduce任务中的归约函数,它按照相同的key将所有Mapper输出的value进行聚合处理。 4. InputFormatInputFormat负责将输入数据切分成多个InputSplit,每个InputSplit由一个Mapper负责处理。 5. OutputFormatOutputFormat负责将Reducer的输出结果写入指定的输出路径中。 使用hadoop-mapreduce-client-core模块,开发者可以基于Hadoop分布式计算框架快速开发并行处理大规模数据的应用程序。通过编写自定义Mapper和Reducer,可以实现各种型的分布式计算,如数据清洗、聚合分析、机器学习等。 总之,hadoop-mapreduce-client-core是Hadoop分布式计算框架中的核心模块,提供了实现MapReduce编程模型所需的基本功能和API接口。使用该模块,开发者可以利用Hadoop的分布式计算能力,高效地处理和分析大规模数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值