sqoop詳細例子-按天定時把postgresql數據庫中的數據導出到hdfs

環境信息:

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相關的路徑根據實際情況進行配置即可

保存後即可以定時執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章