Hive2MySQL初步架构


系统简介


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


模块简介


master

  • 简介
    为服务,会一直运行。包含接收zookeeper上传来的待导出数据的元信息、任务导出、任务超时处理、任务执行完成后的元数据更新、告警等功能
  • 流程
  • 关键点
    • 需求
      为了后续计算的方便,需要将能存储在一个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服务器上去
  • 注解

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

client

  • 简介
  • 流程
  • 注解
  1. 存储的本地路径:/tmp/ptbalancer/data/${tableName}_${tableType}_${date}_${当前时间戳}

节点间通信

  • 中间件 netty
    master ServerBootstrap
    client ClientBootstrap

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

相关内容

    暂无相关文章