Apache Sqoop:云端大數據分析的關鍵一環
Hadoop正成為企業用于大數據分析的最熱門選擇,但想將你的數據移植過去并不容易。Apache Sqoop正在加緊幫助客戶將重要數據從數據庫移到Hadoop。
正當大數據變得越來越重要,而越來越多應用都在云上部署時,云管理員也面臨了不斷增長的將數據從源系統轉移到分析系統——其中最熱門的就是Hadoop——的需求。ETL工具的自定義腳本在過去輔助了這種數據遷移,現在Apache Sqoop正崛起成為更好的選擇。
隨著Hadoop和關系型數據庫之間的數據移動漸漸變成一個標準的流程,云管理員們能夠利用Sqoop的并行批量數據加載能力來簡化這***程,降低編寫自定義數據加載腳本的需求。
Apache Sqoop是一個將數據在關系數據庫及Hadoop之間轉移的命令行工具。對于某些NoSQL數據庫它也提供了連接器。Sqoop,類似于其他ETL工具,使用元數據模型來判斷數據類型并在數據從數據源轉移到Hadoop時確保類型安全的數據處理。Sqoop專為大數據批量傳輸設計,能夠分割數據集并創建Hadoop任務來處理每個區塊。
Sqoop有一個非常小的命令集,里面包括導入和導出,列出數據庫和表信息,生成Java類來操縱數據,解析SQL命令以及其他一些更專門的命令。生成Java類的命令對于在Hadoop里編寫Java應用來進行數據操作特別有用。SQL解析命令可以顯示執行SQL語句的結果,這在搜索新數據庫或產生復雜邏輯的查詢時非常有用。
使用Sqoop比自定義腳本有一定的優勢。其一就是,Sqoop被設計成具備容錯性。你也可以自定義腳本來監控你的工作狀態,然后從故障中恢復,但是那有可能難以置信的耗時。
使用Sqoop需要注意的地方
盡管有以上的優點,在使用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。
原文出自:http://www.searchcloudcomputing.com.cn/showcontent_86735.htm






















