天天看點

sqoop 把 hdfs 和關系型資料庫 (mysql等)互導 簡介

        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