1. 程式人生 > 實用技巧 >Sqoop的安裝匯入和匯出

Sqoop的安裝匯入和匯出

  • Sqoop作用以及安裝

  • Sqoop的使用

1.  Sqoop的簡介

    Sqoop是一款開源的工具,主要用於在Hadoop(Hive)與傳統的資料庫(mysql,postgresql)見進行資料的傳遞,可以將一個關係型資料庫(mysql,oracle,postgres)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料到進到關係型庫中。

2.  Sqoop作用以及安裝

  1. Sqoop專案開始於2009年,最早是作為Hadoop的一個第三方模組存在,後來為了讓使用者能夠快速部署,也為了讓開發人員能夠更快速的迭代開發,Sqoop獨立成為Apache專案。
  2. 下載Sqoop


  3. 安裝配置Sqoop
    1. 上傳檔案到LinuX的app目錄
    2. 解壓檔案
      1. tar -zxvf sqoop-1.4.6-cdh5.7.0.tar.gz
      2. 修改/homehadoop01/app/sqoop-1.4.6-cdh5.7.0/bin/configure-sqoop檔案
    3. 把其中關於Zookeep和HBase的行都註釋掉,除非叢集已經安裝了Zoopkep和HBase
    4. 修改環境變數
      1. root使用者,主節點執行,在/etc/profile檔案末尾追加:
        • export SQOOP_HOME=檔案路徑
        • export PATH=$SQOOP_HOME/bin:$PATH
    5. 立即生效:source/etc/profile
    6. 拷貝mysql的jdbc.jar檔案sqoop的lib目錄
    7. 驗證安裝是否成功:sqoop version
      • sqoop list-database --connect jdbc:mysql://master:3306/ --username root -P

2.  Sqoop的使用

    在導資料的時候需要兩個hive的包(hive-conn.... hive-exce...)複製到sqoop的lib下

    • Sqoop是一個用來講Hadoop和關係型資料庫中的資料相互轉移的工具,可以將一個關係型資料庫中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料到進到關係型資料庫中。
  1. MySQL到HDFS
    1. MySQL到HDFS
      •  
        Mysql建表:
        在MySQL中執行:
        create table Persons(
        id int,
        name varchar(50),
        age int
        );
        insert into Persons values (1,'楊過',20),(2,'小龍女',21),(3,'張無忌',22);
        sqoop import \
        --connect jdbc:mysql://master:3306/test \
        --username root \
        --password 123456 \
        --table Persons \
        --target-dir '/opt/11-25' \
        --fields-terminated-by ',' \
        --m 1
        解釋:
        connect:連線資料庫的驅動
        usernaem:使用者
        password:密碼
        table:mysql的表
        target-dir '路徑':目標路徑(HDFS的路徑)
        fields-delimitd-by:擷取方式
        m 1 :用幾個map框架
    2. where 條件新增 (必須寫在單引號之中)
      • sqoop import \
        --connect jdbc:mysql://master:3306/test \
        --username root \
        --password 123456 \
        --table Persons \
        --where 'id = 1 or id = 3' \
        --target-dir '/opt/11-25-2' \
        --fields-terminated-by ',' \
        --m 1;
    3. query查詢 必須以:AND $CONDITIONS 結尾
      • sqoop import \
        --connect jdbc:mysql://master:3306/test \
        --username root \
        --password 123456 \
        --query 'select * from Persons where age = 22 AND $CONDITIONS' \
        --target-dir '/opt/11-25-3' \
        --fields-terminated-by ',' \
        --m 1;
  2. MySQL匯入資料到Hive
    • Hive建表:
      create database test;
      use database
      create table Persons(
      id int,
      name varchar(50),
      age int
      )row format delimited fields terminated by ',';
      
      本地執行:
      sqoop import \
      --connect jdbc:mysql://master:3306/test \
      --username root \
      --password 123456 \
      --table Persons \
      --delete-target-dir \
      --hive-import \
      --hive-database test \
      --hive-table Persons \
      --fields-terminated-by ',' \
      -m 1;
  3. Hive匯出資料到MySQL
    •  
      MySQL建表:
      create table stu(
      id int,
      name varchar(50),
      age int
      );
      export 
      sqoop export \
      --connect jdbc:mysql://master:3306/test \
      --username root \
      --password 123456 \
      --table stu \
      --export-dir "/user/hive/warehouse/test.db/persons/part-m-00000" \
      --input-fields-terminated-by ',' \
      -m 1;
      解釋:
      export-dir "/user/hive/warehouse/test.db/persons/part-m-00000" \:要匯出的路徑
      input-fields-terminated-by ',' \:匯入的擷取方式