溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

發(fā)布時(shí)間:2022-02-25 10:30:29 來源:億速云 閱讀:271 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下怎么將數(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ù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

第一步是將數(shù)據(jù)從MySQL導(dǎo)出到HDFS,以確保有一個(gè)良好的起點(diǎn),如以下命令所示:

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

Sqoop導(dǎo)入的結(jié)果是HDFS中有許多CSV文件,可以在以下代碼中看到:

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

對于從HDFS到MySQL的Sqoop導(dǎo)出,將指定目標(biāo)表應(yīng)該是stocks_export并且應(yīng)該從HDFS庫目錄導(dǎo)出數(shù)據(jù):

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(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ù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

輸入數(shù)據(jù)格式

可以使用多個(gè)選項(xiàng)覆蓋用于解析輸入數(shù)據(jù)的默認(rèn)Sqoop設(shè)置,表5.7列出了這些選項(xiàng)。

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

表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中看到事件順序。

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

圖5.19  Sqoop分段事件序列,有助于確保冪等輸出

在下面的示例中,臨時(shí)表是stocks_staging,還告訴Sqoop在MapReduce作業(yè)以--clear-staging-table參數(shù)啟動之前清除它:

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

直接輸出

在導(dǎo)入技術(shù)中使用快速連接器,這是使用mysqldump實(shí)用程序的優(yōu)化。Sqoop導(dǎo)出也支持使用mysqlimport工具的快速連接器。與mysqldump一樣,集群中的所有節(jié)點(diǎn)都需要安裝mysqlimport,并且在用于運(yùn)行MapReduce任務(wù)的用戶路徑中可用。與導(dǎo)入一樣, - diand參數(shù)可以使用快速連接器:

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

使用mysqlimport進(jìn)行冪等輸出

Sqoop不支持將快速連接器與臨時(shí)表結(jié)合使用,這就是使用常規(guī)連接器實(shí)現(xiàn)冪等輸入的方法。但是仍然可以通過快速連接器實(shí)現(xiàn)冪等輸入,并在最后進(jìn)行一些額外的工作。需要使用快速連接器寫入臨時(shí)表,然后觸發(fā)INSERT語句,該語句將數(shù)據(jù)原子復(fù)制到目標(biāo)表中,步驟如下所示:

怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫

這打破了關(guān)于在命令行上公開憑證的早期規(guī)則,但是編寫可以從配置文件中讀取這些設(shè)置的腳本很容易。

看完了這篇文章,相信你對“怎么將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系型和NoSQL數(shù)據(jù)庫”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI