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
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
