• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Sqoop數(shù)據(jù)收集與入庫系統(tǒng)的應(yīng)用

      2017-12-22 07:35:40作者楊彬遼寧行政學(xué)院
      電子制作 2017年21期
      關(guān)鍵詞:關(guān)系數(shù)據(jù)庫命令架構(gòu)

      作者/楊彬,遼寧行政學(xué)院

      Sqoop數(shù)據(jù)收集與入庫系統(tǒng)的應(yīng)用

      作者/楊彬,遼寧行政學(xué)院

      大多數(shù)情況下單位或組織有價(jià)值的數(shù)據(jù)都要存儲(chǔ)在關(guān)系型數(shù)據(jù)庫系統(tǒng)中,隨著時(shí)間的累計(jì),數(shù)據(jù)量已非常龐大,為了進(jìn)一步進(jìn)行處理,有些數(shù)據(jù)需要抽取出來,利用大數(shù)技術(shù)進(jìn)行處理再次加工。為了能夠和Hadoop HDFS系統(tǒng)之外的數(shù)據(jù)庫系統(tǒng)機(jī)型交互,Sqoop孕育而生。Sqoop 是一款開源的工具,是Apache頂級項(xiàng)目,通過JDBC和關(guān)系數(shù)據(jù)庫進(jìn)行交互,用戶可將數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫抽取到Hadoop HDFS中;也可以把hadoop MapReduce處理完的數(shù)據(jù)導(dǎo)回到關(guān)系數(shù)據(jù)庫中。

      數(shù)據(jù)導(dǎo)入;數(shù)據(jù)導(dǎo)出;JDBC;關(guān)系數(shù)據(jù)庫

      1. Sqoop架構(gòu)

      Sqoop架構(gòu)非常簡單,整合了Hive、Hbase和Oozie,通過hadoop 的MapReduce任務(wù)來傳輸數(shù)據(jù)并提供并發(fā)和容錯(cuò)功能。Sqoop接收到客戶端的shell命令或者Java api命令后,通過Sqoop中的任務(wù)翻譯器把命令轉(zhuǎn)換為對應(yīng)的MapReduce任務(wù),將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)和Hadoop HDFS中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移,進(jìn)而完成數(shù)據(jù)導(dǎo)入和數(shù)據(jù)導(dǎo)入導(dǎo)出。Sqoop架構(gòu)如圖1所示。

      圖1 Sqoop架構(gòu)

      2. Sqoop數(shù)據(jù)庫導(dǎo)入與使用

      ■2.1 Sqoop數(shù)據(jù)庫導(dǎo)入

      Sqoop是通過一個(gè)MapReduce作業(yè)從關(guān)系數(shù)據(jù)庫中導(dǎo)入一個(gè)表,抽取一行行記錄,然后寫入到HDFS。首先Sqoop使用JDBC來檢查將要導(dǎo)入的表并檢索出表中所有的列及其對應(yīng)的SQL數(shù)據(jù)類型。這些SQL類型被映射到Java數(shù)據(jù)類型中,這些對應(yīng)的java類型在MapReduce應(yīng)用中將被作為字段值被保存,這些信息被Sqoop的代碼生成器使用來創(chuàng)建對應(yīng)表的類,用于保存從表中抽取的記錄。在導(dǎo)入中,關(guān)鍵的是DBWritable接口的序列化方法,Widget類和JDBC進(jìn)行交互使用這些方法。

      JDBC的ResultSet接口提供用戶從檢查結(jié)果中檢索記錄的游標(biāo),readFields()方法將用ResultSet中一行數(shù)據(jù)的列來填充Example對象的字段。其格式如下:

      Public void readFields(resultSet _dbResults)throws SQLException;

      InputFormat()方法通過JDBC從一個(gè)數(shù)據(jù)庫表中讀取部分內(nèi)容,它通過 Sqoop啟動(dòng)MapReduce作業(yè)來完成。

      DataDriverDBInputFormat()方法能夠完成多個(gè)Map任務(wù)對查詢結(jié)果的劃分,為了提高導(dǎo)入性能,查詢根據(jù)表的主鍵我的做為“劃分列”來進(jìn)行劃分的。在配置InputFormat之后,Sqoop將作業(yè)發(fā)送到MapReduce集群。Map任務(wù)將執(zhí)行查詢并將ResultSet中的數(shù)據(jù)反序列化到生成類的實(shí)例,這些數(shù)據(jù)保存在SequenceFile文件中也可以被分割為多個(gè)文本文件。導(dǎo)入指令為:Sqoop import –connect jdbc:mysql://hostname:port/database –username root –password 123456 –tablename –m n。

      其構(gòu)成含義如下:

      (1)––co n n e c t j d b c:m y s q l://hostname:port/database指定mysql數(shù)據(jù)庫主機(jī)名和端口號(hào)和數(shù)據(jù)庫名;

      (2)––username root 指定數(shù)據(jù)庫用戶名;

      (3)––password 123456 指定數(shù)據(jù)庫密碼;

      (4)––tablename 導(dǎo)出的表名;

      (5)–m n 啟動(dòng)一個(gè)map進(jìn)程數(shù),如果表很大,可以啟動(dòng)多個(gè)map進(jìn)程。

      默認(rèn)情況下,Sqoop會(huì)將導(dǎo)入的數(shù)據(jù)保存為逗號(hào)分隔的文本文件。

      Sqoop從關(guān)系數(shù)據(jù)庫中導(dǎo)入到HDFS的過程,如圖2所示。

      具體操作實(shí)例如下:關(guān)系數(shù)據(jù)庫(10.8.218.89)表為base,執(zhí)行Sqoop命令將數(shù)據(jù)從mysql導(dǎo)入到hive中,具體命令為:

      Sqoop import ––connect jdbc:mysql://10.8.218.89:3208/dbvideo ––table base ––user root––password 123456 –m 1 ––hive–import ––hive–database dbvideo ––hive–table base ––hive–overwrite ––fields–ter–minated–by “ ”––lines–terminated–by “ ”––as–textf i le

      通過help指令查看sqoop導(dǎo)入幫助: Sqoop help import。

      圖2 Sqoop從數(shù)據(jù)庫中導(dǎo)入到HDFS的過程

      ■2.2 Sqoop導(dǎo)入數(shù)據(jù)的使用

      數(shù)據(jù)被導(dǎo)入HDFS,以文本格式數(shù)據(jù)可以供Hadoop Streaming中的腳本使用,也可以為TextInputFormat為默認(rèn)格式運(yùn)行的MapReduce作業(yè)使用。同時(shí)Sqoop和Hive可共同構(gòu)成一個(gè)強(qiáng)大的服務(wù)用于分析任務(wù),在進(jìn)行導(dǎo)入時(shí),Sqoop可以生成hive表,將數(shù)據(jù)導(dǎo)入hive表,其命令如下:

      Sqoop import –connect jdbc:mysql://localhost/ha–doopguide –table widgets –m 1 –hive–import

      3. Sqoop數(shù)據(jù)庫導(dǎo)出

      ■3.1 Sqoop數(shù)據(jù)庫導(dǎo)出

      Sqoop導(dǎo)出功能其導(dǎo)入功能非常相似,在執(zhí)行導(dǎo)出操作之前,Sqoop一般使用jdbc連接數(shù)據(jù)庫并選擇一個(gè)導(dǎo)出方法,Sqoop會(huì)根據(jù)目標(biāo)表的定義生成一個(gè)java類,通過這個(gè)生成類從文本文件中解析記錄,接著會(huì)啟動(dòng)一個(gè)MapReduce作業(yè),從HDFS中讀取源數(shù)據(jù)文件,使用生成的類解析記錄,執(zhí)行選定的導(dǎo)出方法。jdbc的導(dǎo)出方法會(huì)產(chǎn)生一批insert語句,每條語句都會(huì)向目標(biāo)表中插入多條記錄。

      Sqoop還可以將存儲(chǔ)在SequenceFile中的記錄導(dǎo)出到輸出表。Sqoop從SequenceFile中讀取對象,發(fā)送到OutputCollector,由它將這些對象傳遞給數(shù)據(jù)庫導(dǎo)出OutputFormat(),由OutputFormat()完成輸出到表的過程。Sqoop從HDFS導(dǎo)出到關(guān)系數(shù)據(jù)庫的過程,如圖3所示

      圖3 Sqoop從HDFS導(dǎo)出到關(guān)系數(shù)據(jù)庫的過程

      ■3.2 Sqoop導(dǎo)出數(shù)據(jù)的執(zhí)行

      在Sqoop中,導(dǎo)出的數(shù)據(jù)源是HDFS,關(guān)系數(shù)據(jù)庫作為目標(biāo)。在將一張表從HDFS導(dǎo)出到關(guān)系數(shù)據(jù)庫時(shí),須在關(guān)系數(shù)據(jù)庫中創(chuàng)建一張用于接收數(shù)據(jù)的目標(biāo)表。執(zhí)行過程如下:

      ①先在mysql中創(chuàng)建一個(gè)具有相同序列順序的sql目標(biāo)表

      Create table sales(volume decimal(10,2),zip inte ger);

      ②接著運(yùn)行導(dǎo)出命令:

      Sqoop export –connect jdbc:mysql://localhost/ha doopguide –m 1 –table sales –export–dir /user/hive/zip_prof i ts –input–f i elds–terminated–by “

      百色市| 右玉县| 罗源县| 宁德市| 榆社县| 乌兰浩特市| 胶州市| 汪清县| 莒南县| 大关县| 苏州市| 奉新县| 沁阳市| 卢氏县| 永吉县| 鄂托克旗| 天津市| 开鲁县| 峨山| 宁晋县| 班戈县| 蕲春县| 丹阳市| 基隆市| 射洪县| 兰溪市| 玛曲县| 新邵县| 嫩江县| 石泉县| 鄂州市| 孙吴县| 凌源市| 富平县| 和龙市| 织金县| 阜南县| 瑞丽市| 虎林市| 仁寿县| 汽车|