• 《微店大数据开发平台架构演进》读后感


    《微店大数据开发平台架构演进》读后感

    《微店大数据开发平台架构演进》这篇文章向我们介绍了八个问题,其中对Mars大数据平台构成、Mars系统架构设计、分布式系统架构、定时、依赖调度、执行任务都做了哪些工作印象比较深刻。

    一、Mars大数据平台构成

         大数据开发平台建立在HDFS、YARN、HiveMeta的基础服务之上,目前支持通过Hive、Kylin查找数据,后面所有的数据查询入口将都集成在这里,包括:ES、Redis、Hades等,大数据平台目前支持Shell、Hive、MR、Spark四种任务类型。

    二、Mars系统架构设计

      Mars大数据开发平台依托于Hadoop集群,所有的mars机器都必须安装hadoop、Hive客户端。Mars机器有两个身份:master&worker。master负责管理Job、给worker分配Job;worker负责执行Job,提交Job到Hadoop集群,接收Job执行的日志信息。

    三、分布式系统架构

    1、谁是master,谁是worker

         应用启动时,机器通过抢占的方式争当master,通过在数据库中插入一条记录的方式标识当前谁是master,master每隔一定时间去更新数据库,通过维护一个更新时间间接告知worker它还活着,worker同样每隔一定时间去查询数据库,倘若master的更新时间超过一定时间间隔,worker则认为master故障,第一个发现的worker将当仁不让的成为新的master。

    2、master、worker容灾模式

         master与worker之间使用基于protobuf的netty进行通信,master会每隔一段时间去检测与worker的连接,若发现worker故障,master将断开与worker的连接,把分配到该故障worker上的任务重新分配到其他worker上去执行;若master故障,worker将使用抢占的方式争当新的master,新的mater将中止所有正在运行的Job,重新分配。

    四、定时、依赖调度

    1、定时调度

         Mars使用Quartz来实现定时调度。Quartz是一个完全由java编写的开源作业调度框架。简单地创建一个实现org.quartz.Job接口的java类。Job接口包含唯一的方法:public void execute(JobExecutionContext context) throws JobExecutionException,在你的Job接口实现类里面,添加业务逻辑到execute()方法。一旦配置好Job实现类并设定好调度时间,Quartz将密切注意剩余时间。当调度程序确定该是通知你作业执行的时候,Quartz框架将调用你的Job实现类(作业类)的execute()方法,去做它该做的事情。

    2、依赖调度

         依赖调度是指该Job所有依赖的Job全部成功运行完毕时需要被触发的任务类型。当且仅当其所有依赖的任务在当天全部成功运行完毕后,依赖任务将会被触发执行。那么依赖调度是如何实现的?

         例如,任务110、112为定时任务,任务119为依赖任务,任务119依赖任务110、112。起初119的状态为:依赖JobId:110、112,已就绪JobId:空。110、112未就绪,119不执行;凌晨2点任务110执行成功,任务119收到110执行成功事件,状态更新为:依赖JobId:110、112,已就绪JobId:110、112未就绪,119此时仍然不执行;凌晨3点任务112执行成功,任务119收到112执行成功事件,状态再次被更新为:依赖JobId:110、112,已就绪JobId:110、112。110、112均已就绪,触发119开始执行。

    五、执行任务都做了哪些工作

    1、后端

    (1)用户在开发中心运行、选中运行或在调度中心手动执行、手动恢复。

    (2)Mars worker机器进行预判断,包括权限判断、脚本中是否有参数为替换等。

    (3)worker机器向master机器发送执行任务请求。

    (4)master机器收到执行任务请求,把任务加入执行队列。

    (5)master机器定时扫描执行队列,选择合适的worker(负载均衡)执行此任务。

    (6)前置准备。包括:资源文件下载,数据表数据监测等。

    执行任务。

    (7)后置处理。包括数据浮动检查、旧分区清理、添加执行成功标志等。

    (8)如果生成了结果文件,还要上传结果文件到Hadoop,方便以后下载。

    2、前端

    (1)  用户触发执行任务。

    (2)  每隔一段时间请求日志,刷新到前端页面。

    (3)  任务执行完毕。

    (4)  如果是开发中心有结果数据,则请求Hadoop上的结果数据。

    (5)  进行数据展示。

  • 相关阅读:
    【codeforces 791D】 Bear and Tree Jumps
    【codeforces 791C】Bear and Different Names
    【codeforces 791B】Bear and Friendship Condition
    【codeforces 791A】Bear and Big Brother
    【t017】YL杯超级篮球赛
    Java Web整合开发(80) -- EJB & WebService
    搜索与排序
    T2821 天使之城 codevs
    T1155 金明的预算方案 codevs
    后缀表达式
  • 原文地址:https://www.cnblogs.com/wxd136/p/11042596.html
Copyright © 2020-2023  润新知