MapReduce 默认使用 TextInputFormat 进行切片,其机制如下

  1. 1)简单地按照文件的内容长度进行切片
  2. 2)切片大小,默认等于Block大小,可单独设置
  3. 3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
  4.  
  5. 例如:
  6. 1)输入数据有两个文件:
  7. filel.txt 320M
  8. file2.txt 10M
  9. 2)经过 FilelnputFormatTextInputFormat为其实现类)的切片机制运算后,形成的切片信息如下:
  10. filel.txt.splitl--0~128
  11. filel.txt.split2--128256
  12. filel.txt.split3--256320
  13. file2.txt.splitl--010M

测试读取数据的方式

输入数据(中间为空格,末尾为换行符)

map 阶段的 k-v

可以看出 k 为偏移量,v 为一行的值,即 TextInputFormat 按行读取

以 WordCount 为例进行测试,测试切片数

测试数据,三个相同的文件

测试代码

  1. package com.mapreduce.wordcount;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.Mapper;
  9. import org.apache.hadoop.mapreduce.Reducer;
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  11. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
  12. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  13. import org.apache.log4j.BasicConfigurator;
  14.  
  15. import java.io.IOException;
  16. import java.util.StringTokenizer;
  17.  
  18. public class WordCount {
  19.  
  20. static {
  21. try {
  22. // 设置 HADOOP_HOME 环境变量
  23. System.setProperty("hadoop.home.dir", "D:/DevelopTools/hadoop-2.9.2/");
  24. // 日志初始化
  25. BasicConfigurator.configure();
  26. // 加载库文件
  27. System.load("D:/DevelopTools/hadoop-2.9.2/bin/hadoop.dll");
  28. } catch (UnsatisfiedLinkError e) {
  29. System.err.println("Native code library failed to load.\n" + e);
  30. System.exit(1);
  31. }
  32. }
  33.  
  34. public static void main(String[] args) throws Exception {
  35. args = new String[]{"D:\\tmp\\input2", "D:\\tmp\\456"};
  36. Configuration conf = new Configuration();
  37. Job job = Job.getInstance(conf, "word count");
  38. job.setJarByClass(WordCount.class);
  39.  
  40. job.setMapperClass(TokenizerMapper.class);
  41. job.setCombinerClass(IntSumReducer.class);
  42. job.setReducerClass(IntSumReducer.class);
  43.  
  44. job.setOutputKeyClass(Text.class);
  45. job.setOutputValueClass(IntWritable.class);
  46.  
  47. // 设置 InputFormat,默认为 TextInputFormat.class,这里显式设置下,后面设置切片大小
  48. job.setInputFormatClass(TextInputFormat.class);
  49. TextInputFormat.setMinInputSplitSize(job, 1);
  50. TextInputFormat.setMaxInputSplitSize(job, 1024 * 1024 * 128);
  51.  
  52. FileInputFormat.addInputPath(job, new Path(args[0]));
  53. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  54. System.exit(job.waitForCompletion(true) ? 0 : 1);
  55. }
  56.  
  57. public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
  58. private final static IntWritable one = new IntWritable(1);
  59. private Text word = new Text();
  60.  
  61. @Override
  62. public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
  63. // 查看 k-v
  64. System.out.println(key + "\t" + value);
  65. StringTokenizer itr = new StringTokenizer(value.toString());
  66. while (itr.hasMoreTokens()) {
  67. word.set(itr.nextToken());
  68. context.write(word, one);
  69. }
  70. }
  71. }
  72.  
  73. public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  74. private IntWritable result = new IntWritable();
  75.  
  76. @Override
  77. public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  78. int sum = 0;
  79. for (IntWritable val : values) {
  80. sum += val.get();
  81. }
  82. result.set(sum);
  83. context.write(key, result);
  84. }
  85. }
  86. }

MapReduce-TextInputFormat 切片机制的更多相关文章

  1. Hadoop(14)-MapReduce框架原理-切片机制

    1.FileInputFormat切片机制 切片机制 比如一个文件夹下有5个小文件,切片时会切5个片,而不是一个片 案例分析 2.FileInputFormat切片大小的参数配置 源码中计算切片大小的 ...

  2. MapReduce-CombineTextInputFormat 切片机制

    MapReduce 框架默认的 TextInputFormat 切片机制是对任务按文件规划切片,如果有大量小文件,就会产生大量的 MapTask,处理小文件效率非常低. CombineTextInpu ...

  3. 【大数据】MapTask并行度和切片机制

    一. MapTask并行度决定机制 maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度 那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 1.1 ...

  4. MapReduce中作业调度机制

    MapReduce中作业调度机制主要有3种: 1.先入先出FIFO      Hadoop 中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业. 2.公平调度器(相当于时间 ...

  5. 王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第十一讲Hadoop图文训练课程:MapReduce的原理机制和流程图剖析

    这一讲我们主要剖析MapReduce的原理机制和流程. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发 ...

  6. 经典MapReduce作业和Yarn上MapReduce作业运行机制

    一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...

  7. MapReduce 切片机制源码分析

    总体来说大概有以下2个大的步骤 1.连接集群(yarnrunner或者是localjobrunner) 2.submitter.submitJobInternal()在该方法中会创建提交路径,计算切片 ...

  8. 剖析MapReduce 作业运行机制

    包含四个独立的实体: ·  Client Node 客户端:编写 MapReduce代码,配置作业,提交MapReduce作业. ·  JobTracker :初始化作业,分配作业,与 TaskTra ...

  9. Hadoop(17)-MapReduce框架原理-MapReduce流程,Shuffle机制,Partition分区

    MapReduce工作流程 1.准备待处理文件 2.job提交前生成一个处理规划 3.将切片信息job.split,配置信息job.xml和我们自己写的jar包交给yarn 4.yarn根据切片规划计 ...

随机推荐

  1. 工具资源系列之给虚拟机装个ubantu

    前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 Ubuntu 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参 ...

  2. rocketmq广播消息

    发布与模式实现.广播就是向一个主题的所有订阅者发送同一条消息. 在发送消息的时候和普通的消息并与不同之处,只是在消费端做一些配置即可. Consumer消息消费 public class Broadc ...

  3. Java中的Iterable与Iterator详解

    在Java中,我们可以对List集合进行如下几种方式的遍历: List<Integer> list = new ArrayList<>(); list.add(5); list ...

  4. mssql server for docker on MacOs

    1. install 1.下载镜像 docker pull microsoft/mssql-server-linux 使用该命令就可以把数据库的docker镜像下载下来. 2.创建并运行容器 dock ...

  5. CynosDB技术详解——架构设计

    本文由腾讯云数据库发表 前言 CynosDB是新一代分布式数据库,100%兼容MySQL和PostgreSQL,支持存储弹性扩展,一主多从共享数据,性能更是超越社区原生MySQL和PostgreSQL ...

  6. Java 基本文件操作

    Java 文件操作 , 这也是基于Java API 操作来实现的. 文件是操作系统管理外存数据管理的基本单位, 几乎所有的操作系统都有文件管理机制. 所谓文件, 是具有符号名而且在逻辑上具有完整意义的 ...

  7. C#中,三种强制类型转换的对比

    在C#中,我们可以看到三种强制类型转换,比如强制转换成有符号32位整型,可以找到下面三种方式: ① (int)()                ②Convert.ToInt32()          ...

  8. June 28th. 2018, Week 26th. Thursday

    You cannot change the circumstances but you can change yourself. 既然改变不了环境,那就改变自己. From Jim Rohn. Rec ...

  9. winform 仿web 滑块验证

    winform 仿web 滑块验证 效果如下: 源码下载地址: https://download.csdn.net/download/u011392711/11109687

  10. python学习笔记2_条件循环和其他语句

    一.条件循环和其他语句 1.print和import的更多信息. 1.1.使用逗号输出  //print() 打印多个表达式是可行的,用逗号隔开.       在脚本中,两个print语句想在一行输出 ...