参考記事:
https://www.cnblogs.com/cjsblog/p/8168642.html
https://www.jianshu.com/p/461f86936972
https://blog.csdn.net/wyqwilliam/article/details/84669579
mapreduce操作の5つの段階
Mapreduceは、実行プロセスの5つのステップに大まかに要約されています
1. [input阶段]获取输入数据进行分片作为map的输入
2. [map阶段]过程对某种输入格式的一条记录解析成一条或多条记录
3. [shffle阶段]对中间数据的控制,作为reduce的输入
4. [reduce阶段]对相同key的数据进行合并
5. [output阶段]按照格式输出到指定目录
実行プロセス図
入力ステージ
input阶段主要是从节点上反序列化数据,读取后切片,供map阶段使用
序列化格式和inputformat格式可以自定义设置
只有支持分片的压缩格式可以分片
记录格式:如serse 用正则表达式来转换文本hive
具体的な手順は次のとおりです。
1.データノードのデータにアクセスしてデータとスライスをデシリアライズし、各スライスにマップタスクを割り当てます
2.これらのタスクを同時に実行し
ます3. recordReaderを介してスライスの各レコードを読み取り、レコードフォーマットに従って読み取りますシフト値はマップのキーとして使用され、レコード行は値として使用されます。値はマップメソッドのパラメーターとして使用されます。
マップステージ
通过对输入记录的处理,转换成一个或多个中间记录
シャッフルステージ
需要注意:
1. shuffle阶段会对中间值进行优化,并且将分区的数据分发给各个reduce处理
map任务的输出默认是放在本地磁盘的临时缓冲目录中的
分区,排序,combiner过程可自定义
由于受限于集群可用带宽,通常会对中间数据做压缩,combiner处理,减少网络带宽消耗
分区的作用就是决定根据map 输出的key值由哪个reduce处理
mapper实现类读取配置文件属性,可以在配置中指定压缩的格式
每一个分组的后台线程对输出结果的key进行排序,在排序的过程中,有combine函数则会进行调用
1.最初にマップデータがメモリバッファーに出力され、デフォルトの80%のしきい値に達した後、データはマップタスクと同様にローカルに書き込まれ、書き込みごとに小さなファイルが生成されます。
2.ローカルへの書き込みプロセスでは、パーティション化、並べ替え、コンバイナー(オプション)のプロセスが実行されます。3
。最後のファイルがローカルディスクに書き込まれると、領域と領域のファイルがマージされ、並べ替えられ、圧縮されます( (オプション)
4.パーティションでソートされた大きなファイルは、異なるパーティションに応じて対応するリデュースにコピーされます。5。リデュース
エンドは、httpネットワークを介してマップエンドからデータをコピーします
6.入力データはソートおよびマージされます。 2つのソート後に値イテレーターを返します
。7 。削減する入力として、同じキーの値を値のセットとしてグループ化します。
ステージを減らす
处理<key,list<value>>对,对每个key产生一个结果
出力段
对输出数据通常会做压缩,节省磁盘空间
将reduce结果按照输出的格式写入文件中
出力ファイルの形式に従って、各キーと値のペアの結果を1行ずつ出力します。デフォルトの中央の区切り文字は '\ t'です。キーと値のペアオブジェクトのtoString()メソッドはデフォルトで呼び出されます