Sqoop配置&基本使用


Sqoop

什么是 Sqoop

  • Sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫(mysql、postgresql...) 間進行數據的傳遞,可以將一個關系型數據庫(例如 : MySQL ,Oracle ,Postgres 等)中的 數據導進到 Hadoop 的 HDFS 中,也可以將 HDFS 的數據導進到關系型數據庫中
  • Sqoop2 的最新版本是 1.99.7。請注意,2 與 1 不兼容,且特征不完整,它並不打算用於生產部署。

Sqoop 原理

  • 將導入或導出命令翻譯成 mapreduce 程序來實現。
  • 在翻譯出的 mapreduce 中主要是對 inputformat 和 outputformat 進行定制。

Sqoop 安裝(重點)

  • 解壓 Sqoop 包到指定目錄

    • tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/
  • 修改 & 重命名配置文件

    • 重命名配置文件

      • mv sqoop-env-template.sh sqoop-env.sh
    • 修改配置文件

      • export HADOOP_COMMON_HOME={hadoop 安裝目錄}
        export HADOOP_MAPRED_HOME={hadoop 安裝目錄}
        export HIVE_HOME={Hive 安裝目錄}

      • 注:配置文件中還可以添加其他組件的配置,例如 Zookeeper,Hbase 等,不設置的情況下,會報警告

  • 拷貝 jdbc 驅動到 sqoop 的 lib 目錄下

    • cp mysql-connector-java-5.1.37.jar /opt/module/sqoop-1.4.6/lib/
  • 配置環境變量,方便執行命令

    • export SQOOP_HOME={sqoop 安裝目錄}
      export PATH=$PATH:$SQOOP_HOME/bin

    • 生效環境變量

      • source /etc/profile
  • 連接 MySQL 測試

    • sqoop list-databases --connect jdbc:mysql://主機名:3306/ --username root --password mysql密碼

    • 出現的日志包含如下結果則 MySQL 連接成功

      • information_schema
        metastore
        mysql
        oozie
        performance_schema

Sqoop 使用

環境准備

  • 創建 MySQL 數據庫
    • create database sqoop_test;
  • 創建表
    • create table sqoop_tbl (id int(4) PRIMARY KEY AUTO_INCREMENT,name varchar(255));
  • 添加數據
    • insert into sqoop_tbl (name) values ('zhangsan');
    • insert into sqoop_tbl (name) values ('lisi');
    • insert into sqoop_tbl (name) values ('wangwu');
    • insert into sqoop_tbl (name) values ('zhaoliu');

導入數據(重點)

  • 在 Sqopp 中,導入的概念指的是從非大數據集群(MySQL等)向大數據集群(HDFS,HIVE等)傳輸數據,叫做導入,使用 import 關鍵字

全部數據導入

  • sqoop import
    --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test
    --username root --password 111111
    --table sqoop_tbl
    --target-dir /user/sqoop_test
    --delete-target-dir
    --num-mappers 1
    --fields-terminated-by "\t"


    sqoop import Sqoop 導入命令

    --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test 導入的目標連接

    --username root --password 密碼 連接的密碼

    --table sqoop_tbl 導入數據的來源表

    --target-dir /user/sqoop_test 導入到 hdfs 上的目錄

    --delete-target-dir 若 hdfs 上的目錄存在,則刪除

    --num-mappers 1 設置 MapTask 的任務數

    --fields-terminated-by "\t" 導入的數據使用什么分隔符

查詢導入

  • sqoop import
    --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test
    --username root
    --password 111111
    --target-dir /user/sqoop_test2
    --delete-target-dir
    --num-mappers 1
    --fields-terminated-by "\t"
    --query 'select * from sqoop_tbl where id =1 and $CONDITIONS;'


    --query 'select * from sqoop_tbl where id =1 and $CONDITIONS;' 查詢的語句,其中,$CONDITIONS 是一個必須值

    注: 如果 query 后使用的是雙引號,則$CONDITIONS 前必須加轉移符,防止 shell 識別為自己的 變量。

導入指定列

  • sqoop import --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --target-dir user/sqoop_test4 --delete-target-dir --num-mappers 1 --fields-terminated-by '\t' --columns id,name --table sqoop_tbl


    --columns id,name 導入指定的字段

查詢條件導入

  • sqoop import --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --target-dir /user/sqoop-test4 --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --table sqoop_tbl --where 'id=4'


    where 'id=4' 導入數據時,加上條件

導入數據到 Hive

  • sqoop import --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --table sqoop_tbl --num-mappers 1 --hive-import --fields-terminated-by '\t' --hive-overwrite --hive-table sqoop_tbl


    --hive-import 導入數據到 Hive
    --fields-terminated-by '\t' 行數據使用 \t 作為分隔符
    --hive-overwrite 覆蓋 Hive 中的數據
    --hive-table sqoop_tbl 指定導入到 Hive 的那張表

    補充: 該過程分為兩步,第一步將數據導入到 hdfs ,默認路徑是 /user/用戶名/表名,第二步將導入的數據遷移到 Hive 倉庫

導入數據到 Hbase

  • sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table company --columns "id,name,sex" --column-family "info" --hbase-create-table --hbase-row-key "id" --hbase-table "hbase_company" --num-mappers 1 --split-by id


    若沒學過 Hbase 了解即可,比賽時,大概率使用 Hive

導出數據(重點)

  • 在 Sqoop 中,“導出”概念指:從大數據集群(HDFS,HIVE,HBASE)向非大數據集群 (RDBMS)中傳輸數據,叫做:導出,即使用 export 關鍵字。

Hive 導出到 MySQL

  • sqoop export --connect jdbc:mysql://master-3.x-wfb:3306/sqoop_test --username root --password 111111 --table sqoop_tbl --num-mappers 1 --export-dir /user/hive/warehouse/sqoop_tbl --input-fields-terminated-by '\t'


    --export-dir /user/hive/warehouse/sqoop_tbl 導出數據的目錄
    --input-fields-terminated-by '\t' 導出數據時,使用什么分隔符分割字段
    --table sqoop_tbl 導出到 MySQL 的那張表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM