陳玉林 湖南現(xiàn)代物流職業(yè)技術(shù)學(xué)院 陳曉玲 張錚 湖南文理學(xué)院芙蓉學(xué)院
實(shí)際應(yīng)用中,常常會(huì)碰到一些信息管理系統(tǒng)的數(shù)據(jù)(如日志數(shù)據(jù)、交通數(shù)據(jù)等)積累到一定程度的時(shí)候,一般的關(guān)系數(shù)據(jù)庫容量及性能就會(huì)出現(xiàn)瓶頸,從而需要大數(shù)據(jù)平臺(tái)(例如HDFS、Hive、Hbase 等)來進(jìn)行存儲(chǔ),這個(gè)時(shí)候需要一種工具來與關(guān)系數(shù)據(jù)庫服務(wù)器進(jìn)行交互,以導(dǎo)入和導(dǎo)出駐留在其中的大數(shù)據(jù),此時(shí)Sqoop 就能發(fā)揮出它應(yīng)有的價(jià)值了。
Sqoop 是一個(gè)用來將關(guān)系型數(shù)據(jù)庫和Hadoop 中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移的工具,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(例如Mysql、Oracle)中的數(shù)據(jù)導(dǎo)入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop 中的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫中。因?yàn)镾qoop 充分利用了Hadoop MapReduce 的并行化優(yōu)點(diǎn),整個(gè)數(shù)據(jù)交換過程基于MapReduce 實(shí)現(xiàn)并行化的快速處理,所以應(yīng)用在十萬、百萬這種小數(shù)據(jù)量系統(tǒng)上性能會(huì)受到限制,但數(shù)據(jù)量級(jí)若超過一億以上則sqoop優(yōu)勢(shì)明顯。簡(jiǎn)單原理就是Sqoop 工具接收到客戶端的shell 命令或者Java api 命令后,通過Sqoop 中的任務(wù)翻譯器(Task Translator)將命令轉(zhuǎn)換為對(duì)應(yīng)的MapReduce 任務(wù),而后將關(guān)系型數(shù)據(jù)庫和Hadoop 中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移,進(jìn)而完成數(shù)據(jù)的拷貝。
Sqoop 把關(guān)系型數(shù)據(jù)庫(以mysql 為例)的數(shù)據(jù)導(dǎo)入到HDFS中,主要分為兩步:一是得到元數(shù)據(jù)(mysql 數(shù)據(jù)庫中的數(shù)據(jù)) ,二是提交map。這樣流程就很清晰了,首先連接到mysql 數(shù)據(jù)庫得到表中的數(shù)據(jù),然后進(jìn)行map 任務(wù)即可。具體實(shí)現(xiàn)為:bin/sqoop import --connect jdbc:mysql://192.168.1.100:3306/test --username root --password root --table STUDENT
根據(jù)map 任務(wù)執(zhí)行來看,這里如果不指定輸出到hdfs 的目錄的話,會(huì)自動(dòng)在hdfs 用戶主目錄下生成一個(gè)與表的名稱一致的目錄來存放數(shù)據(jù),這里默認(rèn)是會(huì)有四個(gè)map 任務(wù),數(shù)據(jù)量小,所以這里比較耗時(shí)。一般需要自己指定存放在hdfs 的位置目錄和map 的個(gè)數(shù),執(zhí)行如下命令如圖1 所示:
圖1 MYSQL 導(dǎo)入數(shù)據(jù)到HDFS
--target-dir”指定導(dǎo)入到hdfs 中的位置,“--num-mappers 1”指定map 任務(wù)的個(gè)數(shù)為1 個(gè)。
Hbase 和Hive 在大數(shù)據(jù)架構(gòu)中處于不同位置,Hbase 主要解決實(shí)時(shí)數(shù)據(jù)查詢問題,Hive 主要解決數(shù)據(jù)處理和計(jì)算問題,一般是配合使用。
在實(shí)際的業(yè)務(wù)當(dāng)中,首先對(duì)原始數(shù)據(jù)集通過MapReduce 進(jìn)行數(shù)據(jù)清洗,然后將清洗后的數(shù)據(jù)存入到Hbase 數(shù)據(jù)庫中,接著通過數(shù)據(jù)倉庫Hive 對(duì)Hbase 中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)與分析,分析之后將分析結(jié)果存入到Hive 表中,然后通過Sqoop 這個(gè)工具將數(shù)據(jù)挖掘結(jié)果導(dǎo)入到MySql 數(shù)據(jù)庫中,最后通過Web 將結(jié)果展示給客戶。
(1)把MYSQL 的STUDENT 表導(dǎo)入到HBASE。執(zhí)行命令如圖2 所示:
圖2 MYSQL 導(dǎo)入數(shù)據(jù)到HBAS
hbase-create-table 用于自動(dòng)創(chuàng)建缺少的HBase 表,如果hbase 中 已經(jīng)有同名表,則會(huì)產(chǎn)生沖突。
(2)把MYSQL 的 STUDENT 表導(dǎo)入到 HIVE。執(zhí)行命令如圖3 所示:
圖3 MYSQL 導(dǎo)入數(shù)據(jù)到HIVE
hive-import 說明sqoop 此處導(dǎo)入是導(dǎo)入到hive 而不是其他 ,create-hive-table 自動(dòng)創(chuàng)建表(如果存在會(huì)報(bào)錯(cuò)),hive-table 指定自動(dòng)創(chuàng)建表的名稱.這里是一次性導(dǎo)入,如果需要增量導(dǎo)入數(shù)據(jù)使用參數(shù)incremental lastmodified 或incremental append。
sqoop 的使用對(duì)業(yè)務(wù)信息系統(tǒng)數(shù)據(jù)遷移帶來許多的便利,應(yīng)用過程中遇到問題時(shí),應(yīng)檢查 sqoop 需要提前安裝好的環(huán)境變量配置,或者依賴,它包括Linux 操作系統(tǒng)和JDK 開發(fā)環(huán)境,以及hadoop、hive、hbase、zookeeper 四個(gè)應(yīng)用模塊。