sqoop同步mysql到hive

思路:因为业务数据量较大,只需同步2018-01-01 00:00:00之后的数据。历史数据用全量同步,之后使用增量同步

一、全量同步

Sqoop脚本: sync_month.sh

#!/bin/bash

#数据库配置信息
mysql_ip='10.10.10.10:3306'
mysql_database='dataBaseName'
mysql_connect="jdbc:mysql://${mysql_ip}/${mysql_database}"
mysql_username='userName'
mysql_pwd='password'

table_name='tableName'
#需要通过hadoop fs -ls /user/hive/warehouse/ 看库是否已经存在,若不存在则先创建数据库
target_dir='/user/hive/warehouse/sync.db'
ch_column='ucid'
sp_column='account'

echo "####################### start table $table_name #############################"

start='2018-01-01 00:00:00'
end='2021-07-18 00:00:00'
tmp_date=$(date -d "$start 1 month" +'%Y-%m-%d %H:%M:%S')

t1=`date -d "$tmp_date" +%s`
t2=`date -d "$end" +%s`

while [ $t1 -le $t2 ]
do
echo "$start------------$tmp_date"
. $HOME/.bash_profile;
$SQOOP_HOME/bin/sqoop import \
"-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \
--connect ${mysql_connect} \
--username ${mysql_username} \
--password ${mysql_pwd} \
--split-by ${sp_column} \
--m 1 \
--query "SELECT * FROM $table_name WHERE create_date >= \"$start\" AND create_date < \"$tmp_date\" AND \$CONDITIONS" \
--target-dir /user/hive/warehouse/accupasscn_sync.db/${table_name} \
--hive-table accupasscn_sync.${table_name} \
--hive-import \
--incremental append \
--check-column ${ch_column} \
--direct \
--null-string '\\N' \
--null-non-string '\\N' \
--hive-delims-replacement '\0D' \
--fields-terminated-by '\001'
start=$tmp_date
tmp_date=$(date -d "$tmp_date 1 month" +'%Y-%m-%d %H:%M:%S')
t1=`date -d "$tmp_date" +%s`
done

echo "####################### end table $table_name #############################"

直接放在服务器上执行,并记录执行日志:

nohup ./sync_month.sh > ./logs/sync_month.log 2>&1 &

二、增量同步

对新增、更新的数据 ,采用增量方式来同步到hive,使用crontab 来定时执行sqoop job

准备添加sqoop job脚本:sync_job.sh

#数据库配置信息
mysql_ip='10.10.10.10:3306'
mysql_database='dataBaseName'
mysql_connect="jdbc:mysql://${mysql_ip}/${mysql_database}"
mysql_username='userName'
mysql_pwd='password'

hive_database='sync'
last_time="2021-07-18 00:00:00"

#sqoop导入数据
echo "################################### start ###########################################"

table_name='tableName'
mg_key='account'
target_dir="/user/hive/warehouse/${hive_database}.db/${table_name}"
job_name="${table_name}_job"

. $HOME/.bash_profile;
$SQOOP_HOME/bin/sqoop job \
--create "$job_name" \
-- import \
--connect "$mysql_connect" \
--username "$mysql_username" \
--password-file /input/sqoop/pwd/mysql.pwd \
--query "SELECT * FROM $table_name WHERE \$CONDITIONS" \
--target-dir "$target_dir" \
--split-by "$mg_key" \
--incremental lastmodified \
--merge-key "$mg_key" \
--check-column update_date \
--last-value "$last_time" \
--m 1 \
--null-string '\\N' \
--null-non-string '\\N' \
--input-null-non-string '\\N' \
--hive-delims-replacement '\0D' \
--fields-terminated-by '\001'

echo "################################### ${job_name} had created ###########################################"

服务器上直接执行脚本。
通过sqoop命令来查看sqoop 的任务

${SQOOP_HOME} :sqoop安装路径
${SQOOP_HOME}/bin/sqoop job --list 查看所有任务列表
${SQOOP_HOME}/bin/sqoop job --show job_name 查看任务
${SQOOP_HOME}/bin/sqoop job --delete job_name 删除任务

需要注意的是 ,连接数据库的密码 ,通过--password的方式配置不行。需要通过--password-file后面跟文件路径来配置。sqoop在创建job时,规定密码文件必须存放在HDFS上,并且权限必须设置成为是400。

  • echo -n "hadoop" > mysql.pwd
  • hadoop fs -mkdir -p /input/sqoop/pwd/
  • hadoop fs -put mysql.pwd /input/sqoop/pwd/
  • hadoop fs -chmod 400 /input/sqoop/pwd/mysql.pwd //将密码设置成为仅读权限

在sqoop/conf配置目录下的sqoop-site.xml中添加如下配置:

<property>
    <name>sqoop.metastore.client.record.password</name>
    <value>true</value>
    <description>If true, allow saved passwords in the metastore.
    </description>
</property>

配置crontab 来定时执行sqoop job

0,30 * * * * /home/hadoop/sqoop/bin/sqoop job --exec job_name1>>/home/hadoop/mysql_sync/logs/job_name.log 2>&1

执行/sbin/service crond reload来刷新配置

需要注意的是sqoop命令中, 最好使用绝对路径来代替全局变量,因为cornd执行的时候,不会考虑你所配置的全局变量 。因为sqoop 是基于java的 ,所以需要使用到jdk环境变量 ,在crontab的最上面配上jdk的安装路径 JAVA_HOME=/usr/java/latest (通过profile文件可以查看服务器的jdk安装路径,可以直接copy过来)

验证的时候 ,可以通过${SQOOP_HOME}/bin/sqoop job --show job_name 来查看任务执行的last value 看上次执行的时间 ,可以看日志 ,来确定任务有没有成功执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 一、Sqoop 介绍 Sqoop 是一款用于 hadoop 和关系型数据库之间数据导入导出的工具。可以通过 Sqo...
    w1992wishes阅读 1,455评论 0 0
  • 一.sqoop的简单概论 1.sqoop产生的原因: A. 多数使用hadoop技术的处理大数据业务的企业,有大量...
    宇晨棒棒的阅读 50,547评论 0 20
  • Crontab定时Sqoop脚本问题 问题描述:如果上图我们的任务定时2小时一次,正常情况下任务在2小时可以执行完...
    忘净空阅读 826评论 0 1
  • 1.大数据协作框架: 大数据协作框架是Hadoop 2.x生态系统中几个辅助框架。最为常见的是以下几个: 数据转换...
    奉先阅读 3,066评论 0 2
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,536评论 28 53