sqoop详细例子-按天定时把postgresql数据库中的数据导出到hdfs

本文介绍如何使用SQOOP 1.4.6版本在每天凌晨00:30按天从PostgreSQL数据库导出数据至HDFS,并实现按年月日分级目录存储。通过编写shell脚本并结合Linux的Crontab定时任务,实现自动化数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境信息:

sqoop 1.4.6

使用需求:

每天凌晨00:30按天把postgresql数据库中的数据导出到hdfs,并按年月日分级分目录存储

详细描述:

首先先写好sqoop脚本,在配置定时任务

sqoop脚本:

#!/bin/bash
source /etc/profile
today=$(date +%Y-%m-%d\ 00:00:00)
preday=$(date -d yesterday +%Y-%m-%d\ 00:00:00)
year=$(date -d yesterday +%Y)
month=$(date -d yesterday +%m)
day=$(date -d yesterday +%d)
filename1="/marinetraffic/voyage/$year/$month/$day"
filename2="/marinetraffic/position/$year/$month/$day"
echo "start-sqoop-voyage"
sqoop import --connect jdbc:mysql://192.168.10.43/haixinyuan --username root --password root --table vessel_voyage_history --compress --compression-codec gzip --where "send_time < '$today' and send_time >= '$preday'" --fields-terminated-by '\t' --target-dir $filename1 -m 1 &&
echo "done $preday"-"$today" &&
echo "start-sqoop-position" &&
sqoop import --connect jdbc:mysql://192.168.10.43/haixinyuan --username root --password root --table vessel_position --compress --compression-codec gzip --where "send_time < '$today' and send_time >= '$preday'" --fields-terminated-by '\t' --target-dir $filename2 -m 1 &&
echo "done $preday"-"$today"

解释:

第1行是刷新环境变量,使得在脚本中可以直接使用sqoop命令

第2,3行是获取当天零点和前一天零点的时间,用来在sqoop命令中拼接where条件获取指定数据

第4,5,6行是获取年月日信息用以拼接hdfs存储路径

第7,8行是拼接hdfs的存储路径

第10,13行是针对两个不同的表生成两个sqoop任务,参数配置请参照官网相关信息

配置完成后保存成sqoop.sh,赋给755权限

定时任务:

通过linux自带的crontab来设置

执行crontab -e进行配置

30 00 * * * /root/sqoop.sh > /root/sqoop.txt

该配置的意思是每天00:30分执行sqoop.sh脚本,并将执行结果追加到sqoop.txt上,其中sqoop.sh以及sqoop.txt相关的路径根据实际情况进行配置即可

保存后即可以定时执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值