sqoop是一個用來将hadoop和關系型資料庫中的資料互相轉移的工具,可以将一個關系型資料庫(例如 : mysql ,oracle ,postgres等)中的資料導入到hadoop的hdfs中,也可以将hdfs的資料導入到關系型資料庫中。
<a target="_blank" href="http://sqoop.apache.org/">http://sqoop.apache.org/</a>
當調試過程出現incompatibleclasschangeerror一般都是版本相容問題。
為了保證hadoop和sqoop版本的相容性,使用cloudera,
cloudera簡介:
cloudera為了讓hadoop的配置标準化,可以幫助企業安裝,配置,運作hadoop以達到大規模企業資料的處理和分析。
<a target="_blank" href="http://www.cloudera.com/content/cloudera-content/cloudera-docs/cdhtarballs/3.25.2013/cdh4-downloadable-tarballs/cdh4-downloadable-tarballs.html">http://www.cloudera.com/content/cloudera-content/cloudera-docs/cdhtarballs/3.25.2013/cdh4-downloadable-tarballs/cdh4-downloadable-tarballs.html</a>
下載下傳安裝hadoop-0.20.2-cdh3u6,sqoop-1.3.0-cdh3u6。
将mysql資料轉換為hadoop檔案,進而可以使用map/reduce進行大資料的分析,然後再将分析結果轉換回mysql,供業務查詢調用。
安裝比較簡單,直接解壓即可
唯一需要做的就是将mysql的jdbc适配包mysql-connector-java-5.0.7-bin.jar copy到$sqoop_home/lib下。
配置好環境變量:/etc/profile
export sqoop_home=/home/hadoop/sqoop-1.3.0-cdh3u6/
export path=$sqoop_home/bin:$path
./sqoop import --connect jdbc:mysql://10.8.210.166:3306/recsys --username root --password root --table shop -m 1 --target-dir
/user/recsys/input/shop/$today
輸出資料:
./hadoop fs -cat /user/recsys/input/shop/2013-05-07/*
生成的hdfs資料
287,516809,0,0,6,25,45.78692,126.65384
288,523944,0,0,29,6,120.26087,30.17264
-------------------------------------------------------
./sqoop export --connect jdbc:mysql://10.8.210.166:3306/recsys --username root --password root --table shopassoc --fields-terminated-by
',' --export-dir /user/recsys/output/shop/$today
輸入資料:
./hadoop fs -cat /user/recsys/output/shop/2013-05-07/*
hdfs原始資料
null,857207,729974,947.0818,29,2013-05-08 10:22:29
null,857207,524022,1154.2603,29,2013-05-08 10:22:29
--------------------------------------------------------------------------
參數類型
參數名
解釋
公共
connect
jdbc-url
username
---
password
table
表名
import
target-dir
制定輸出hdfs目錄,預設輸出到/user/$loginname/
export
fields-terminated-by
hdfs檔案中的字段分割符,預設是“\t”
export-dir
hdfs檔案的路徑
導出大資料的拆分:
m
使用多少個并行導入,預設是1,未開啟,資料量大的話會自動根據主鍵id進行拆分
split-by
使用于沒有主鍵的表的拆分,指定拆分的字段,拆分的原則是分布要廣泛(自動拆分)
where
同時可以手動執行多次,通過where條件進行手動拆分
參數
job
定時作業, 個人覺得沒啥意義,通常我更相信crontab
eval
執行sql,遠端進行一些操作,但是經過測試發現不支援 delete
create-hive-table
複制某一個資料源的資料存儲到hive