Hadoop数据分析平台实战——060深入理解MapReduce 01(案例)离线数据分析平台实战——060深入理解MapReduce 01(案例)

时间:2022-05-07
本文章向大家介绍Hadoop数据分析平台实战——060深入理解MapReduce 01(案例)离线数据分析平台实战——060深入理解MapReduce 01(案例),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

离线数据分析平台实战——060深入理解MapReduce 01(案例)

用户自定义数据类型

MapReduce中的数据类型至少有两种用途。 第一个用途,这些类型定义的数据可以被序列化进行网络传输和文件存储, 第二个用途,在shuffle阶段要可以进行大小比较。 那么在hadoop中解决 第一种方式采用hadoop的接口Writable, 第二种采用接口java接口Comparable(Hadoop将这两个接口结合提供了WritableComparable接口)。

Hadoop提供了很多的内置数据类型, 比如:MapWritable, LongWritable, IntWritable, BooleanWritable, ByteWritable, DoubleWritable, FloatWritable, Text, NullWritable等。

用户定制数据输入格式化器

数据输入格式(InputFormat)用于描述MR作业的数据输入格式规范。 MapReduce框架依赖InputFormat进行输入数据分片以及提供读取分片数据的RecordReader实例对象。 每一个InputFormat类都会有一个对应的RecordReader类, RecordReader类主要作用是将输入数据转换为键值对, 传输给mapper阶段的map方法。

MapReduce默认的数据输入格式是: TextInputFormat(LineRecordReader)。 除了这个格式器以外, 还有KeyValueTextInputFormat, CombineTextInputFormat, SequenceFileInputFormat, DBInputFormat等。

InputFormat详解

全称:org.apache.hadoop.mapreduce.InputFormat 方法详解: getSplits:返回值是分片信息集合;作用:通过分片个数确定mappre的个数,并根据分片信息中的数据地址信息决定是否采用数据本地化策略。 createRecordReader:创建一个具体读取数据并构造key/value键值对的RecordReader实例对象。

RecordReader详解

全称:org.apache.hadoop.mapreduce.RecordReader 方法详解: initialize:根据对应的分片信息进行初始化操作。 nextKeyValue:判断是否还有下一个key/value键值对,如果有返回true;否则返回false。 getCurrentKey/getCurrentValue:获取当前key/value键值对。 getProgress:获取操作进度信息。 close:关闭资源读取相关连接。

FileSplit详解

全称:org.apache.hadoop.mapreduce.InputSplit 方法详解: getLength:获取分片长度。 getLocations:获取该分片数据对应的位置信息,确定数据本地化时候有用。

用户定制数据输出格式化器

数据输出格式(OutputFormat)用于描述MR作业的数据输出格式规范。 MapReduce框架依赖OutputFormat进行输出路径(输出空间)检测、获取提交job的OutputCommitter实例对象以及提供一个具体定义如何输出数据的RecordWriter实例对象。 每一个OutputFormat类都会有一个对应的RecordWriter类,RecordWriter类主要作用是明确定义如何写入以及写入的格式,接收reducer阶段输出的key/value键值对。

MapReduce默认的数据输出格式是: TextOutputFormat(LineRecordWriter)。 除了这个格式器以外,还有SequenceFileOutputFormat, DBOutputFormat等。

OutputFormat详解

全称:org.apache.hadoop.mapreduce.OutputFormat 方法详解: getRecordWriter:创建一个具体写数据的RecordWriter实例。 checkOutputSpecs:检测输出空间相关信息,如果检测失败,直接抛出异常。 getOutputCommitter:获取一个提交job的committer对象。一般情况下,直接使用FileOutputCommitter对象即可。如果觉得FileOutputCommitter内容比较多,也可以自己实现一个完全为空的类。

案例-MongoDB Hadoop实例

实现功能:从MongoDB中读取日志数据,将MapReduce程序处理过的数据写出到MongoDB中。