热门标签 | 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

推荐阅读
  • 怎么快速学好大数据开发?
    新如何学习大数据技术?大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术?大数据的应用前景等等问题,已成为热门大数据领域热门问题,以下是对新手如何学习大数据技术问题的解答! ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出, ... [详细]
  • MySQL数据 实时同步到KafkaBinlog canal、Maxwell、Kafka Connect 实现MySQL增量同步
    一、需求分析早期业务借助Sqoop将Mysql中的数据同步到Hive、hdfs来进行数据分析,使用过程中也带来了一些问题:虽然Sqoop支持增量同步但还属于粗粒度的离线同步,无法满 ... [详细]
  • 从接触DataX起就有一个疑问,它和Sqoop到底有什么区别,昨天部署好了DataX和Sqoop,就可以对两者进行更深入的了解了。两者从原理上看有点相似,都是解决异构环境的数据交换 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
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社区 版权所有