sqoop從oracle定時增量導入數據到hive
感謝:
http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.html
http://f.dataguru.cn/thread-94073-1-1.html sqoop.metastore.client.record.password
http://blog.csdn.net/ryantotti/article/details/14226635 開啟sqoop metastore
step 1 創建sqoop job
a.配置sqoop metastore服務
修改sqoop/conf/sqoop-site.xml文件
相關屬性:
sqoop.metastore.server.location
sqoop.metastore.server.port
sqoop.metastore.client.autoconnect.url
上面三個參數是為了實現共享(shared)metastore,"By default, job descriptions are saved to a private repository stored in $HOME/.sqoop/
. You can configure Sqoop to instead use a shared metastore, which makes saved jobs available to multiple users across a shared cluster. Starting the metastore is covered by the section on the sqoop-metastore
tool."這樣在其他的cluster上就可以共享job並執行。
如果不需要共享job,只需要把上面三個屬性在配置文件中用<!-- -->注釋掉即可。
sqoop.metastore.client.enable.autoconnect
sqoop.metastore.client.record.password 這個屬性是為了保存數據庫密碼的,默認情況下處於安全需要,不會將密碼保存到metastore中,這樣每次執行job時就需要重新輸入數據庫的密碼。為了定時執行,我們修改這個屬性,是他可以保存密碼。
修改如下:
<property> <name>sqoop.metastore.server.location</name> <value>/tmp/sqoop-metastore/shared.db</value> </property> <property> <name>sqoop.metastore.server.port</name> <value>16000</value> </property> <property> <name>sqoop.metastore.client.autoconnect.url</name> <value>jdbc:hsqldb:hsql://118.228.197.115:16000/sqoop</value> </property> <property> <name>sqoop.metastore.client.record.password</name> <value>true</value> </property> <!--注釋掉這個屬性 <property> <name>sqoop.metastore.client.enable.autoconnect</name> <value>false</value> </property> -->
b.啟動metasotre,控制台執行sqoop metastore命令(如果沒有配置前三個屬性,請跳過此步驟)
c.創建sqoop job
(為了方便執行,將下面的腳本寫入到文件保存,然后用chmod u+x FILENAME修改權限后,通過 ./FILENAME執行文件,創建job)
sqoop job --meta-connect jdbc:hsqldb:hsql://hostIP:16000/sqoop --create JOBNAME -- import --hive-import --incremental append --connect jdbc:oracle:thin:@DatabaseIP:1521/INSTANCENAME --username USERNAME --password PASSWD --verbose -m 1 --bindir /opt/sqoop/lib --table TABLENAME --check-column COLUMNNAME --last-value VALUE
注意:
1) 如果前面沒有配置共享metastore(即”sqoop.metastore.server.location" 、”sqoop.metastore.server.port“、”sqoop.metastore.client.autoconnect.url“三個屬性在配置文件中已經注釋了),那就需要將上面的腳本中 ”--meta-connect jdbc:hsqldb:hsql://hostIP:16000/sqoop“ 去掉。
2) "--create JOBNAME -- import"中”--“后面加一個空格再寫import命令,否則執行出錯
3) --check-column列不能是char varchar等,可以是date,int,
參考官網:http://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html 在官網頁面查找 check-column字段,快速定位到相關解釋
step 2 執行sqoop job看是否可以順利進行
<!--查看job列表,看是否成功創建--> sqoop job --list <!--執行job,測試能否正常執行,此處如果導入的數據量大,會很耗費時間--> sqoop job --exec JOBNAME
step 3 確定sqoop job可以正常執行后,編寫腳本定時執行
將下面的腳本寫入一個文本文件,如 execJob,然后執行 chmod u+x execJob 命令添加可執行權限
source /etc/profile rm TABLENAME.java -f sqoop job -exec JOBNAME
step 4 用crontab工具實現定時執行
執行crontab -e 命令,添加如下一行腳本,保存退出即可
# 每天1點鍾執行數據導入job 0 1 * * * execJob 1>/root/execlogs 2>&1
注意:execJob就是step3創建的腳本文件,需要用具體的路徑,如/root/execJob。“1>/root/execlogs 2>&1”這句是重定向stdout和stderr輸出對象到指定文件,可以在文件中查看執行輸出的信息。
crontab命令工具用法參考:
http://www.cnblogs.com/jiafan/articles/1153066.html
http://baike.baidu.com/view/1229061.htm