开发者学堂课程【Hadoop 分布式计算框架 MapReduc:NLineInputFormat 案例分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/94/detail/1506
NLineInputFormat 案例分析
目录:
一、特性
二、使用案例
三、需求分析
一、特性
如果使用 NlineInputFormat,代表每个 map 进程处理的 oputSplit 不再按 Block块去划分,而是按 NineInputFormat 指定的行数N来划分。即输入文件的总行数N=切片数,如果不整除,切片数=商+1。
以下是一个示例,仍然以上面的4行输入为例。
Rich learning form
Intelligent learning engine
Learning more convenient
From the real demand for more close to the enterprise
例如,如果 N 是2,则每个输入分片包含两行。开启2个 MapTask。
(0,Rich learning form)
(19,Intelligent learning engine)
另一个 mapper 则收到后两行:
(47. Learning more convenient)
(72.From the real demand for more close to the enterprise)
这里的键和值与 TextInputFormat 生成的一样。
二、使用案例
1.需求。
对每个单词进行个数统计,要求根据每个输入文件的行数来规定输出多少个切片。此案例要求每三行放入一个切片中。
(1)输入数据。
banzhang ni hao.
xihuan hadoop banzhang·I
banzhang ni hao.
xihuan hadoop banzhang
banzhang ni hao.
xihuan hadoop banzhang.
banzhang ni hao.
xihuan hadoop banzhang
banzhang ni hao.
xihuanhadoop banzhang banzhang ni hao.
xihuanhadoop banzhang
(2)期望输出数据。
Number of splits:4
三、需求分析。
1、需求:对每个单词进行个数统计,要求每三行放入一个切片中。
2、输入数据
banzhang ni hao
xihuan hado op banzhang dc
banzhang ni hao
xihuan hadoop banzhang dc
banzhang ni hao
xihuan hadoop banzhang dc
banzhang ni hao
xihuan hadoop banzhang dc
banzhang ni hao
xihuan hado op banzhang dc
3、期望输出数据
NARN [org.apache.hadoop.mapreduce.JobResourceUploader] - Hadoop command-line
NARN [org.apache.hadoop.mapreduce.JobResourceUploader]-No job iar file set
INFO [org.apache.hadoop.mapreduce.lib.input.FileInputFormat]- Total input p
INFO [org.apache.hadoop.mapreduce.JobSubmitter] - number of splits:4
INFO [org.apache.hadoop.mapreduce.JobSubmitter] - Submitting tokens for job:
INFO [org.apache.hadoop.mapreduce.Job] - The url to track the job:
http://lo INFO[org.apache.hadoop.mapreduce.Job-
Running job: job loca1998538859 000 INFO[org.apache.hadoop.mapred.LocalJobRunner]- OutputCommitter set in conf
INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - File Out
4、Map 阶段
(1)获取一行
(2)切割
(3)循环写出
5、Reduce 阶段
(1)汇总
(2)输出
6、 Driver
// 设置每个切片 InputSplit 中划分三条记录
NLinelnputFormat.setNumLinesPerSplit(job
.
3);