MapReduce代码和优化

1. IDEA 配置

2. Job 类

2.1 Job.waitForCompletion

 2.2 Job. submit

submit():总共可分为两大步:第一步是和集群进行连接,第二步是往集群提交作业。

connect() 就是为了与集群进行连接,底层使用了RPC协议,针对本地集群和Yarn集群两个不同的集群,给我们封装了localJobRunner和YARNRunner,两个真正的与集群通信的客户端。

连接后,就可以提交作业了 

3. MapTask 类

3.1 整体概述

3.2 准备部分

3.3 工作部分

3.4  InputFormat (TextInputFormat)解析

3.4.1 getSplits 逻辑规划

3.4.2 createRecordReader

3.5 Mapper类

 3.6 OutputCollector 

 3.7 MapOutputBuffer

3.7.1 内存缓冲区初始化

回顾下流程

 MapTask在run()方法中就已经把收集器创建好了,并进行了分区,环形缓冲区初始化,在调用write()方法进行写时,底层调用的就是收集器的collect(),往缓冲区里写(有reduceTask的话)。

进入到sortAndSpill():

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Unity 中实现 MapReduce 框架并不是常见的做法,因为 Unity 主要用于游戏开发,而 MapReduce 更适用于大规模数据处理。但是,你可以在 Unity 中使用 C# 来编写自己的 MapReduce 算法。下面是一个简单的示例代码: ```csharp using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class MapReduceExample : MonoBehaviour { void Start() { // 输入数据 List<string> inputList = new List<string>() { "apple", "banana", "cherry", "date", "elderberry", "fig", "grape" }; // Map 步骤 var mapResult = inputList.SelectMany(word => Map(word)); // Shuffle 步骤 var groups = mapResult.GroupBy(item => item.Key); // Reduce 步骤 var reduceResult = groups.Select(group => Reduce(group.Key, group)); // 输出结果 foreach (var result in reduceResult) { Debug.Log(result); } } // Map 函数将输入数据映射为键值对 IEnumerable<KeyValuePair<char, int>> Map(string word) { foreach (char c in word) { yield return new KeyValuePair<char, int>(c, 1); } } // Reduce 函数对具有相同键的值进行聚合 string Reduce(char key, IEnumerable<KeyValuePair<char, int>> values) { int sum = values.Sum(item => item.Value); return $"{key}: {sum}"; } } ``` 这个示例代码与之前的 C# MapReduce 示例相似,但是在 Unity 中做了一些调整。在 `Start` 方法中执行 MapReduce 步骤,并使用 Unity 的 `Debug.Log` 输出结果。其余的 Map 和 Reduce 函数保持不变。 请注意,这只是一个简单的示例,可能并不适用于复杂的场景。如果你有特定的需求,可能需要根据自己的数据和业务逻辑进行相应的调整和优化。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值