sqoop的安裝和簡單使用案例

  1. 概述
    sqoop是apache旗下一款“Hadoop和關係數據庫服務器之間傳送數據”的工具。
    導入數據:MySQL,Oracle導入數據到Hadoop的HDFS、HIVE、HBASE等數據存儲系統;
    導出數據:從Hadoop的文件系統中導出數據到關係數據庫mysql等.

  2. 原理
    將導入或導出命令翻譯成mapreduce程序來實現
    在翻譯出的mapreduce中主要是對inputformat和outputformat進行定製

  3. 安裝
    安裝sqoop的前提是已經具備java和hadoop的環境
    3.1 下載並解壓
    這裏用的是cdh版本sqoop.
    下載地址 http://archive.cloudera.com/cdh5/cdh/5/
    sqoop1版本詳細下載地址 http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.14.0.tar.gz
    sqoop2版本詳細下載地址http://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.14.0.tar.gz
    裏使用sqoop1的版本,下載之後上傳到/export/softwares目錄下,然後進行解壓

    cd /export/softwares
    tar -zxvf sqoop-1.4.6-cdh5.14.0.tar.gz -C ../servers/
    

    3.2 修改配置文件

    cd /export/servers/sqoop-1.4.6-cdh5.14.0/conf/
    cp sqoop-env-template.sh  sqoop-env.sh
    vim sqoop-env.sh
    #修改內容
    export HADOOP_COMMON_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
    export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
    export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0
    

    3.3 加入額外的依賴包
    sqoop的使用需要添加兩個額外的依賴包,一個是mysql的驅動包,一個是java-json的的依賴包,不然就會報錯.
    mysql-connector-java-5.1.40.jar
    java-json.jar
    將這個兩個jar包添加到sqoop的lib目錄下

  4. 驗證啓動

    cd /export/servers/sqoop-1.4.6-cdh5.14.0
    bin/sqoop-version
    
  5. Sqoop的數據導入
    5.1 導入數據庫表數據到HDFS
    下面的命令用於從MySQL數據庫服務器中的emp表導入HDFS。

    bin/sqoop import --connect jdbc:mysql://192.168.1.101:3306/userdb --password admin --username root --table emp --m 1
    

    在導入表數據到HDFS使用Sqoop導入工具,我們可以指定目標目錄。
    使用參數 --target-dir來指定導出目的地,
    使用參數–delete-target-dir來判斷導出目錄是否存在,如果存在就刪掉
    使用參數–fields-terminated-by可以指定分隔符

    bin/sqoop import  --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --delete-target-dir --table emp  --target-dir /sqoop/emp --m 1 --fields-terminated-by '\t'
    

    5.2 導入關係表到HIVE
    將我們mysql表當中的數據直接導入到hive表中的話,我們需要將hive的一個叫做hive-exec-1.1.0-cdh5.14.0.jar的jar包拷貝到sqoop的lib目錄下

    cp /export/servers/hive-1.1.0-cdh5.14.0/lib/hive-exec-1.1.0-cdh5.14.0.jar /export/servers/sqoop-1.4.6-cdh5.14.0/lib/
    

    準備hive數據庫與表

    hive (default)> create database sqooptohive;
    hive (default)> use sqooptohive;
    hive (sqooptohive)> create external table emp_hive(id int,name string,deg string,salary int ,dept string) row format delimited fields terminated by '\001';
    

    導入

    bin/sqoop import --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --table emp --fields-terminated-by '\001' --hive-import --hive-table sqooptohive.emp_hive --hive-overwrite --delete-target-dir --m 1
    

    hive表數據查看
    select * from emp_hive;
    hive查看
    5.3 導入關係表到hive並自動創建hive表
    我們也可以通過命令來將我們的mysql的表直接導入到hive表當中去

    bin/sqoop import --connect jdbc:mysql://172.16.43.67:3306/userdb --username root --password admin --table emp_conn --hive-import -m 1 --hive-database sqooptohive;
    

    通過這個命令,我們可以直接將我們mysql表當中的數據以及表結構一起倒入到hive當中去

  6. Sqoop的數據導出
    hdfs導出到mysql
    通過export來實現數據的導出,將hdfs的數據導出到mysql當中去

    bin/sqoop export \
    --connect jdbc:mysql://172.16.43.67:3306/userdb \
    --username root --password admin \
    --table emp_out \
    --export-dir /sqoop/emp \
    --input-fields-terminated-by ","
    

    sqoop更多參數可以參考sqoop官網 sqoop官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章