mapreduce输入数据为helloworldbyword的切片处理结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mapreduce输入数据为helloworldbyword的切片处理结果相关的知识,希望对你有一定的参考价值。
大数据MapReduce中的数据输入——切片与数据处理

黄山路443号
原创
关注
0点赞·740人阅读
2. MapReduce中的数据输入
2.1 文件切片
2.1.1 什么是切片
数据块(Block):HDFS中数据保存的单位,HDFS在物理上将数据分为一个一个Block管理
数据切片(Split):在逻辑上对Map任务输入数据的切片。
2.1.2 为什么要切片
将输入文件分为多片可以并行进行Map阶段的计算,提高Job的运行速度。一份数据切片就会有一个MapTask。
2.1.3 文件的切片机制
简单的按照文件的内容长度切片,切片大小默认为Block的大小(128M),但每次切片完都会判断剩下的部分是否大于块的1.1倍,不大于1.1倍就归入上一个切片
切片时不会考虑数据集整体,而是单独针对每一份文件切片(默认)
2.2 任务提交流程
//在客户端Driver中提交任务
job.waitForCompletion()
submit();
// 1建立连接
connect();
// 1)创建提交Job的代理
new Cluster(getConfiguration());
// (1)判断是本地yarn还是远程
initialize(jobTrackAddr, conf);
// 2 提交job
submitter.submitJobInternal(Job.this, cluster)
// 1)创建给集群提交数据的Stag路径
Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
// 2)获取jobid ,并创建Job路径
JobID jobId = submitClient.getNewJobID();
// 3)拷贝jar包到集群
copyAndConfigureFiles(job, submitJobDir);
rUploader.uploadFiles(job, jobSubmitDir);
// 4)计算切片,生成切片规划文件
writeSplits(job, submitJobDir);
maps = writeNewSplits(job, jobSubmitDir);
input.getSplits(job);
long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));
long maxSize = getMaxSplitSize(job);
for (FileStatus file: files)
long splitSize = computeSplitSize(blockSize, minSize, maxSize);
//blockSize与给定的最大值的最小值与给定的Split最小值取最大值
//最小值默认为1,最大值默认为Long.MAX_VALUE
Math.max(minSize, Math.min(maxSize, blockSize));
// 5)向Stag路径写XML配置文件
writeConf(conf, submitJobFile);
conf.writeXml(out);
// 6)提交Job,返回提交状态
status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());
登录后复制

Job.submit运行,获得一个JobSubmitter对象;
找到数据存储的目录,获取JobId等信息;
遍历所有文件,按要求规划切片信息,并将切片信息写入job.split文件中(只包含了元数据信息)
获取相关参数的.xml文件和任务jar包;
提交到YARN,根据切片信息分配MapTask。
如何决定Map和Reduce的数量
1) map的数量:splitSize=max(minSize,minmaxSize,blockSize) map个数由切片数决定
2) reduce的数量:job.setNumReduceTasks(x);默认为1
2.3 几种不同的切片方法
TextInputFormat(默认)
不管文件多小,都会单独规划切片,如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。
CombineTextInputFormat
会将多个小文件从逻辑上规划到一个切片中。
CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m
2.4 MapTask读取数据的方法(FileInputFormat)
MapTask将文件读取如内存并按K-V对的形式保存,具体实现依靠FileInputFormat的实现类
2.4.1 TextInputFormat(默认) 参考技术A mapreduce输入数据为helloworldbyword的切片处理结果
数据块(Block):HDFS中数据保存的单位,HDFS在物理上将数据分为一个一个Block管理
数据切片(Split):在逻辑上对Map任务输入数据的切片。
2.1.2 为什么要切片
将输入文件分为多片可以并行进行Map阶段的计算,提高Job的运行速度。一份数据切片就会有一个MapTask。 参考技术B mapreduce输入数据为helloworldbyword的切片处理结果?你如果他的输入数据为这个车票的话,那么他这个处理结果就会比较复杂,因为它这个的话,那么它可以加上,那么就可以成立就可以输入数据成功,因为他如果想输入数据的话,就必须要加kt,所以他这个切片处理结果才是比较好的。 参考技术C 将输入文件分为多片可以并行进行mapreduce阶段的计算,提高mapreduce的运行速度。一份数据切片就会有一个mapreduce。
简单的按照文件的内容长度切片,切片大小默认为黑色的大小(128兆),但每次切片完都会判断剩下的部分是否大于块的1.1倍,不大于1.1倍就归入上一个切片,切片时不会考虑数据集整体,而是单独针对每一份文件切片(默认)
以上是关于mapreduce输入数据为helloworldbyword的切片处理结果的主要内容,如果未能解决你的问题,请参考以下文章