Hive2MySQL初步架构

系统简介



本系统负责将Hive处理后的数据导出到MySQL服务器上,采用主/从架构。zeus2将待导出的数据信息放到zookeeper上,Zookeeper将该信息发送给master。master通过JobWatcher接收待处理的表信息,将这些信息转换为任务,并分发给client处理。当client处理完成时,会更新MySQL上数据处理表,表示该部分任务已经处理完成

模块简介



master

  • 简介

    为服务,会一直运行。包含接收zookeeper上传来的待导出数据的元信息、任务导出、任务超时处理、任务执行完成后的元数据更新、告警等功能

  • 流程
    1. 启动master服务
    2. 通过JobWatcher线程获取待处理的任务,并更新到队列MasterContext.finishedTZ中
    3. MasterContext中加入一个线程,扫描队列MasterContext.finishedTZ,如果有任务,则开始解析任务并进行任务分发
    4. 任务分发的时候,将分发任务加入到executor,执行完成的时候,得到返回码,并根据返回码,进行相应的处理
    5. MasterContext中加入一个线程,用于监控超时的client,如果超时,则将该client加入到超时列表中,以后不进行分发
  • 关键点
    1. MySQL节点的选择
    • 需求

      为了后续计算的方便,需要将能存储在一个MySQL服务器上的数据全部导出到一个节点上,例如上个月站点A导出到MySQL1上,这个月,还得将站点A的数据导出到节点MySQL1上。

    • 解决方案

      导出时,为了保证每次数据都导出到一个节点上去,需要维持一张site和host间对应的关系表。而部分站点的数据非常大,会超过MySQL服务器的单表阈值,这样部分站点的数据需要分发到不同的节点上去。site和节点之间的关系不是一一对应的。而大站点只是用户中的一部分,还存在一些小站点,一个MySQL服务器可能存放数个站点的数据。为了应对这些挑战,我们将站点分为三种SITE_LEVEL:SMALL_SITE、BIG_SITE、HUG_SITE,并分别采用不同的导出策略。

      SMALL_SITE 网站的数据量较小,一个站点只存放在一个MySQL服务器上去。所有的数据都会导出到一台MYSQL服务器上去。当数据超过MYSQL服务器单表限制的时候,会将数据导出到负载最小的MySQL服务器上去。某site很长时间以来一直使用我们的服务器时,可能会出现这种情况。

      BIG_SITE 导出的策略和SMALL_SITE一样,但是获取MySQL服务器的方法和SMALL_SITE不一样,BIG_SITE按照轮询的方式将HIVE上的数据导出到MYSQL中去,即今天的数据导出到MYSQL1上,明天的数据可能导出到MySQL2上。而SMALL_SITE的数据均导出到一台MYSQL服务器上。

      HUG_SITE 将站点每天的访问信息分发到不同的MYSQL服务器上去

  • 注解
    1. HDFS路径

      /user/hive/warehouse/ptmind_data.db/${tableName}_${tableType}/sitetz=${timezone}/partdt=${date}/partsid=${sid}

      /user/hive/warehouse/ptmind_data.db/sum_page_visits_stats_olap_d/sitetz=E0800/partdt=2014-06-02/partsid=56fbce4e

    2. tableType

      明细表的类型为x,其他表暂时只支持天d

    private String getTabType(String tableName) {
        if (tableName.equals(Constant.TB_1)) {
           return x;
        }
        else {
           return d;
        }
    }
    

client

  • 简介

    1. 部署在MySQL服务器上
    2. 执行HDFS2MySQL的导出任务

  • 流程
    1. 通过clientBootstrap监控消息
    2. 当监控到任务时,执行HDFS2MySQL的导出任务

      2.1 通过shell脚本,从HDFS上下载数据

      2.2 将元数据更新到MySQL服务器中

      2.3 删除本地文件

      2.4 根据表中插入行的数目判断数据是否导出成功

      2.5 将执行情况返回给master

    3. 定时向master发送心跳信息
  • 注解
  1. 存储的本地路径:/tmp/ptbalancer/data/${tableName}_${tableType}_${date}_${当前时间戳}

节点间通信

  • 中间件 netty

    master ServerBootstrap

    client ClientBootstrap

传输数据 PB

相比XML,PB有更好的传输效率、压缩率更高、解析速度更快

Hive2MySQL初步架构

时间: 2024-07-28 15:35:43

Hive2MySQL初步架构的相关文章

软件设计入门1 架构设计

热爱编程才能做优秀的软件设计师! 软件设计有一些方法可以参考.但更重要的是要有好的需求分析.丰富的技术知识和设计经验(多动手!)不断追求更好的精神(多动脑!). 遇到别人的系统想一下自己能否实现,如何实现? 一.优秀设计的标准:性价比高的设计. 1)优秀的设计都是需求驱动的,不熟悉需求就做出来的设计是不靠谱的: 2)优秀的设计应该是当前团队能理解能实现的,太超前的设计项目团队做不出来,这个设计只能是摆设: 3)优秀的设计应充分考虑当前各种限制条件,适当做出平衡,能保证达成项目的目标: 4)优秀的

android 软件实现架构。

(待续)粗略整理了一下杨广福的视频教程,将软件架构整理如下. 1. 首先引入侧滑菜单,和主内容页面. 侧滑菜单在软件的第一个onCreate里实现注册.并且设置好参数,比如侧滑方式和滑动的像素数. 2.写侧滑菜单和主内容页面的layout布局文件.并且写这两个布局文件的Fragment文件,,把这两个Fragment的重复的地方,抽象出来,形成基类,抽出两个方法,initView 和 initData. 3.在主文件中,用FragmentManager方法替换之前写好的layout布局文件,这时

[纯代码]Swift 2.0 开发新浪微博--第一天

开发环境:Xcode 7  Beta 4 1.1: 部署初步架构 1.2 设置根控制器(AppDelegate.swift) <span style="font-family:Microsoft YaHei;"> func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Ov

团队作业1——团队展示&amp;选题

队名: 队员学号(标记组长): 拟作的团队项目描述:一句话: 队员风采:介绍每一队员的风格.擅长的技术.编程的兴趣.希望的软工角色(开发.测试.PM等).一句话宣言等:请阅读第7章:MSF(Microsoft Solution Framework),理解MSF的9点的基本原则,例如: a. 为共同的远景而工作 b. 充分授权和信任 c. 各司其职,为项目共同负责 团队的首次合照(有图有真相,合照风格可以发挥创意): 团队的特色描述,主要描述有别于其他所有团队的特点或核心竞争力,言简意赅. 确立团

团队作业1——团队展示

团队展示:         a.队名: wt.dll         b.队员学号:          201421123062   林   燕 201421123083   王李焕 201421123084   林至贤 201421123085   童毅南 201421123088   代泽旭 (队长) c.拟作的团队项目描述:基于微信公众平台的课堂点名系统    d.队员风采: 代泽旭:擅长C#.C++等多门语言,拥有超乎常人的带头冲锋能力,有信心带领我们团队走向巅峰. 林至贤:擅长JAVA

团队作业1--团队展示&amp;选题

团队展示 1.团队名称: 拖拉机 2.队员学号: 杨嘉成 201421123048(队长) 吴文庆 201421123049 程志铭 201421123053 叶华琴 201421123036 白碧宇 201421123039 方巧玲 201421123038 3.拟作的团队项目:     帮你挑选礼物的轻型社交网站 4.队员风采:  杨嘉成 自我描述:第一次团队合作,也是第一次当队长,路很长,很艰辛,但是我还是会付出最大的努力帮助团队成长,希望我们团队能慢慢成长. 团队角色:程序开发 技术:略

彩票项目开发节项

05年第一次接触要做彩票项目的客户,见面谈了下,客户给了一些各彩种各玩法的奖金文档,并给了一个正在运营的彩票网站,客户要求我们对照功能上评估工作量然后报价. 半个月后再次见面,通过评估后报价7W(当时客户只要求做,重庆.天津.江西以及广东.江西.山东11选.福彩3D.上海时时乐.北京快乐8).敲定价格后,客户第一笔打了2w块钱,开工干活,接下来就是一段苦逼的日子了. 第一个版本: 考虑到当时彩票程序都有客户端(大部分ARI实现的,服务器基本上是PHP弄的),而且有部分程序使用silverligh

活用UML-软件设计高手(广州 2014年6月14-15日)

我们将在广州为您奉献高级技术课程"活用UML-软件设计高手",首席专家张老师将会为您分享软件架构设计.数据库设计.用户体验设计及详细设计的最佳实践,帮助您成为优秀的软件设计师!时间:2014.06.14-15(周六日),上午9:00-12:00,下午14:00-17:00(每天6小时,共12小时)地点:汉庭快捷(天河店) 10楼会议室,详细地址:广州市天河区天河路97-99号(距广州购书中心200米)1.课程概述课程全程将会围绕一个具体案例展开,从需求分析开始到架构设计.数据库设计.用

图片服务器规划漫谈

一.前言 每一个小团队都是希望发展壮大的~~~ 现在几乎任何一个网站.Nativ App.Web App等都有图片展示的功能,对于图片功能从下至上都是很重要的.必须要具有前瞻性的规划好图片服务器,当然这并不是说一上来就搞很NB的架构,至少具备一定扩展性.虽然各种架构设计都有,在这里我只是谈谈我的想法. 二.需求 1.原始图片上传到服务器 2.根据业务把图片压缩到指定尺寸,这一需求无论何时都有可能发生变化,同一个图片你不知道什么时候产品经理会说要加另一种尺寸! 3.多个前端服务器要共享图片 三.架