Sqoop 各參數詳解

轉載sqoop
Sqoop可以在HDFS/Hive和關係型數據庫之間進行數據的導入導出,其中主要使用了import和export這兩個工具。這兩個工具非常強大,提供了很多選項幫助我們完成數據的遷移和同步。比如,下面兩個潛在的需求:

業務數據存放在關係數據庫中,如果數據量達到一定規模後需要對其進行分析或同統計,單純使用關係數據庫可能會成爲瓶頸,這時可以將數據從業務數據庫數據導入(import)到Hadoop平臺進行離線分析。
對大規模的數據在Hadoop平臺上進行分析以後,可能需要將結果同步到關係數據庫中作爲業務的輔助數據,這時候需要將Hadoop平臺分析後的數據導出(export)到關係數據庫。
這裏,我們介紹Sqoop完成上述基本應用場景所使用的import和export工具,通過一些簡單的例子來說明這兩個工具是如何做到的。

import和export工具有些通用的選項,如下表所示:

選項 含義說明
–connect 指定JDBC連接字符串
–connection-manager 指定要使用的連接管理器類
–driver 指定要使用的JDBC驅動類
–hadoop-mapred-home 指定$HADOOP_MAPRED_HOME路徑
–help 打印用法幫助信息
–password-file 設置用於存放認證的密碼信息文件的路
-P 從控制檯讀取輸入的密碼
–password 設置認證密碼
–username 設置認證用戶名
–verbose 打印詳細的運行信息
–connection-param-file 可選,指定存儲數據庫連接參數的屬性文件

數據導入工具import

import工具,是將HDFS平臺外部的結構化存儲系統中的數據導入到Hadoop平臺,便於後續分析。我們先看一下import工具的基本選項及其含義,如下表所示:

選項 含義說明
–append 將數據追加到HDFS上一個已存在的數據集上
–as-avrodatafile 將數據導入到Avro數據文件
–as-sequencefile $1
–as-textfile 將數據導入到普通文本文件(默認)
–boundary-query 邊界查詢,用於創建分片(InputSplit)
–columns <col,col,col…> 從表中導出指定的一組列的數據
–delete-target-dir 如果指定目錄存在,則先刪除掉
–direct 使用直接導入模式(優化導入速度)
–direct-split-size 分割輸入stream的字節大小(在直接導入模式下)
–fetch-size 從數據庫中批量讀取記錄數
–inline-lob-limit 設置內聯的LOB對象的大小
-m,–num-mappers 使用n個map任務並行導入數據
-e,–query 導入的查詢語句
–split-by 指定按照哪個列去分割數據
–table 導入的源表表名
–target-dir 導入HDFS的目標路徑
–warehouse-dir HDFS存放表的根路徑
–where 指定導出時所使用的查詢條件
-z,–compress 啓用壓縮
–compression-codec 指定Hadoop的codec方式(默認gzip)
–null-string 果指定列爲字符串類型,使用指定字符串替換值爲null的該類列的值
–null-non-string 如果指定列爲非字符串類型,使用指定字符串替換值爲null的該類列的值

1:sqoop查看mysql有多少個數據庫

bin/sqoop list-databases
–connect jdbc:mysql://172.16.71.27:3306
–username root
–password root

2:將mysql表中數據導入到hdfs中 imports

bin/sqoop import
–connect jdbc:mysql://172.16.71.27:3306/babasport
–username root
–password root
–table test_tb

ps:如果沒有指定hdfs的目錄 默認會將數據存到系統當前登錄用戶下 以表名稱命名的文件夾下

導入數據至指定hdfs目錄

bin/sqoop import
–connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test
–username root
–password 123456
–table my_user
–target-dir /user/beifeng/sqoop/imp_my_user
–num-mappers 1

ps: num-mappers 1 指定執行MapReduce的個數爲1

      target-dir  指定hdfs的目錄

sqoop 底層的實現就是MapReduce,import來說,僅僅運行Map Task

數據存儲文件

  • textfile
  • orcfile
  • parquet

將數據按照parquet文件格式導出到hdfs指定目錄

bin/sqoop import
–connect jdbc:mysql://172.16.71.27:3306/babasport
–username root
–password root
–table test_tb
–target-dir /user/xuyou/sqoop/imp_my_user_parquet
–fields-terminated-by ‘@’
–num-mappers 1
–as-parquetfile

ps fields-terminated-by ‘@’ 數據已@隔開
   as-parquetfile 數據按照parquet文件格式存儲
columns id,name 這個屬性 可以只導入id已經name 這兩個列的值

  • 在實際的項目中,要處理的數據,需要進行初步清洗和過濾
  • 某些字段過濾
  • 條件
  • join

bin/sqoop import
–connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test
–username root
–password 123456
–query ‘select id, account from my_user where $CONDITIONS’
–target-dir /user/beifeng/sqoop/imp_my_user_query
–num-mappers 1

ps: query 這個屬性代替了 table 可以通過用sql 語句來導出數據
(where $CONDITIONS’ 是固定寫法 如果需要條件查詢可以 select id, account from my_user where $CONDITIONS’ and id > 1)

壓縮導入至hdfs的數據 可以指定格式

bin/sqoop import
–connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test
–username root
–password 123456
–table my_user
–target-dir /user/beifeng/sqoop/imp_my_sannpy
–delete-target-dir
–num-mappers 1
–compress
–compression-codec org.apache.hadoop.io.compress.SnappyCodec
–fields-terminated-by ‘\t’

ps:compress 這個屬性 是 開啓壓縮功能

  compression-codec  這個屬性是 指定壓縮的壓縮碼  本次是SnappyCodec
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章