如何將資料從Hadoop匯出到關係型和NoSQL資料庫?
資料庫通常是Hadoop資料輸出的目標之一,企業通常將資料移回生產資料庫以供生產系統使用,或者將資料移動到OLAP資料庫以執行商業智慧和分析功能。
(注:本文為《Hadoop從入門到精通》大型專題的第五章內容,本專題的其他文章見文末連結,專題的上半部也將於不久之後與大家見面,請持續關注本專題!)
5.3.3 資料庫
本節,我們將使用Apache Sqoop將資料從Hadoop匯出到MySQL資料庫。Sqoop是一種簡單的資料庫匯入和匯出工具。我們會介紹將資料從HDFS匯出到Sqoop的過程。我們還將介紹使用常規聯結器的方法,以及如何使用快速聯結器執行批次匯入。
實踐:使用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語句,該語句將資料原子複製到目標表中,步驟如下所示:
這打破了關於在命令列上公開憑證的早期規則,但是編寫可以從配置檔案中讀取這些設定的指令碼很容易。
總結
與使用MapReduce中提供的DBInputFormat格式類相比,Sqoop提供了簡化的使用模型。但是,使用DBInputFormat類將為在執行資料庫匯出的同一MapReduce作業中轉換或預處理資料提供額外的靈活性。Sqoop的優點是不需要編寫任何程式碼,並且有一些有用的概念,比如分段,以幫助實現冪等。
5.3.4 NoSQL
MapReduce是一種將資料批次載入到外部系統的強大而有效的方法。到目前為止,我們已經介紹瞭如何使用Sqoop載入關係資料,現在我們將看看NoSQL系統,特別是HBase。
Apache HBase是一個分散式key/value,面向列的資料儲存。在本章的前半部分,我們研究瞭如何將HBase中的資料匯入HDFS,以及如何將HBase用作MapReduce作業的資料來源。將資料載入到HBase的最有效方法是透過其內建的批次載入機制,但是這種方法繞過了預寫日誌(WAL),這意味著正在載入的資料不會複製到從屬HBase節點。
HBase還附帶了一個org.apache.hadoop.hbase.mapreduce.Export類,它將從HDFS載入HBase表,類似於本章前面的冪等輸出工作方式。但是,我們必須以SequenceFile形式提供資料,這種方式有缺點,包括不支援版本控制,可以在自己的MapReduce作業中使用TableOutputFormat類將資料匯出到HBase,但這種方法比批次載入工具慢。
我們現在已經完成了對Hadoop輸出工具的檢查。我們介紹瞭如何使用HDFS File Slurper將資料移出到檔案系統以及如何使用Sqoop對關聯式資料庫進行冪等輸入,我們總結了將Hadoop資料輸入HBase的方法。
5.4 本章總結
將資料移入和移出是Hadoop架構的關鍵部分。本章,我們介紹了可用於執行資料輸入和輸出以及與各種資料來源一起使用的各種技術。值得注意的是,我們介紹了Flume,一種資料收集和分發解決方案,Sqoop,一種用於將關係資料移入和移出Hadoop的工具,以及Camus,一種用於將Kafka資料匯入HDFS的工具。現在,是時候檢視一些可應用於資料的有趣處理模式。
相關文章:
1、《第一章:Hadoop生態系統及執行MapReduce任務介紹!》連結: http://blog.itpub.net/31077337/viewspace-2213549/
2、《學習Hadoop生態第一步:Yarn基本原理和資源排程解析!》連結: http://blog.itpub.net/31077337/viewspace-2213602/
3、《MapReduce如何作為Yarn應用程式執行?》連結: http://blog.itpub.net/31077337/viewspace-2213676/
4、《Hadoop生態系統各元件與Yarn的相容性如何?》連結: http://blog.itpub.net/31077337/viewspace-2213960/
5、《MapReduce資料序列化讀寫概念淺析!》連結: http://blog.itpub.net/31077337/viewspace-2214151/
6、《MapReuce中對大資料處理最合適的資料格式是什麼?》連結: http://blog.itpub.net/31077337/viewspace-2214325/
7、《如何在MapReduce中使用SequenceFile資料格式?》連結: http://blog.itpub.net/31077337/viewspace-2214505/
8、《如何在MapReduce中使用Avro資料格式?》連結: http://blog.itpub.net/31077337/viewspace-2214709/
9、《企業自有資料格式雜亂,MapReduce如何搞定?》連結: http://blog.itpub.net/31077337/viewspace-2214826/
10、《企業使用Hadoop的重大挑戰:如何在HDFS中組織和使用資料?》連結: http://blog.itpub.net/31545816/viewspace-2215158/ 》
11、《如何在HDFS中進行資料壓縮以實現高效儲存?》連結: http://blog.itpub.net/31545816/viewspace-2215281/
12、《Hadoop資料傳輸:如何將資料移入和移出Hadoop?》連結: http://blog.itpub.net/31545816/viewspace-2215580/
13、《如何將日誌和二進位制檔案連續移入HDFS?》連結: http://blog.itpub.net/31545816/viewspace-2215948/
14、《如何將傳統關聯式資料庫的資料匯入Hadoop?》連結: http://blog.itpub.net/31545816/viewspace-2216000/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545816/viewspace-2216458/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NoSQL:從關係型資料庫到非關係型資料庫SQL資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- 最受歡迎的 NoSQL 和關係型資料庫SQL資料庫
- 關係型資料庫和NOSQL資料庫的優缺點介紹資料庫SQL
- OO資料庫和關係型資料庫資料庫
- 關係型資料庫和非關係型資料庫的區別資料庫
- 從hive將資料匯出到mysql(轉)HiveMySql
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- 關係型資料庫與NoSQL資料庫的優勢與劣勢資料庫SQL
- 將資料匯出到ExcelExcel
- 如何將傳統關聯式資料庫的資料匯入Hadoop?資料庫Hadoop
- 如何將資料熱匯出到檔案
- 關係型資料庫和非關係型資料庫的簡單對比資料庫
- 關係型資料庫與非關係型資料庫介紹!資料庫
- 關係型資料庫資料庫
- 大文字資料,匯入匯出到資料庫資料庫
- 並推出了關係型資料庫功能來補充其核心NoSQL資料庫功能資料庫SQL
- 關係型資料庫和非關係型資料庫介紹及優劣勢比較資料庫
- PostgreSQL關係型資料庫SQL資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- 從關聯式資料庫遷移到NoSQL雲資料庫資料庫SQL
- 轉載:利用SQL*Loader將 Excel 資料匯出到資料庫中SQLExcel資料庫
- 資料庫中主庫和從庫的關係資料庫
- 關係型資料庫,何以稱為“關係”資料庫
- 看看關係型資料庫是怎麼吊打Hadoop的資料庫Hadoop
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫之索引資料庫索引
- 關係型資料庫的理解資料庫
- 關係型資料庫理論資料庫
- 非關係型資料庫:Cassandra資料庫
- redis—非關係型資料庫Redis資料庫
- 如何將Excl內資料匯入資料庫?資料庫
- 關係型和非關係型資料庫一定要對立?達夢資料提供新思路資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫