Sqooop- 使用Sqoop進行數據的導入導出


Sqoop是Apache旗下的一個開源框架,專門用來做數據的導入和導出。

官網:https://sqoop.apache.org/

Sqoop的安裝非常簡單,只需要把下載下來的tar包解壓設置兩個環境變量就可以了

1.安裝部署

  下載版本:sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

  官網:http://mirror.bit.edu.cn/apache/sqoop/1.4.6/

1.1把tar包解壓到/usr/sqoop 

tar -xvzf   sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz  /usr/    //解壓到指定路徑
 mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz     sqoop      //重命名,可選可不選

1.2設置環境變量

  把Sqoop添加到PATH文件, vim /etc/profile ,設置

export SQOOP_HOME=/usr/sqoop export PATH=$PATH:$SQOOP_HOME/bin

 

source /etc/profile

  因為Sqoop需要用到hadoop下面的jar包進行操作,所以需要設置HADOOP_COMMON_HOME 來指明hadoop安裝在那個目錄下。

[root@srv01 ~]# export HADOOP_COMMON_HOME=/usr/hadoop    //指明hadoop安裝路徑
[root@srv01 ~]# export HADOOP_MAPRED_HOME=/usr/hadoop  //因為hadoop最終把它的作業轉換成mapreduce進行提交執行,實際上和hadoop home目錄相同

  也可以用另一種方式,配置sqoop/conf目錄下的sqoop-env.sh

vim   sqoop-env.sh

 把jdbc驅動包放到sqoop的lib目錄下,如果里面有就不需要加(里面有個MySQL驅動包)。

1.3驗證安裝完成

輸入  sqoop help  ,如下面所示,表示安裝正常,另,沒有設置PATH變量的需要到sqoop/bin執行  ./sqoop help 

[root@srv01 ~]# sqoop help Warning: /usr/sqoop/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /usr/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 17/08/12 03:49:43 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 usage: sqoop COMMAND [ARGS] Available commands: codegen Generate code to interact with database records create-hive-table Import a table definition into Hive eval Evaluate a SQL statement and display the results export Export an HDFS directory to a database table help List available commands import Import a table from a database to HDFS import-all-tables  Import tables from a database to HDFS import-mainframe   Import datasets from a mainframe server to HDFS job Work with saved jobs list-databases List available databases on a server list-tables        List available tables in a database merge Merge results of incremental imports metastore Run a standalone Sqoop metastore version Display version information See 'sqoop help COMMAND' for information on a specific command.

 

2.使用Sqoop進行數據遷移

下面通過6個例子展示使用Sqoop進行數據遷移

2.1使用Sqoop導入MySQL數據到HDFS

[root@srv01 ~]# sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns 'uid,uname' -m 1 -target-dir '/sqoop/user'; //-m 指定map進程數,-target-dir指定存放目錄

2.2使用Sqoop導入MySQL數據到Hive中

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns 'uid,uname' -m 1 

2.3使用Sqoop導入MySQL數據到Hive中,並且指定表名

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns 'uid,uname' -m 1 --hive-table user1; //如果hive中沒有這張表,則創建這張表保存對應數據

2.4使用Sqoop導入MySQL數據到Hive中,並使用where條件

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns 'uid,uname' -m 1 --hive-table user2 where uid=10;

2.5使用Sqoop導入MySQL數據到Hive中,並使用查詢語句

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root -m 1 --hive-table user6 --query 'select * from user where uid<10 and $conditions' --target-dir /sqoop/user5;
//
and $conditions 必須加在查詢語句中,不加報錯
 
        

2.6使用Sqoop將Hive中的數據導出到MySQL中

[root@srv01 ~]# sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root -m 1 --table user5 --export-dir /sqoop/user5 //兩張表的列的個數和類型必須相同

 

 

 使用Sqoop測試與數據庫的聯通性

sqoop list-databases  --connect jdbc:mysql://localhost:3308/ --username guesttest --password guesttest

 

 注意:在使用sqoop的時候用jdbc連接數據庫的時候盡量不要使用localhost或127.0.0.1,應該用主機的IP,為什么呢?因為在使用sqoop底層是會調用mapreduce去做數據的遷移,采用localhost時,resourcemanager把task分到每個worker的時候,他們的jdbc也是連接localhost或127.0.0.1,是無法與遠程的數據通信的,這時候跑mapreduce就會報錯。


免責聲明!

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



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