Hadoop正成為企業(yè)用于大數(shù)據(jù)分析的最熱門選擇,但想將你的數(shù)據(jù)移植過去并不容易。Apache Sqoop正在加緊幫助客戶將重要數(shù)據(jù)從數(shù)據(jù)庫移到Hadoop。
正當(dāng)大數(shù)據(jù)變得越來越重要,而越來越多應(yīng)用都在云上部署時,云管理員也面臨了不斷增長的將數(shù)據(jù)從源系統(tǒng)轉(zhuǎn)移到分析系統(tǒng)——其中最熱門的就是Hadoop——的需求。ETL工具的自定義腳本在過去輔助了這種數(shù)據(jù)遷移,現(xiàn)在Apache Sqoop正崛起成為更好的選擇。
隨著Hadoop和關(guān)系型數(shù)據(jù)庫之間的數(shù)據(jù)移動漸漸變成一個標(biāo)準(zhǔn)的流程,云管理員們能夠利用Sqoop的并行批量數(shù)據(jù)加載能力來簡化這一流程,降低編寫自定義數(shù)據(jù)加載腳本的需求。
Apache Sqoop是一個將數(shù)據(jù)在關(guān)系數(shù)據(jù)庫及Hadoop之間轉(zhuǎn)移的命令行工具。對于某些NoSQL數(shù)據(jù)庫它也提供了連接器。Sqoop,類似于其他ETL工具,使用元數(shù)據(jù)模型來判斷數(shù)據(jù)類型并在數(shù)據(jù)從數(shù)據(jù)源轉(zhuǎn)移到Hadoop時確保類型安全的數(shù)據(jù)處理。Sqoop專為大數(shù)據(jù)批量傳輸設(shè)計(jì),能夠分割數(shù)據(jù)集并創(chuàng)建Hadoop任務(wù)來處理每個區(qū)塊。
Sqoop有一個非常小的命令集,里面包括導(dǎo)入和導(dǎo)出,列出數(shù)據(jù)庫和表信息,生成Java類來操縱數(shù)據(jù),解析SQL命令以及其他一些更專門的命令。生成Java類的命令對于在Hadoop里編寫Java應(yīng)用來進(jìn)行數(shù)據(jù)操作特別有用。SQL解析命令可以顯示執(zhí)行SQL語句的結(jié)果,這在搜索新數(shù)據(jù)庫或產(chǎn)生復(fù)雜邏輯的查詢時非常有用。
使用Sqoop比自定義腳本有一定的優(yōu)勢。其一就是,Sqoop被設(shè)計(jì)成具備容錯性。你也可以自定義腳本來監(jiān)控你的工作狀態(tài),然后從故障中恢復(fù),但是那有可能難以置信的耗時。
使用Sqoop需要注意的地方
盡管有以上的優(yōu)點(diǎn),在使用Sqoop的時候還有一些事情需要注意。首先,對于默認(rèn)的并行機(jī)制要小心。默認(rèn)情況下的并行意味著Sqoop假設(shè)大數(shù)據(jù)是在分區(qū)鍵范圍內(nèi)均勻分布的。這在當(dāng)你的源系統(tǒng)是使用一個序列號發(fā)生器來生成主鍵的時候工作得很好。打個比方,當(dāng)你有一個10個節(jié)點(diǎn)的集群,那么工作負(fù)載是在這10臺服務(wù)器上平均分配的。但是,如果你的分割鍵是基于字母數(shù)字的,擁有比如以“A”作為開頭的鍵值的數(shù)量會是“M”作為開頭鍵值數(shù)量的20倍,那么工作負(fù)載就會變成從一臺服務(wù)器傾斜到另一臺服務(wù)器上。
如果你最擔(dān)心是性能,那么可以研究下直接加載。直接加載繞過通常的Java數(shù)據(jù)庫連接導(dǎo)入,使用數(shù)據(jù)庫本身提供的直接載入工具,比如MySQL的mysqldump。但是有特定數(shù)據(jù)庫的限制。比如,你不能使用MySQL或者PostgreSQL的連接器來導(dǎo)入BLOB和CLOB類型。也沒有驅(qū)動支持從視圖的導(dǎo)入。Oracle直接驅(qū)動需要特權(quán)來讀取類似dba_objects和v_$parameter這樣的元數(shù)據(jù)。請查閱你的數(shù)據(jù)庫直連驅(qū)動程序局限性的相關(guān)文檔。
進(jìn)行增量導(dǎo)入是與效率有關(guān)的最受關(guān)注的問題,因?yàn)镾qoop專門是為大數(shù)據(jù)集設(shè)計(jì)的。Sqoop支持增量更新,將新記錄添加到最近一次的導(dǎo)出的數(shù)據(jù)源上,或者指定上次修改的時間戳。
由于Sqoop將數(shù)據(jù)移入和移出關(guān)系型數(shù)據(jù)庫的能力,其對于Hive—Hadoop生態(tài)系統(tǒng)里的著名的類SQL數(shù)據(jù)倉庫—有專門的支持不足為奇。命令“create-hive-table”可以用來將數(shù)據(jù)表定義導(dǎo)入到Hive。