1 Star 1 Fork 0

静宸丶水默含声 / hadoop

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

hadoop

hadoop使用案例

软件架构

hadoop 2.7.6

jdk 1.8

包含的案例

  • 使用api对hdfs进行操作;
  • 自定义InputFormat,实现对小文件优化;
  • 自定义patition分区;
  • map端表合并(Distributedcache),解决数据倾斜;
  • 辅助排序和二次排序案例(GroupingComparator);
  • 日志清洗;
  • 自定义OutputFormat,过滤日志及自定义日志输出路径;
  • 官方wordcount自定义重写;

使用说明

bin/hadoop jar /opt/hadoop.jar com.honey.mapreduce.flowcount.FlowCount /user/root/input /user/root/output

MapReduce 核心知识点:

1、MapReduce核心思想:

  • 1)分布式的运算程序往往需要分成至少2个阶段

  • 2)第一个阶段的maptask并发实例,完全并行运行,互不相干

  • 3)第二个阶段的reduce task并发实例互不相干,但是他们的数据依赖于上一个阶段的所有maptask并发实例的输出

  • 4)MapReduce编程模型只能包含一个map阶段和一个reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个mapreduce程序,串行运行

2、InputFormat数据切片机制:

  • FileInputFormat切片机制
  • CombineTextInputFormat切片机制(小文件优化)
  • 自定义InputFormat

3、Shuffle机制

  • partition分区
  • WritableComparable排序
  • GroupingComparator分组(辅助排序)
  • Combiner合并(局部汇总每一个maptask对输出,减少网络传输量)
  • 数据倾斜&Distributedcache

4、其他原理:

  • MapTask工作机制
  • ReduceTask工作机制
  • 自定义OutputFormat
  • MapReduce数据压缩
  • 数据清洗

5、Yarn工作机制

MapReduce开发总结

在编写mapreduce程序时,需要考虑的几个方面:

1.输入数据接口:InputFormat

  • 默认使用的实现类是:TextInputFormat
  • TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回
  • CombineTextInputFormat可以把多个小文件合并成一个切片处理,提高处理效率。
  • 用户还可以自定义InputFormat。

2.逻辑处理接口:Mapper

  • 用户根据业务需求实现其中三个方法:map() setup() cleanup ()

3.Partitioner分区

  • 有默认实现 HashPartitioner,逻辑是根据key的哈希值和numReduces来返回一个分区号;key.hashCode()&Integer.MAXVALUE % numReduces如果业务上有特别的需求,可以自定义分区。

4.Comparable排序

  • 当我们用自定义的对象作为key来输出时,就必须要实现WritableComparable接口,重写其中的compareTo()方法。
  • 部分排序:对最终输出的没一个文件进行内部排序。
  • 全排序:对所有数据进行排序,通常只有一个Reduce。
  • 二次排序:排序的条件有两个。

5.Combiner合并

  • Combiner合并可以提高程序执行效率,减少io传输。但是使用时必须不能影响原有的业务处理结果。

6.reduce端分组:Groupingcomparator

  • reduceTask拿到输入数据(一个partition的所有数据)后,首先需要对数据进行分组,其分组的默认原则是key相同,然后对每一组kv数据调用一次reduce()方法,并且将这一组kv中的第一个kv的key作为参数传给reduce的key,将这一组数据的value的迭代器传给reduce()的values参数。
  • 利用上述这个机制,我们可以实现一个高效的分组取最大值的逻辑。
  • 自定义一个bean对象用来封装我们的数据,然后改写其compareTo方法产生倒序排序的效果。然后自定义一个Groupingcomparator,将bean对象的分组逻辑改成按照我们的业务分组id来分组(比如订单号)。这样,我们要取的最大值就是reduce()方法中传进来key。

7.逻辑处理接口:Reducer

  • 用户根据业务需求实现其中三个方法: reduce() setup() cleanup ()

8.输出数据接口:OutputFormat

  • 默认实现类是TextOutputFormat,功能逻辑是:将每一个KV对向目标文本文件中输出为一行。
  • 用户还可以自定义OutputFormat。

空文件

简介

熟悉使用api对hdfs进行操作; 使用mapreduce; 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/honey-shawn/hadoop.git
git@gitee.com:honey-shawn/hadoop.git
honey-shawn
hadoop
hadoop
master

搜索帮助