前提条件

数据库容量上亿级别,索引只有id,没有创建时间索引

达到目标:

  • 把阿里云RDS Mysql表数据同步到hive中,按照mysql表数据的创建时间日期格式分区,每天一个分区方便查询
  • 每天运行crontab定时的增量备份数据,还是依据自增的id

遇到的问题:

  • 没法建立创建时间的索引,不能按时间范围去查询,那样会严重影响线上数据库的性能?
    只能按照id的方式去增量的读取索引,存储到临时表,然后在转储到正式表,动态的写入时间分区
  • 使用sqoop直接导入hive?还是把数据导入到hdfs以內建表的形式把数据写入到指定的临时表?
    如果直接使用sqoop hive import 不支持,query 语句,没法自定义抽取字段,没办法按照id范围去锁定部分数据,
    使用hive import只能全量同步表而且id条件只能配到各个地方,我个人感觉query比较适合我灵活一些所以就使用
    sqoop导入hdfs內建表的方式来同步数据
  • 读取和写入一次要分配,不能一次读取太多,影响线上数据库的性能,线上数据库用的阿里云RDS?
    1. 首先查询mysql max(id),和 hive max(id),计算差值后分批去加载,查询hive max 没有直接连接hive,而是使用了一个迂回策略,
       使用python调用系统命令行执行hive -e 查询最大值,并写入到本地文件系统,然后查询本地文件系统最大值
    2.我这里是按每次300万一次,单次差值小于300万执行一次加载
    3.用sqoop分4个map任务去执行,300万数据大概需要1-2分钟左右读取到本地
    4. mysql中需要5秒左右查询min,max,id 确定本次数据分割的id范围,
    5.单个map任务大概需要15秒左右来读取和发送数据到sqoop,sqoop到hdfs內建表很快不会有压力这里就不写了
  • hive表初次创建同步的时候需要从临时表重建动态分区到正式表,数据跨度太大,一天天重建太耗时间?
    步骤一:数据刚开始同步的时候先不开启转正式表并动态分区,先把全量的数据同步到hive的临时表中,同步完成后,把全量的临时表转到正式表,动态写入分区数据

    步骤二:数据已经全量同步进来了,此时创建crontab任务,定时调用同步脚本,把增量的数据插入到临时表,然后把指定时间的数据转入正式分区,此步骤会把当前id最新的数据同步过来,范围是从上次同步的id到今天最大的id,日期有昨天有今天,这边正式表筛选出昨天的全部数据就行

Mysql 上亿级数据导入Hive思路分享的更多相关文章

  1. 基于Mysql数据库亿级数据下的分库分表方案

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,问题没有暴露出来,数据库方面的优化显得不太重要,一旦数据量越来越大时, ...

  2. R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)

    平时都是几百万的数据量,这段时间公司中了个大标,有上亿的数据量. 现在情况是数据已经在数据库里面了,需要用R分析,但是完全加载不进来内存. 面对现在这种情况,R提供了ff, ffbase , ETLU ...

  3. NEO4J亿级数据导入导出以及数据更新

    1.添加配置 apoc.export.file.enabled=true apoc.import.file.enabled=true dbms.directories.import=import db ...

  4. MySQL 上亿大表优化实践

    目录 背景 分析 select xxx_record语句 delete xxx_record语句 测试 实施 索引优化后 delete大表优化为小批量删除 总结 背景 XX实例(一主一从)xxx告警中 ...

  5. MySQL使用pt-online-change-schema工具在线修改1.6亿级数据表结构

    摘  要:本文阐述了MySQL DDL 的问题现状.pt-online-schema-change的工作原理,并实际利用pt-online-schema-change工具在线修改生产环境下1.6亿级数 ...

  6. 通用技术 mysql 亿级数据优化

    通用技术 mysql 亿级数据优化 一定要正确设计索引 一定要避免SQL语句全表扫描,所以SQL一定要走索引(如:一切的 > < != 等等之类的写法都会导致全表扫描) 一定要避免 lim ...

  7. 不停机不停服务,MYSQL可以这样修改亿级数据表结构

    摘  要:本文阐述了MySQL DDL 的问题现状.pt-online-schema-change的工作原理,并实际利用pt-online-schema-change工具在线修改生产环境下1.6亿级数 ...

  8. sqoop mysql导入hive 数值类型变成null的问题分析

    问题描述:mysql通过sqoop导入到hive表中,发现有个别数据类型为int或tinyint的列导入后数据为null.设置各种行分隔符,列分隔符都没有效果. 问题分析:hive中单独将有问题的那几 ...

  9. 使用sqoop把mysql数据导入hive

    使用sqoop把mysql数据导入hive export HADOOP_COMMON_HOME=/hadoop export HADOOP_MAPRED_HOME=/hadoop   cp /hive ...

随机推荐

  1. Django-CKedtior图片找不到的问题

    从Django Packages站点上找到这个CKeditor集成组件:https://github.com/shaunsephton/django-ckeditor 按照官方的install方法安装 ...

  2. 体育Bank2016会议笔记

    补注:会议全称应该是体育Bank2016体育投融资总裁年会 新华社体育部徐仁基 演讲主题:帮郭川找到大海-->帮民众找到自己真正的体育爱好 激发和培养体育市场是重中之重 将体育培养成生活习惯.生 ...

  3. WebRTC技术调研

    相关网址: 协议:https://www.w3.org/TR/webrtc/ https://apprtc.webrtc.org/ https://apprtc.appspot.com/ https: ...

  4. (linux虚拟机)克隆得到的虚拟机修改网卡信息和IP地址,以及DNS

    克隆得到的虚拟机,与原先的系统是一模一样的包括MAC地址和IP地址.需要修改成信息. 克隆完事之后,首先在 点击生成一个新的MAC地址.然后启动,登陆. vim /etc/udev/rules.d/7 ...

  5. PHP快速获取MySQL数据库表结构

    直接举例某个数据库中只有两个数据表,一个 test ,一个 xfp_keywords ,获取他们的数据库表结构. 此功能可以用于开发人员快速获取数据表结构通过获取的数据生成各种文件形式,用来快速理解数 ...

  6. java深入浅出之数据结构

    1.整形数据 byte.short.int.long,分别是1248个字节的存储量,取值范围也是依次增大的,其中int是正负21亿多: long a = 1111222233334444L:记住后面要 ...

  7. java之jsp内置对象

    1.out对象 <% out.println("金鳞岂是池中物,<br>"); out.println("一遇风云变化龙.<br>" ...

  8. myeclipse 的Customize Perspective 没有反应

    MyEclipse 2014 工具栏里的Quick Access老是跳上跳下的,弄得我很烦,所以就想自定义一下工具栏,结果 window--> customize perspective 没用 ...

  9. 我写的python代码的规则

    1.Python文件的命名: 采用每个单词的首字母大写,不使用下划线 2.Python类的命名: 采用每个单词的首字母大写,不使用下划线 3.Python包名的命名:采用每个单词都是小写,不使用下划线 ...

  10. mysql 存储引擎简介

    几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive 存储限制 没有 没有 有 ...