使用Sqoop實現HDFS與Mysql互轉

簡介

        Sqoop是一個用來將Hadoop和關係型數據庫中的數據相互轉移的工具,能夠將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導入到HadoopHDFS中,也能夠將HDFS的數據導入到關係型數據庫中。 html

http://sqoop.apache.org/ java

環境

    當調試過程出現IncompatibleClassChangeError通常都是版本兼容問題。 mysql

    爲了保證hadoopsqoop版本的兼容性,使用Cloudera sql

    Cloudera簡介: 數據庫

        Cloudera爲了讓Hadoop的配置標準化,能夠幫助企業安裝,配置,運行hadoop以達到大規模企業數據的處理和分析。 apache

http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDHTarballs/3.25.2013/CDH4-Downloadable-Tarballs/CDH4-Downloadable-Tarballs.html ide

    下載安裝hadoop-0.20.2-cdh3u6sqoop-1.3.0-cdh3u6 工具

目的

        將mysql數據轉換爲hadoop文件,從而可使用map/reduce進行大數據的分析,而後再將分析結果轉換回mysql,供業務查詢調用。 oop

安裝

    安裝比較簡單,直接解壓便可 測試

    惟一須要作的就是將mysqljdbc適配包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

MYSQLHDFS-示例

./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

-------------------------------------------------------


HDFSMYSQ-示例

./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

--------------------------------------------------------------------------

技巧

       導出導入的數據與字段的順序進行匹配

      從HDFS轉換回mysql 的時候,自動增加的主鍵字段處,能夠留空

示例參數說明

參數類型

參數名

解釋

公共

connect

Jdbc-url

公共

username

---

公共

password

---

公共

table

表名

Import

target-dir

制定輸出hdfs目錄,默認輸出到/user/$loginName/

export

fields-terminated-by

Hdfs文件中的字段分割符,默認是「\t

export

export-dir

hdfs文件的路徑


導出大數據的拆分:

m

使用多少個並行導入,默認是1,未開啓,數據量大的話會自動根據主鍵ID進行拆分

split-by

使用於沒有主鍵的表的拆分,指定拆分的字段,拆分的原則是分佈要普遍(自動拆分)

Where

同時能夠手動執行屢次,經過where條件進行手動拆分

 

參數

解釋

Job

定時做業, 我的以爲沒啥意義,一般我更相信crontab

eval

執行sql,遠程進行一些操做,可是通過測試發現不支持 delete

create-hive-table

複製某一個數據源的數據存儲到hive


其餘命令請參考:http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html

相關文章
相關標籤/搜索