複製鏈接
請複製以下鏈接發送給好友

sqoop

鎖定
Sqoop(發音:skup)是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。
Sqoop項目開始於2009年,最早是作為Hadoop的一個第三方模塊存在,後來為了讓使用者能夠快速部署,也為了讓開發人員能夠更快速的迭代開發,Sqoop獨立成為一個Apache項目。
外文名
sqoop
所屬學科
大數據
發    音
skup
起始時間
2009年
作    用
數據遷移

sqoop出現背景

Apache框架Hadoop是一個越來越通用的分佈式計算環境,主要用來處理大數據。隨着雲提供商利用這個框架,更多的用户將數據集在Hadoop和傳統數據庫之間轉移,能夠幫助數據傳輸的工具變得更加重要。Apache Sqoop就是這樣一款工具,可以在Hadoop和關係型數據庫之間轉移大量數據。

sqoop特徵

對於某些NoSQL數據庫它也提供了連接器。Sqoop,類似於其他ETL工具,使用元數據模型來判斷數據類型並在數據從數據源轉移到Hadoop時確保類型安全的數據處理。Sqoop專為大數據批量傳輸設計,能夠分割數據集並創建maptask任務來處理每個區塊。

sqoop注意事項

儘管有以上的優點,在使用Sqoop的時候還有一些事情需要注意。首先,對於默認的並行機制要小心。默認情況下的並行意味着Sqoop假設大數據是在分區鍵範圍內均勻分佈的。這在當你的源系統是使用一個序列號發生器來生成主鍵的時候工作得很好。打個比方,當你有一個10個節點的集羣,那麼工作負載是在這10台服務器上平均分配的。但是,如果你的分割鍵是基於字母數字的,擁有比如以“A”作為開頭的鍵值的數量會是“M”作為開頭鍵值數量的20倍,那麼工作負載就會變成從一台服務器傾斜到另一台服務器上。
如果你最擔心是性能,那麼可以研究下直接加載。直接加載繞過通常的Java數據庫連接導入,使用數據庫本身提供的直接載入工具,比如MySQLmysqldump。但是有特定數據庫的限制。比如,你不能使用MySQL或者PostgreSQL的連接器來導入BLOB和CLOB類型。也沒有驅動支持從視圖的導入。Oracle直接驅動需要特權來讀取類似dba_objects和v_$parameter這樣的元數據。請查閲你的數據庫直連驅動程序侷限性的相關文檔。
進行增量導入是與效率有關的最受關注的問題,因為Sqoop專門是為大數據集設計的。Sqoop支持增量更新,將新記錄添加到最近一次的導出的數據源上,或者指定上次修改的時間戳
由於Sqoop將數據移入和移出關係型數據庫的能力,其對於Hive—Hadoop生態系統裏的著名的類SQL數據倉庫—有專門的支持不足為奇。命令“create-hive-table”可以用來將數據表定義導入到Hive

sqoop常用命令

sqoop import 導入
--connect jdbc:mysql://127.0.0.1:3306/$db_name 連接數據庫
--username root 數據庫用户
--password root 數據庫密碼
--target-dir /origin_data/$db_name/db/$1/$db_date HDFS地址
--table db_table 源頭數據表
--delete-target-dir HDFS地址存在刪除
--num-mappers $2 \--split-by $3 maptask數量
--input-null-string '\\N' 空值轉換
--input-null-non-string '\\N' 非空字符串替換
--fields-terminated-by "\t" 字符串分割
--query "$4"' and $CONDITIONS;'
-hive-home <dir> 重寫$HIVE_HOME
-hive-import 插入數據到hive當中,使用hive的默認分隔符
-hive-overwrite 重寫插入
-create-hive-table 建表,如果表已經存在,該操作會報錯
-hive-table <table-name> 設置到hive當中的表名
-hive-drop-import-delims 導入到hive時刪除 \n, \r, and \0001
-hive-delims-replacement 導入到hive時用自定義的字符替換掉 \n, \r, and \0001
-hive-partition-key hive分區的key
-hive-partition-value <v> hive分區的值
-map-column-hive <map> 類型匹配,sql類型對應到hive類型

sqoop示例

sqoop import \
--connect jdbc:mysql://127.0.0.1(可以使用虛擬機名稱):3306/database \
--username root \
--password root \
--table tablename \
--target-dir /a/a
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"