您好,欢迎访问一九零五行业门户网

Hive2MySQL初步架构_MySQL

系统简介 本系统负责将hive处理后的数据导出到mysql服务器上,采用 主/从 架构。zeus2将待导出的数据信息放到zookeeper上,zookeeper将该信息发送给master。master通过jobwatcher接收待处理的表信息,将这些信息转换为任务,并分发给client处理。当client处理完成时,会更新mysql上数据处理表,表示该部分任务已经处理完成
模块简介 master
简介
为服务,会一直运行。包含接收zookeeper上传来的待导出数据的元信息、任务导出、任务超时处理、任务执行完成后的元数据更新、告警等功能 流程启动master服务 通过jobwatcher线程获取待处理的任务,并更新到队列mastercontext.finishedtz中 mastercontext中加入一个线程,扫描队列mastercontext.finishedtz,如果有任务,则开始解析任务并进行任务分发 任务分发的时候,将分发任务加入到executor,执行完成的时候,得到返回码,并根据返回码,进行相应的处理 mastercontext中加入一个线程,用于监控超时的client,如果超时,则将该client加入到超时列表中,以后不进行分发 关键点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服务器上去 注解 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 tabletype
明细表的类型为x,其他表暂时只支持天d private string gettabtype(string tablename) {if (tablename.equals(constant.tb_1)) { return x;}else { return d;}}
client
简介 部署在mysql服务器上 执行hdfs2mysql的导出任务 流程通过clientbootstrap监控消息 当监控到任务时,执行hdfs2mysql的导出任务
2.1 通过shell脚本,从hdfs上下载数据
2.2 将元数据更新到mysql服务器中
2.3 删除本地文件
2.4 根据表中插入行的数目判断数据是否导出成功
2.5 将执行情况返回给master 定时向master发送心跳信息 注解 存储的本地路径: /tmp/ptbalancer/data/${tablename}_${tabletype}_${date}_${当前时间戳} 节点间通信
中间件 netty
master   serverbootstrap
client   clientbootstrap
传输数据 pb
相比xml,pb有更好的传输效率、压缩率更高、解析速度更快
其它类似信息

推荐信息