加入收藏 | 设为首页 | 会员中心 | 我要投稿 柳州站长网 (https://www.0772zz.cn/)- 基础存储、数据迁移、云安全、数据计算、数据湖!
当前位置: 首页 > 站长资讯 > 动态 > 正文

你的数据如何价值最大化?

发布时间:2021-01-27 13:20:02 所属栏目:动态 来源:互联网
导读:在上述代码中可以留意到,done 属性(只读 channel)是在真正调用到 Done 方法时才会去创建。需要配合 select-case 来使用。 timerCtx 在调用 context.WithTimeout 方法时,我们会涉及到 timerCtx 类型,其主要特性是 Timeout 和 Deadline 事件,源码如下: Wi

在上述代码中可以留意到,done 属性(只读 channel)是在真正调用到 Done 方法时才会去创建。需要配合 select-case 来使用。

timerCtx

在调用 context.WithTimeout 方法时,我们会涉及到 timerCtx 类型,其主要特性是 Timeout 和 Deadline 事件,源码如下:
 

  • WithCancel:基于父级 context,创建一个可以取消的新 context。
  • WithDeadline:基于父级 context,创建一个具有截止时间(Deadline)的新 context。
  • WithTimeout:基于父级 context,创建一个具有超时时间(Timeout)的新 context。
  • Background:创建一个空的 context,一般常用于作为根的父级 context。
  • TODO:创建一个空的 context,一般用于未确定时的声明使用。
  • WithValue:基于某个 context 创建并存储对应的上下文信息。

context 本质

我们在基本特性中介绍了不少 context 的方法,其基本大同小异。看上去似乎不难,接下来我们看看其底层的基本原理和设计。

context 相关函数的标准返回如下:
 

什么是 context

Go 语言的独有的功能之一 Context,最常听说开发者说的一句话就是 “函数的第一个形参真的要传 ctx 吗?”,第二句话可能是 “有没有什么办法不传,就能达到传入的效果?”,听起来非常魔幻。

在 Go 语言中 context 作为一个 “一等公民” 的标准库,许多的开源库都一定会对他进行支持,因为标准库 context 的定位是上下文控制。会在跨 goroutine 中进行传播:
 

当 MR 程序提交到客户端所在的节点时后 大致运行流程如下:

作业提交

Client 调用 job.waitForCompletion 方法 YarnRunner ,向整个集群提交MapReduce作业。Client 向 RM 申请一个作业id。

RM 给 Client 返回该 job 资源的提交路径和作业 id。

Client 提交jar包、切片信息和配置文件到指定的资源提交路径。

Client 提交完资源后,向 RM 申请运行 MrAppMaster。

作业初始化

当 RM 收到 Client 的请求后,将该 Task 添加到容量调度器中。

某一个空闲的 NodeManager 领取到该 Task 。

该 NodeManager 创建 Container,并产生 MRAppMaster。

下载 Client 提交的资源 到本地。

任务分配

MRAppMaster 向 RM 申请运行多个 MapTask 任务资源。

RM 将运行 MapTask 任务分配给俩 NodeManager。其中分配原则 是优先 jar 跟 数据在一台机器上,其次就尽可能在一个机房。最后 随便来个空闲机器。

任务运行

MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动MapTask,MapTask 对数据分区排序。

MrAppMaster 等待所有 MapTask 运行完毕后,向RM申请容器 运行ReduceTask。

ReduceTask 向 MapTask 获取相应分区的数据。

程序运行完毕后,MR会向RM申请注销自己。

进度和状态更新

YARN 中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒向应用管理器请求进度更新来展示给用户。

作业完成

除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用 waitForCompletion() 来检查作业是否完成。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

4.3 资源调度器

目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler 和 Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。

(编辑:柳州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读