1 簡介及原理
1.1簡介
Sqoop是Apache旗下的一款“hadoop和關係型數據庫服務器之間傳送數據”的工具。
導入數據:MySQL、Oracle導入數據到hadoop的hdfs、hive、HBASE等數據存儲系統。
導出數據:從hadoop的文件系統中導出數據到關係型數據庫中。
1.2 sqoop 導入導出原理
參考自Sqoop的介紹(導入導出原理)。
1.2.1 數據導入
- sqoop會通過jdbc來獲取需要的數據庫的元數據信息,例如:導入的表的列名,數據類型。
- 這些數據庫的數據類型會被映射成爲java的數據類型,根據這些信息,sqoop會生成一個與表名相同的類用來完成序列化工作,保存表中的每一行記錄。
- sqoop開啓MapReduce作業
- 啓動的作業在input的過程中,會通過jdbc讀取數據表中的內容,這時,會使用sqoop生成的類進行序列化。
- 最後將這些記錄寫到hdfs上,在寫入hdfs的過程中,同樣會使用sqoop生成的類進行反序列化。
1.2.2 數據導出
- 首先sqoop通過jdbc訪問關係型數據庫,得到需要導出的數據的元數據信息。
- 根據獲取的元數據信息,sqoop生成一個java類,用來進行數據的傳輸載體,該類必須實現序列化。
- 啓動MapReduce程序。
- sqoop利用生成的這個java類,並行的從hdfs中讀取數據。
- 每一個map作業都會根據讀取到的導出表的元數據信息和讀取到的數據,生成一批insert語句然後多個 map 作業會並行的向數據庫 mysql 中插入數據。
總結:數據是從hdfs中併發進行讀取,也是併發進行寫入,那並行的讀取時依賴hdfs的性能,而並行的寫入到MySQL,就要依賴MySQL的性能。
1.3 Sqoop技術核心
-
生成mapreduce
sqoop接收用戶的請求,通過解析請求,生成mapreduce代碼,並打包,將打好的jar包提交給hadoop執行。生成mapreduce代碼是sqoop的核心技術,也是數據傳輸的關鍵。 -
作業創建
主要用於定時任務,定時導入導出新數據的sqoop作業。例如增量導入。 -
數據映射
關係型數據庫字段是有類型的,數據映射可以自動對數據庫字段類型和hadoop的類型進行對應。當然也可以自定義類型映射。 -
並行控制
採用sqoop集羣或者多個任務並行進行數據的導入導出工作。主要在大型導入導出任務中,爲了提升性能使用的。
2 Sqoop導入
。。。太簡單了,先參考視頻吧:Sqoop入門實踐教程