前提条件

数据库容量上亿级别,索引只有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. springMVC中添加restful 风格

    RESTful架构:是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. 关于 ...

  2. Swift内部类调用外部类方法、属性的变通

    Swift的内部类比较鸡肋,在内部类里面不能调用外部类的属性或方法,那么如何解决这个问题,把内部类里面调用外部类的那部分代码方法移动到外部类里面,成为外部类的方法,是一种变通解决方式.

  3. 一个简单的PHP模板引擎

    PHP早期开发中通常是PHP代码和HTML代码混写,这也使代码中充斥着数据库操作,逻辑处理等.当项目不大时,这样的代码还可以接受,但是随着项目不断扩大,我们就会发现同一个文件中同时存在前端逻辑和后端处 ...

  4. HTML学习笔记:1.基础概念

    ①HTML:Hypertext Markup Language,即超文本标记语言,文件由标记组成   ②HTML发展史 (几个重要节点): 1993(IETF):HTML 1.0 1995(W3C): ...

  5. JVM GC-----垃圾回收算法

    说到Java,一定绕不开GC,尽管不是Java首创的,但Java一定是使用GC的代表.GC就是垃圾回收,更直接点说就是内存回收.是对内存进行整理,从而使内存的使用尽可能大的被复用. 一直想好好写一篇关 ...

  6. 进阶-Redis 知识梳理

    redis介绍 1.什么是NoSQL NoSQL(统称),泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充. 2.NoSQL数据库的四大分类如下: 键值(K ...

  7. C# Ioc、DI、Unity、TDD的一点想法和实践

    面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP). 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念) 控制反转( ...

  8. PAT1112:Stucked Keyboard

    1112. Stucked Keyboard (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue On a ...

  9. ExecutorCompletionService分析及使用

    当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...

  10. 二十四、Hadoop学记笔记————Spark的架构

    master为主节点 一个集群中可能运行多个application,因此也可能会有多个driver DAG Scheduler就是讲RDD Graph拆分成一个个stage 一个Task对应一个Spa ...