特徵
Sqoop是一個用來將Hadoop和關係型資料庫中的數據相互轉移的工具,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。
對於某些NoSQL資料庫它也提供了連線器。Sqoop,類似於其他ETL工具,使用元數據模型來判斷數據類型並在數據從數據源轉移到Hadoop時確保類型安全的數據處理。Sqoop專為大數據批量傳輸設計,能夠分割數據集並創建Hadoop任務來處理每個區塊。
示例
(例如 : MySQL,Oracle,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。
注意事項
儘管有以上的優點,在使用Sqoop的時候還有一些事情需要注意。首先,對於默認的並行機制要小心。默認情況下的並行意味著Sqoop假設大數據是在分區鍵範圍內均勻分布的。這在當你的源系統是使用一個序列號發生器來生成主鍵的時候工作得很好。打個比方,當你有一個10個節點的集群,那么工作負載是在這10台伺服器上平均分配的。但是,如果你的分割鍵是基於字母數字的,擁有比如以“A”作為開頭的鍵值的數量會是“M”作為開頭鍵值數量的20倍,那么工作負載就會變成從一台伺服器傾斜到另一台伺服器上。
如果你最擔心是性能,那么可以研究下直接載入。直接載入繞過通常的Java資料庫連線導入,使用資料庫本身提供的直接載入工具,比如MySQL的mysqldump。但是有特定資料庫的限制。比如,你不能使用MySQL或者PostgreSQL的連線器來導入BLOB和CLOB類型。也沒有驅動支持從視圖的導入。Oracle直接驅動需要特權來讀取類似dba_objects和v_$parameter這樣的元數據。請查閱你的資料庫直連驅動程式局限性的相關文檔。
進行增量導入是與效率有關的最受關注的問題,因為Sqoop專門是為大數據集設計的。Sqoop支持增量更新,將新記錄添加到最近一次的導出的數據源上,或者指定上次修改的時間戳。
由於Sqoop將數據移入和移出關係型資料庫的能力,其對於Hive—Hadoop生態系統里的著名的類SQL數據倉庫—有專門的支持不足為奇。命令“create-hive-table”可以用來將數據表定義導入到Hive。
出現背景
Apache框架Hadoop是一個越來越通用的分散式計算環境,主要用來處理大數據。隨著雲提供商利用這個框架,更多的用戶將數據集在Hadoop和傳統資料庫之間轉移,能夠幫助數據傳輸的工具變得更加重要。Apache Sqoop就是這樣一款工具,可以在Hadoop和關係型資料庫之間轉移大量數據。