您好,登錄后才能下訂單哦!
小編給大家分享一下怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
實(shí)踐:使用Sqoop將數(shù)據(jù)導(dǎo)出到MySQL
Hadoop擅長與大多數(shù)關(guān)系型數(shù)據(jù)庫打交道,因此將OLTP數(shù)據(jù)提取到HDFS,執(zhí)行一些分析,然后將其導(dǎo)出回?cái)?shù)據(jù)庫是很常見的。
問題
希望將數(shù)據(jù)寫入關(guān)系數(shù)據(jù)庫,同時(shí)確保寫入是冪等的。
解決方案
此技術(shù)介紹了如何使用Sqoop將文本文件導(dǎo)出到關(guān)系數(shù)據(jù)庫,還介紹了如何配置Sqoop以使用具有自定義字段和記錄分隔符的文件。我們還將介紹冪等導(dǎo)出,以確保失敗的導(dǎo)出不會使數(shù)據(jù)庫處于不一致狀態(tài)。
討論
這種技術(shù)假設(shè)已經(jīng)安裝MySQL并創(chuàng)建模式。
Sqoop導(dǎo)出要求導(dǎo)出數(shù)據(jù)庫表已存在,Sqoop可以支持表中行的插入和更新。
將數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫共享
我們在導(dǎo)入部分檢查的許多參數(shù),不同之處在于export需要使用--export-dir參數(shù)來確定要導(dǎo)出的HDFS目錄,還將為導(dǎo)出創(chuàng)建另一個(gè)選項(xiàng)文件,以防止在命令行上不安全地提供密碼:
第一步是將數(shù)據(jù)從MySQL導(dǎo)出到HDFS,以確保有一個(gè)良好的起點(diǎn),如以下命令所示:
Sqoop導(dǎo)入的結(jié)果是HDFS中有許多CSV文件,可以在以下代碼中看到:
對于從HDFS到MySQL的Sqoop導(dǎo)出,將指定目標(biāo)表應(yīng)該是stocks_export并且應(yīng)該從HDFS庫目錄導(dǎo)出數(shù)據(jù):
默認(rèn)情況下,Sqoop導(dǎo)出將對目標(biāo)數(shù)據(jù)庫表執(zhí)行INSERT,可以使用--update-mode參數(shù)支持更新。值updateonly意味著如果沒有匹配的密鑰,更新將失敗。如果匹配的鍵不存在,則allowInsert的值將直接插入。用于執(zhí)行更新的表列名稱在--update-key參數(shù)中提供。
以下示例表明只應(yīng)使用主鍵嘗試更新:
輸入數(shù)據(jù)格式
可以使用多個(gè)選項(xiàng)覆蓋用于解析輸入數(shù)據(jù)的默認(rèn)Sqoop設(shè)置,表5.7列出了這些選項(xiàng)。
表5.7 輸入數(shù)據(jù)的格式選項(xiàng)
冪等輸出
執(zhí)行輸出的Sqoop map任務(wù)使用多個(gè)事務(wù)進(jìn)行數(shù)據(jù)庫寫入。如果Sqoop導(dǎo)出MapReduce作業(yè)失敗,則表可能包含部分寫入。對于冪等數(shù)據(jù)庫寫入,可以指示Sqoop執(zhí)行MapReduce寫入臨時(shí)表。成功完成作業(yè)后,臨時(shí)表將在單個(gè)事務(wù)中移動到目標(biāo)表,該事務(wù)是冪等的,可以在圖5.19中看到事件順序。
圖5.19 Sqoop分段事件序列,有助于確保冪等輸出
在下面的示例中,臨時(shí)表是stocks_staging,還告訴Sqoop在MapReduce作業(yè)以--clear-staging-table參數(shù)啟動之前清除它:
直接輸出
在導(dǎo)入技術(shù)中使用快速連接器,這是使用mysqldump實(shí)用程序的優(yōu)化。Sqoop導(dǎo)出也支持使用mysqlimport工具的快速連接器。與mysqldump一樣,集群中的所有節(jié)點(diǎn)都需要安裝mysqlimport,并且在用于運(yùn)行MapReduce任務(wù)的用戶路徑中可用。與導(dǎo)入一樣, - diand參數(shù)可以使用快速連接器:
使用mysqlimport進(jìn)行冪等輸出
Sqoop不支持將快速連接器與臨時(shí)表結(jié)合使用,這就是使用常規(guī)連接器實(shí)現(xiàn)冪等輸入的方法。但是仍然可以通過快速連接器實(shí)現(xiàn)冪等輸入,并在最后進(jìn)行一些額外的工作。需要使用快速連接器寫入臨時(shí)表,然后觸發(fā)INSERT語句,該語句將數(shù)據(jù)原子復(fù)制到目標(biāo)表中,步驟如下所示:
這打破了關(guān)于在命令行上公開憑證的早期規(guī)則,但是編寫可以從配置文件中讀取這些設(shè)置的腳本很容易。
看完了這篇文章,相信你對“怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。