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