• 
    

    
    

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

      基于MapReduce的氣候數(shù)據(jù)的分析的設(shè)計(jì)與實(shí)現(xiàn)

      2020-08-21 09:05:27劉兆豐
      數(shù)碼設(shè)計(jì) 2020年3期
      關(guān)鍵詞:大數(shù)據(jù)計(jì)算機(jī)

      劉兆豐

      摘要:在社會(huì)的發(fā)展過程中,天氣對(duì)社會(huì)中的很多行業(yè)都有一定的影響。在當(dāng)前階段,天氣預(yù)報(bào)作為全球主要對(duì)天氣進(jìn)行預(yù)測(cè)的手段,在這種情況下,全球的氣候行業(yè)也產(chǎn)生了大量的數(shù)據(jù)(PB級(jí)別),并且數(shù)據(jù)每年還在持續(xù)的增長(zhǎng)。為了解決使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫很難存儲(chǔ)與分析的問題,需要采用大數(shù)據(jù)的相關(guān)技術(shù)對(duì)氣候數(shù)據(jù)進(jìn)行分析。

      本設(shè)計(jì)采用MapReduce生態(tài)圈的一系列的工具,通過使用虛擬機(jī)的平臺(tái),采用爬蟲軟件進(jìn)行數(shù)據(jù)爬取的方式,用Map階段和Reduce階段的數(shù)據(jù)分析,分布式系統(tǒng)的數(shù)據(jù)存儲(chǔ)的方法,實(shí)現(xiàn)氣象數(shù)據(jù)的采集分析,并且將其展現(xiàn)出來的方式展示。使用這系列流程的系統(tǒng)可以輔助有關(guān)部門或企業(yè)進(jìn)行決策部署。

      關(guān)鍵詞:MapReduce;氣候數(shù)據(jù);大數(shù)據(jù);計(jì)算機(jī)

      中圖分類號(hào):P41文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-9129(2020)03-0047-03

      Abstract:Intheprocessofsocialdevelopment,weatherhasacertainimpactonmanyindustriesinthesociety.Atthecurrentstage,weatherforecastingisthemainglobalweatherforecastingtool,andinthiscontext,theglobalclimateindustryalsoproducesalargeamountofdata(petabytes),andthedatacontinuestogroweveryyear.Inordertosolvetheproblemthatusingtraditionalrelationaldatabaseisdifficulttostoreandanalyze,itisnecessarytousebigdata-relatedtechnologiestoanalyzeclimatedata.

      ThisdesignadoptsaseriesoftoolsofMapReduceecosystem.Throughtheuseofvirtualmachineplatform,crawlersoftwareisadoptedfordatacrawling,dataanalysisinMapstageandReducestage,anddatastorageindistributedsystem,meteorologicaldatacollectionandanalysisarerealizedanddisplayed.Systemsthatusethisseriesofprocessescanassistdepartmentsororganizationsintheirdecisionmakinganddeployment.

      Keywords:MapReduce;Climaticdata;Bigdata;Thecomputer

      1數(shù)據(jù)采集

      1.1在線API數(shù)據(jù)獲取。此模塊的實(shí)現(xiàn)分為兩大部分:在線API數(shù)據(jù)獲取與數(shù)據(jù)分析。這里通過在特定網(wǎng)站提取天氣數(shù)據(jù):

      StringbaiduUrl="http://api.map.baidu.com/telematics/v3/weather?";

      publicstaticvoidmain(String[]args)throwsIOException{

      URLurl=newURL(baiduUrl);

      URLConnectionconn=url.openConnection();

      while(reader.readLine()!=null){

      StringBufferstr=newStringBuffer();

      str.append(url+"");

      這里此設(shè)計(jì)將使用百度天氣作為提取的天氣數(shù)據(jù)的來源。通過鏈接的方式,天氣網(wǎng)頁url轉(zhuǎn)變成字符流,通過粘貼的方式將所獲取的數(shù)據(jù)寫入進(jìn)stringBuffer中。

      1.2數(shù)據(jù)處理。

      經(jīng)過第一步需要處理的數(shù)據(jù),稱之為元數(shù)據(jù)。因此將會(huì)有一些無用的部分。將所需數(shù)據(jù)進(jìn)行提取,而此方法提取的數(shù)據(jù)為JSON格式,通過使用下面的方法獲得信息。

      1.3JSON格式介紹:

      JSON:一種與開發(fā)語言無關(guān)的輕量級(jí)數(shù)據(jù)存儲(chǔ)格式。全名是JavaScriptObjectNotation,它是數(shù)據(jù)格式的標(biāo)準(zhǔn)規(guī)范,最初是從JavaScript語言派生的,該語言具有用于JSON處理的API,Json由對(duì)象,數(shù)組,字符串組成。

      1.4代碼程序?qū)崿F(xiàn)。

      初始化百度天氣url,Stringuri=showURI(k)。提取其中的cell屬性。Cellcell=

      value.getColumnLatestCell(Bytes.toBytes("page"),Bytes.toBytes("i"))。

      通過一個(gè)數(shù)組配對(duì)其中的鍵值對(duì):

      Arrays.copyOfRange(cell.getValueArray(),

      cell.getValueOffset(),

      cell.getValueArray().length);

      Stringflag=Bytes.toString(b);

      1.5這里使用writable接口格式做大數(shù)據(jù)數(shù)據(jù)類型改寫,writable接口簡(jiǎn)介;

      Writable接口,是根據(jù)DataInput和DataOutput實(shí)現(xiàn)的簡(jiǎn)單、有效的序列化對(duì)象。MR的任意Key和Value必須實(shí)現(xiàn)Writable接口.簡(jiǎn)單來說要實(shí)現(xiàn)MapReduce的序列化,所需要的數(shù)據(jù)必須有一定的格式,因此需要通過改變數(shù)據(jù)的鍵值對(duì)來實(shí)現(xiàn)此接口方便我們接下來轉(zhuǎn)換數(shù)據(jù)。

      2集群搭建

      在這里選擇3.0.3的hadoop。此處使用linux命令

      (1)解壓文件到/opt下

      sudotar-zxvfjdk-8u91-linux-x64.tar.gz-C/opt

      sudotar-xvfhadoop-3.0.3.tar-C/opt

      (2)建立軟連接

      cd/opt

      sudoln-shadoop-3.0.3hadoop

      sudoln-sjdk1.8.0_91jdk

      (3)設(shè)置環(huán)境變量

      cd進(jìn)入目錄

      sudovi~/.profile或者sudovi~/.bashrc

      (4)進(jìn)入hadoop的安裝目錄配置文件中

      cd/opt/hadoop/etc/hadoop

      假設(shè)沒有找到core-site.xml,找到core-site.xml.template

      sudocpcore-siter.xml.templatecore-site.xml

      修改core-site.xml

      sudovicore-site.xml

      內(nèi)容如下:

      fs.defaultFS

      hdfs://192.168.213.128:9000

      (5)修改mapred-site.xml使用sudovimapred-site.xml命令進(jìn)入此xml文件之中。

      (6)確認(rèn)YARN集群的模式,如圖1.1所示:

      (7)MapReduce的具體內(nèi)容實(shí)現(xiàn)地址,如圖1.2所示:

      (8)MapReduce內(nèi)map函數(shù)的具體內(nèi)容實(shí)現(xiàn)地址,如圖1.3所示:

      (9)MapReduce內(nèi)reduce函數(shù)的具體內(nèi)容實(shí)現(xiàn)的地址,如圖1.4所示:

      (10)修改yarn-site.xml

      修改YARN集群IP地址,如圖1.5所示:

      3集群設(shè)置

      3.1集群權(quán)限

      (1)hdfs目錄下的所屬子目錄所屬用戶hdfs,所屬組hadoop及其子文件也設(shè)置

      sudochown-Rhdfshdfs;sudochgrp-Rhadoophdfs;設(shè)置權(quán)限保證創(chuàng)建文件時(shí)系統(tǒng)不會(huì)組織,linux的系統(tǒng)由于其特殊的權(quán)限特性保證了其安全性。

      (2)yarn的所屬組hadoop及其子文件

      sudochown-Ryarnyarn;sudochgrp-Rhadoopyarn;同理yarn集群也需要相同的操作。

      (3)進(jìn)入/data目錄,給hadoop目錄及所有子目錄或文件賦予權(quán)限777sudochmod777-Rhadoop,這里在創(chuàng)建文件夾帶有最高權(quán)限可以方便查詢?nèi)罩炯皠?chuàng)建文件夾。

      (4)建立yarn和hdfs執(zhí)行所用到的目錄sudomkdir/data;這里是數(shù)據(jù)落地的地方。

      (5)在data目錄下建立hadoop文件sudomkdirhadoop子目錄用來分批量存儲(chǔ)數(shù)據(jù)

      (6)在hadoop中建立hdfs和yarn文件夾sudomkdirhdfsyarn;這里是最終落地的目錄。

      (7)在hdfs文件下建立的dn,nn,snn文件夾sudomkdirdnnnsnn;三個(gè)文件夾存儲(chǔ)不同種類的數(shù)據(jù)。

      (8)在yarn下建立logs,nm文件夾sudomkdirlogsnm;這里存儲(chǔ)日志文件和日志采集。

      3.2配置一鍵啟動(dòng)功能

      一鍵啟動(dòng)是在主節(jié)點(diǎn)一個(gè)命令啟動(dòng)HDFS和YARN集群。

      (1)主節(jié)點(diǎn)安裝ssh服務(wù)。

      (2)解決無密碼登陸的問題在主節(jié)點(diǎn)之中生成銘文和密文,的兩個(gè)屬性需要在hdfs用戶下和yarn用戶下各執(zhí)行一次。

      ssh-keygen-trsa-P''-f~/.ssh/id_rsa

      (3)將銘文拷貝到從節(jié)點(diǎn)的需要無密碼登陸的機(jī)器上去。

      使用命令:ssh-copy-id-i:192.168.43.204

      3.3驗(yàn)證無密碼登錄

      (1)使用命令:ssh-copy-id-ilocalhost,ssh192.168.43.204。

      (2)Hbase的安裝與配置

      ①重命名目錄文件夾

      ②配置Hbase的環(huán)境變量

      這里更改path和添加HbaseHome作為Hbase的路徑和程序地址。

      (3)修改配置文件hbase-env.sh。

      4修改配置

      (1)在這里修改hbase.Rootdirhbase的根目錄需要在這里被固定下來。

      (2)修改hbase.Unsafe.stream.capability.enforce這里安全空間是否需要被開啟,選擇不開啟,可以充分利用內(nèi)存。

      (3)修改cluster的權(quán)限:這里選擇分組確認(rèn),選項(xiàng)設(shè)置為true。改變分組可以提高zookeeper的數(shù)據(jù)采集能力。

      (4)修改quorum的屬性,這里設(shè)置為單個(gè)端口。

      (5)修改分區(qū)端口號(hào)的屬性,這里用作備份,冗余數(shù)據(jù)可以通過此端口被查詢到,這里設(shè)置為16030。

      (6)設(shè)置主節(jié)點(diǎn)的日志級(jí)別info的端口號(hào),這里設(shè)置為16010。

      (7)開啟文件保護(hù)系統(tǒng)在hbase.wal.provider中選擇filesystem。

      在出現(xiàn)未知故障的時(shí)候,比如突然斷電的時(shí)候選擇此項(xiàng)可以開啟zookeeper保護(hù)模式,保護(hù)已經(jīng)采集到的日志。

      (8)啟動(dòng)hbase,通過jps命令可以查詢到兩個(gè)已經(jīng)開啟的命令。主節(jié)點(diǎn)可以查詢到HMaster,從節(jié)點(diǎn)可以查詢到HRegionServer。

      5MapReduce的編寫

      5.1map的模塊編寫

      首先將天氣的年份,溫度,濕度,風(fēng)力等值作為權(quán)重放入到mapper之中。在這里元數(shù)據(jù)的鍵值要改變?yōu)樾枨笄覍?duì)應(yīng)的鍵值對(duì)。使用substring方法可以將固定權(quán)重提取。最后將提取出的數(shù)據(jù)通過一定的順序拼接在一起。代碼實(shí)現(xiàn)如下:

      staticclassTMextendsMapper{

      @Override

      protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException

      以上是創(chuàng)建一個(gè)map函數(shù)用來將已經(jīng)提取好的json格式的數(shù)據(jù)做成二次篩查,放入到mapper里面進(jìn)行操作。

      Stringtemp=value.toString();

      Strings1=temp.substring(0,15);//城市天氣

      Stringyear=temp.substring(15,19);//年份

      Stringtem=temp.substring(87,92);//溫度

      Stringval=temp.substring(92,93);//【01459】

      在這里將所要的數(shù)據(jù)通過權(quán)重比較的方式,分批進(jìn)入mapper中。

      if(!"+9999".equals(tem)&&"01459".contains(val))

      context.write(newText("城市編號(hào):"+s1+"年份:"+year),newText(temp));

      在這里拼接數(shù)據(jù),變成城市編號(hào)加年份的方式,分批處理好元數(shù)據(jù)。

      5.2使用reduce方式進(jìn)行操作

      創(chuàng)建reduce程序,使用writable接口和迭代器進(jìn)行操作

      staticclassTRextendsReducer{

      @Override

      protectedvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{

      第一步將年份的數(shù)據(jù)放到reduce之中

      Texttext=key;//年份

      使用treemap方法采集數(shù)據(jù)

      Mapyt=newTreeMap<>();

      將所得數(shù)據(jù)中“:”的部分后面分割出來提取

      String[]year_tem=values.toString().split(":");

      下面的邏輯是通過ifelse循環(huán)分別拿出編號(hào)為0和1的不同年份的天氣

      if(year_tem.length>0&&year_tem!=null){

      if(yt.containsKey(year_tem[0])){

      if(yt.get(year_tem[0])

      yt.put(year_tem[0],Integer.parseInt(year_tem[1]));}

      }

      else{yt.put(year_tem[0],Integer.parseInt(year_tem[1]));}

      }

      同理將上述的程序中[]數(shù)組中的序號(hào)更改之后就可以得到剩下所需不同元素的天氣的值,此處代碼相近,省略展示。

      5.3構(gòu)建job作業(yè)提交

      (1)job提交簡(jiǎn)介,job的工作就是和集群建立連接,創(chuàng)建一個(gè)yarnRunner的對(duì)象調(diào)用job.Submit的方法提交,然后確定job的狀態(tài)和這個(gè)對(duì)象通信。所以總體來說,構(gòu)建job就是作為連接通道的橋梁。

      (2)job提交代碼實(shí)現(xiàn),每一個(gè)提交的類都有其共同的方法,這里每當(dāng)提交之后可以將job的方法拷貝到每一個(gè)mapper和reducer中去。這里將拷貝到input和output中以便使用。重點(diǎn)的是,這里需要重寫其中的run方法并且構(gòu)建作業(yè)的時(shí)候要重命名class文件,下面是代碼說明。構(gòu)建一個(gè)conf方法的采集器,這里將input和output首先構(gòu)建出對(duì)象。

      (3)在job提交中,此設(shè)計(jì)使用了getInstance,setJarByClass,setJobName,setNumReduceTasks四個(gè)方法作為前置提交,這四個(gè)方法分別提交數(shù)據(jù)屬性,具體的類,數(shù)據(jù)具體的名稱還有此數(shù)據(jù)在整個(gè)hbase中行鍵的序號(hào)。最后一個(gè)屬性是用來方便定義這個(gè)值。

      (4)第二個(gè)階段,這里的mapper和reducer方法需要連同第一階段的已提交的數(shù)據(jù)的類一起進(jìn)行第二步的提交。在這里需要用到setMapperClass以及他一系列的衍生方法。用來將mapper的鍵值對(duì)傳遞到reducer的鍵值對(duì)之中去。之后,reuducer的鍵值對(duì)會(huì)進(jìn)行再一次傳輸?shù)娜蝿?wù)。

      最后生成的reducer程序會(huì)使用輸入流生成文件,這里會(huì)設(shè)定input和output輸入輸出的路徑,將生成的文件傳輸?shù)竭@個(gè)路徑中去。在這里可能會(huì)有等待的問題出現(xiàn),在這里由于提前開啟了線程,因此將等待改為false,關(guān)閉即可。

      5.4基于年份進(jìn)行分組排序

      上一步將job提交的文件已經(jīng)寫入到指定路徑中,之后將已寫入的文件進(jìn)行分組排序,這里分組排序的方法是使用compareto方法。篩選條件可以使用之前已有的條件。包括但不限于風(fēng)力,天氣等元素進(jìn)行分組排序。代碼展示如下:

      intn=this.year-o.getYear();

      returnn;

      if(n!=0)returnn;

      returnthis.stationid.compareTo(o.getStationid());

      5.5檢測(cè)獲取的溫度是否合理。

      (1)當(dāng)分組排序之后,有一些問可能會(huì)超過正常溫度的閾值,上述的一些環(huán)節(jié)雖然有經(jīng)過一些列的篩查,但是只用到單獨(dú)的某個(gè)條件進(jìn)行歸類,而在數(shù)據(jù)可靠性上不能得到保證,因此需要使用特定函數(shù)方法檢測(cè)溫度合理性。在這里使用ifelse循環(huán)做一個(gè)篩查。這里定義一個(gè)對(duì)象isValiadTemperture意為溫度是否合理。

      (2)權(quán)重值說明:

      (15,19)年份

      (87,92)檢查到的溫度,如果為+9999則表示沒有檢測(cè)到溫度

      (92,93)溫度數(shù)據(jù)質(zhì)量,為【01459】表示該溫度是合理溫度

      (3)代碼如下:

      publicvoidparser(Stringstr){

      if(str.length()<93){isValiadTemperture=false;return;}

      this.stationid=str.substring(0,15);

      this.year=Integer.parseInt(str.substring(15,19));

      if(str.charAt(87)=='+'){

      this.temp=Integer.parseInt(str.substring(88,92));

      }else{

      this.temp=Integer.parseInt(str.substring(87,92));

      }

      Stringquality=str.substring(92,93);

      if(temp!=MISS&&quality.matches("[01459]")){

      this.isValiadTemperture=true;

      }else{

      this.isValiadTemperture=false;

      }

      (4)將溫度寫入HDFS系統(tǒng)中進(jìn)入數(shù)據(jù)庫。

      Hdfs高吞吐量的特性可以幫助數(shù)據(jù)快速進(jìn)入到到數(shù)據(jù)庫之中作為實(shí)時(shí)存儲(chǔ),通過上一章寫的定時(shí)分析模塊,可以做到一段時(shí)間內(nèi)獲取所需要的數(shù)據(jù),做到精準(zhǔn)分析。而數(shù)據(jù)庫的操作命令相對(duì)簡(jiǎn)單,也可以很好的實(shí)現(xiàn)增刪改查的功能,實(shí)時(shí)數(shù)據(jù)分析,完成天氣系統(tǒng)的設(shè)計(jì)。

      參考文獻(xiàn):

      [1]唐果星.淺析氣候大數(shù)據(jù)在行業(yè)中的發(fā)展趨勢(shì)[J].電腦知識(shí)與技術(shù),2019,15(10):262-263.

      [2]胡欣濱.基于大數(shù)據(jù)環(huán)境下的氣候數(shù)據(jù)分析[J].科技創(chuàng)新導(dǎo)報(bào),2013(12).79-79.

      [3]劉喆玥.我國氣候大數(shù)據(jù)的發(fā)展趨勢(shì)研究[J].電腦知識(shí)與技術(shù),2019,34(21).

      [4]楊巨龍.大數(shù)據(jù)技術(shù)全解:基礎(chǔ)、設(shè)計(jì)、開發(fā)與實(shí)踐[J].中國信息化,2014,000(006):71-71.

      [5]李天目,韓進(jìn).云計(jì)算技術(shù)架構(gòu)與實(shí)踐[M].北京:清華大學(xué)出版社,2014.

      [6]周品.Hadoop云計(jì)算實(shí)戰(zhàn)[M].北京:清華大學(xué)出版社,2012.

      [7]陳強(qiáng).精通JAVA開發(fā)技術(shù):由淺入深領(lǐng)會(huì)高效開發(fā)之道[M].北京:清華大學(xué)出版社,2013.

      [8]劉志成.Java程序設(shè)計(jì)案例教程[M].北京:清華大學(xué)出版社,2006.

      [9]王鵬.云計(jì)算與大數(shù)據(jù)技術(shù)[M].北京:人民郵電出版社,2014.

      猜你喜歡
      大數(shù)據(jù)計(jì)算機(jī)
      計(jì)算機(jī)操作系統(tǒng)
      基于計(jì)算機(jī)自然語言處理的機(jī)器翻譯技術(shù)應(yīng)用與簡(jiǎn)介
      科技傳播(2019年22期)2020-01-14 03:06:34
      信息系統(tǒng)審計(jì)中計(jì)算機(jī)審計(jì)的應(yīng)用
      基于大數(shù)據(jù)背景下的智慧城市建設(shè)研究
      科技視界(2016年20期)2016-09-29 10:53:22
      Fresnel衍射的計(jì)算機(jī)模擬演示
      旬阳县| 博罗县| 军事| 宣化县| 滦南县| 达州市| 葫芦岛市| 高雄县| 浏阳市| 石城县| 昌邑市| 岚皋县| 报价| 闻喜县| 连江县| 民乐县| 察隅县| 余江县| 武义县| 大邑县| 伊宁市| 香河县| 金山区| 光泽县| 修武县| 称多县| 镇沅| 科技| 陆川县| 毕节市| 吉隆县| 汉源县| 格尔木市| 谢通门县| 竹北市| 子洲县| 兴仁县| 阿合奇县| 齐河县| 柘城县| 西平县|