sqoop1.4.4從oracle導數據到hive中


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-metastoretool."這樣在其他的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM