標籤:des style blog http color java os io
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/profilerm TABLENAME.java -fsqoop job -exec JOBNAME
step 4 用crontab工具實現定時執行
執行crontab -e 命令,添加如下一行指令碼,儲存退出即可
# 每天1點鐘執行資料匯入job0 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