热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqoop增量数据迁移

背景业务系统库数据包含了大量历史数据,核心的表超过千万级甚至亿级后,传统在业务库上做数据分析已不合时宜,需要迁移至大数据平台(hivesparksqlimpala)做数据分析,如果

背景

业务系统库数据包含了大量历史数据,核心的表超过千万级甚至亿级后,传统在业务库上做数据分析已不合时宜,需要迁移至大数据平台(hive/spark sql/impala)做数据分析,如果按天全量导入至平台不仅消耗大量服务器资源并且全量读取业务库全表速度也会超慢,这时需要增量导入的功能,因为业务系统的表会用自增ID的标志,可以按天截取新增数据导入平台。

sqoop增量迁移数据方式对比

一种是 append,即通过指定一个递增的列,比如:
–incremental append –check-column num_iid –last-value 0
另种是可以根据时间戳,比如:
–incremental lastmodified –check-column created –last-value ‘2012-02-01 11:0:00’
就是只导入created 比’2012-02-01 11:0:00’更大的数据。

第一种适合业务系统库,一般业务系统表会通过自增ID作为主键标识唯一性。
第二种适合ETL的数据

sqoop append模式使用

1.使用 sqoop create-hive-table 生成 hive表结构
2.定义 sqoop job,实际上是一个通道,通道的始发站为mysql对应的表,终点站为hive对应的表
3.使用 sqoop job执行增量导入

注:自己写个shell定时跑批或者放到调度系统定时执行

下面为整个迁移的脚本示例:

#!/bin/bash
##############################################
## $1:日期 $2:表名
## 第一个参数为日期,第二个参数为mysql表名
##############################################
#配置所在数据库地址
conf_dbhost=xxx
#配置所在数据库用户名
conf_username=xxx
#配置所在数据库密码
conf_password=xxx
#配置所在数据库名
conf_dbname=etl
var_etl_date=`mysql -h $conf_dbhost -u$conf_username -p$conf_password -D $conf_dbname -e "SELECT var_value FROM para_etl_var WHERE var_name='{ETL_DATE}';"`
echo $var_etl_date
sys_date=`date -d'-1 day' +%Y-%m-%d`
if [ ${1} == "-" ]
then
# cur_date='2016-09-23'
cur_date=${var_etl_date:10:10}
echo $cur_date
else
#echo "$1"
cur_date=`date --date="${1}" +%Y-%m-%d`
echo $cur_date
fi
echo "$cur_date"
#exit
year=`date --date=$cur_date +%Y`
mOnth=`date --date=$cur_date +%m`
day=`date --date=$cur_date +%d`
echo "cur_date:"${cur_date}
#hive库名
hdb=rmdb
#hive表名
hive_table=crm_intopieces_dk
#mysql表名
mysql_table=crm_intopieces_dk
#数据仓库基础路径
basedir=/rmdb
#mysql服务器地址
server=xxx
#mysql端口号
port=3306
#mysql数据库名
mysql_database=test
#用户名
username=xxx
#密码
password=xxx
#判断Hive是否存在,不存在执行下面创建语句,否则跳过
#hive -e "use $hdb;select * from $hive_table limit 1;"
if [ $? -ne 0 ]
then
echo "表不存在,执行创建表结构"
sqoop create-hive-table
--connect jdbc:mysql://$server:$port/$mysql_database?tinyInt1isBit=false
--username $username
--password $password
--table $mysql_table
else
echo "表已存在,执行增量导入。。。"
fi
#exit
#
#一种是 append,即通过指定一个递增的列,比如:
#--incremental append --check-column num_iid --last-value 0
#另种是可以根据时间戳,比如:
#--incremental lastmodified --check-column created --last-value '2012-02-01 11:0:00'
#就是只导入created 比'2012-02-01 11:0:00'更大的数据。
echo "创建job"
#append
sqoop job
--create crm_intopieces_dk
-- import --connect jdbc:mysql://$server:$port/$mysql_database?tinyInt1isBit=false
--username $username
--password $password
--table $mysql_table
--hive-import --hive-table $hive_table
--incremental append
--check-column id
--last-value 0
echo "append增量导入模式启动。。。"
sqoop job --exec crm_intopieces_dk
exit

推荐阅读
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在使用达梦数据库时,管理员可能会遇到连接频繁中断或特定SQL语句语法错误的问题。这些问题通常源于开发人员在创建对象时的不规范操作。为了解决这些问题,建议对数据库配置进行优化,并确保所有SQL语句符合达梦数据库的标准语法。此外,定期检查和维护数据库连接参数,以及对异常日志进行详细分析,也有助于及时发现并解决问题。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 为了确保数据库的高效运行,本文介绍了一种方法,通过编写定时任务脚本来自动清理 `order` 表中状态为 0 或为空的无效订单记录。该脚本使用 PHP 编写,并设置时区为中国标准时间,每 10 分钟执行一次,以保持数据库的整洁和性能优化。此外,还详细介绍了如何配置定时任务以及脚本的具体实现步骤。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
author-avatar
蒋易之
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有