sqoop1.4.4從oracle導資料到hive中

來源:互聯網
上載者:User

標籤: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-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/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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.