本發(fā)明涉及數(shù)據(jù)庫
技術(shù)領(lǐng)域:
,尤其涉及一種高效的工業(yè)大數(shù)據(jù)多維分析方法。
背景技術(shù):
:隨著工業(yè)信息化的普及,工廠在生產(chǎn)過程中越來越多的使用自動(dòng)化控制設(shè)備和智能儀表,這些設(shè)備和儀表也產(chǎn)生了大量的實(shí)時(shí)數(shù)據(jù)。opc協(xié)議是一個(gè)工業(yè)標(biāo)準(zhǔn),得到了大多數(shù)自動(dòng)化控制設(shè)備和智能儀表的支持,應(yīng)用程序通過這些設(shè)備所提供的統(tǒng)一的opc接口可以輕松獲取生產(chǎn)過程中產(chǎn)生的大量實(shí)時(shí)數(shù)據(jù)。這些實(shí)時(shí)數(shù)據(jù)反應(yīng)了生產(chǎn)過程中的各種狀態(tài),通過對(duì)這些數(shù)據(jù)的分析,可以幫助我們優(yōu)化生產(chǎn)流程,預(yù)防缺陷和故障,降低生產(chǎn)成本,提高生產(chǎn)效率。現(xiàn)有的工業(yè)實(shí)時(shí)數(shù)據(jù)分析通常使用傳統(tǒng)的關(guān)系數(shù)據(jù)庫來完成。相對(duì)于基于hadoop的分布式存儲(chǔ)和計(jì)算平臺(tái),傳統(tǒng)的關(guān)系數(shù)據(jù)庫存儲(chǔ)容量小,計(jì)算能力弱,擴(kuò)容成本高。隨著工業(yè)實(shí)時(shí)數(shù)據(jù)規(guī)模的不斷擴(kuò)大,使用傳統(tǒng)的關(guān)系數(shù)據(jù)庫分析,不得不進(jìn)行粗粒度的采樣,丟棄掉大量的現(xiàn)場(chǎng)數(shù)據(jù),這將會(huì)影響分析結(jié)果的準(zhǔn)確性。而且隨著工業(yè)實(shí)時(shí)數(shù)據(jù)分析業(yè)務(wù)的不斷多樣化,傳統(tǒng)的關(guān)系數(shù)據(jù)庫的計(jì)算能力也成為了制約的瓶頸,影響了分析業(yè)務(wù)的拓展和實(shí)效性。在工業(yè)實(shí)時(shí)數(shù)據(jù)的分析方法上,傳統(tǒng)的方式一般針對(duì)單個(gè)業(yè)務(wù)單獨(dú)開發(fā),不同的業(yè)務(wù)使用單獨(dú)的數(shù)據(jù)模型和展示方式,忽略了數(shù)據(jù)分析業(yè)務(wù)的共性。當(dāng)數(shù)據(jù)分析業(yè)務(wù)越來越多時(shí),無論是維護(hù)還是擴(kuò)展都會(huì)變的越來越困難。而且實(shí)際的數(shù)據(jù)分析往往是啟發(fā)性的,這種按照業(yè)務(wù)定制的數(shù)據(jù)分析方式就顯得不夠靈活,影響了數(shù)據(jù)分析人員的思維發(fā)散,容易造成思維定式,不利于從大量數(shù)據(jù)中挖掘出更多有價(jià)值的信息。技術(shù)實(shí)現(xiàn)要素:本發(fā)明為克服上述的不足之處,目的在于提供一種高效的工業(yè)大數(shù)據(jù)多維分析方法,本發(fā)明基于hadoop這種開源的分布式技術(shù)構(gòu)建數(shù)據(jù)倉庫,將大規(guī)模的工業(yè)實(shí)時(shí)數(shù)據(jù)全量導(dǎo)入到數(shù)據(jù)倉庫之中,對(duì)于不同的數(shù)據(jù)分析業(yè)務(wù)按照統(tǒng)一流程進(jìn)行多維分析建模;具有容納的數(shù)據(jù)量大而全,分析方法通用且高效,整個(gè)系統(tǒng)易于維護(hù)和拓展的特點(diǎn)。本發(fā)明方法實(shí)現(xiàn)了彈性存儲(chǔ)、彈性計(jì)算、高可用性、分析方法通用高效的目的。本發(fā)明是通過以下技術(shù)方案達(dá)到上述目的:一種高效的工業(yè)大數(shù)據(jù)多維分析方法,包括如下步驟:(1)通過opc抽取程序從opc服務(wù)器中讀取數(shù)據(jù)寫入hadoop分布式文件系統(tǒng);(2)將存儲(chǔ)在hadoop分布式文件系統(tǒng)中的數(shù)據(jù)轉(zhuǎn)換成hive數(shù)據(jù)倉庫中的明細(xì)表;(3)將明細(xì)表中所需的行和列過濾出來,形成事實(shí)表;(4)將得到的事實(shí)表和維度表連接形成面向主題的寬表,對(duì)寬表進(jìn)行多維分析得到分析結(jié)果;其中,維度表來自外部系統(tǒng),需要用戶手動(dòng)導(dǎo)入到hive數(shù)據(jù)倉庫之中。作為優(yōu)選,所述的opc抽取程序按照標(biāo)準(zhǔn)opc協(xié)議從opc服務(wù)器讀取工業(yè)實(shí)時(shí)數(shù)據(jù),并打上讀取時(shí)的時(shí)間戳視為一次讀取;設(shè)opc服務(wù)器提供的數(shù)據(jù)點(diǎn)為key1、key2、key3,對(duì)應(yīng)的數(shù)據(jù)分別為value1、value2、value3,時(shí)間戳用timestamp表示,對(duì)應(yīng)的值則為yyyy-mm-dd-hh-mm-ss;其中,y表示年,m表示月,d表示天,h表示時(shí),m表示分,s表示秒;opc抽取程序一次讀取的數(shù)據(jù)用json格式描述,形成字符串如下:{“key1”:“value1”,“key2”:“value2”,“key3”:“value3”,“timestamp”:“yyyy-mm-dd-hh-mm-ss”}。作為優(yōu)選,所述opc抽取程序的抽取頻率為秒級(jí),抽取的數(shù)據(jù)按照一行一個(gè)json字符串的形式寫入hadoop分布式文件系統(tǒng),json字符串以小時(shí)為單位合并到一個(gè)或者多個(gè)文件中,屬于每個(gè)小時(shí)的文件放入同一個(gè)文件夾;在opc抽取程序?qū)⒁粋€(gè)小時(shí)的數(shù)據(jù)寫完之后,會(huì)在對(duì)應(yīng)的文件夾中生成一個(gè)大小為0的文件,文件名為_success,_success作為當(dāng)前文件夾內(nèi)數(shù)據(jù)是否完整的判斷標(biāo)準(zhǔn)。作為優(yōu)選,所述步驟(2)得到hive數(shù)據(jù)倉庫中的明細(xì)表流程如下:(a)利用hadoop分布式文件系統(tǒng)提供的工作流調(diào)度工具oozie將超過緩沖期的json文件從hadoop分布式文件系統(tǒng)中刪除,其中緩沖期為預(yù)設(shè)的;(b)根據(jù)數(shù)據(jù)的合并時(shí)間單位,利用oozie定時(shí)啟動(dòng)一個(gè)任務(wù),將json格式的數(shù)據(jù)轉(zhuǎn)換成一張二維的明細(xì)表,加載進(jìn)入基于hadoop平臺(tái)的hive數(shù)據(jù)倉庫之中,進(jìn)行后續(xù)的數(shù)據(jù)處理。作為優(yōu)選,所述后續(xù)的數(shù)據(jù)處理如下:(i)建立一個(gè)只包含一個(gè)字符串列的臨時(shí)表加載在json數(shù)據(jù)之上;(ii)利用hive的json解析函數(shù)json_tuple將json字符串中的key轉(zhuǎn)換成列名,value轉(zhuǎn)換成列的值。作為優(yōu)選,所述對(duì)明細(xì)表中進(jìn)行列過濾是排除掉與主題無關(guān)的數(shù)據(jù)點(diǎn),對(duì)行過濾是將與主題相關(guān)的數(shù)據(jù)點(diǎn)的取值范圍縮??;步驟(3)中采用將明細(xì)表的行轉(zhuǎn)換成列,列轉(zhuǎn)換成行,時(shí)間戳列保持不變,增加新的一列作為數(shù)據(jù)點(diǎn)的名稱的方法進(jìn)行過濾。作為優(yōu)選,所述的事實(shí)表與維度表按照一個(gè)或者多個(gè)列連接起來即可形成面向主題的寬表。作為優(yōu)選,所述對(duì)寬表進(jìn)行多維分析的實(shí)現(xiàn)方式為借助hadoop平臺(tái)提供的實(shí)時(shí)sql查詢工具impala,外部的數(shù)據(jù)可視化工具可以利用impala提供的標(biāo)準(zhǔn)sql驅(qū)動(dòng)程序接入寬表的數(shù)據(jù),完成多維分析。本發(fā)明的有益效果在于:(1)opc抽取程序可以將全量的工業(yè)實(shí)時(shí)數(shù)據(jù)寫入數(shù)據(jù)倉庫,由于數(shù)據(jù)存儲(chǔ)使用hadoop分布式文件系統(tǒng),橫向擴(kuò)展方便,不會(huì)由于存儲(chǔ)容量的限制而被迫以抽樣的方式將部分?jǐn)?shù)據(jù)丟棄;(2)利用基于hadoop的分布式計(jì)算引擎生成面向主題的寬表,這樣在大數(shù)據(jù)量和大計(jì)算量的情況下也能夠在相對(duì)短的時(shí)間內(nèi)完成建模的過程;(3)由于hadoop分布式文件系統(tǒng)存儲(chǔ)容量巨大,可以允許寬表中一定程度的數(shù)據(jù)冗余,這樣在數(shù)據(jù)可視化系統(tǒng)中可以免于多表的連接,提供低延時(shí)的多維分析功能;(4)利用基于hadoop的工作流調(diào)度引擎,建模運(yùn)算過程容錯(cuò)性強(qiáng),穩(wěn)定性高;(5)本發(fā)明方法流程清晰,通用性強(qiáng),可以方便拓展到工業(yè)大數(shù)據(jù)的各種多維分析業(yè)務(wù)中。附圖說明圖1是本發(fā)明方法的流程示意圖;圖2是實(shí)施本發(fā)明的系統(tǒng)架構(gòu)示意圖。具體實(shí)施方式下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步描述,但本發(fā)明的保護(hù)范圍并不僅限于此:實(shí)施例:如圖1所示,一種高效的工業(yè)大數(shù)據(jù)多維分析方法包括如下步驟:(1)從opc服務(wù)器中讀取數(shù)據(jù)寫入hadoop分布式文件系統(tǒng);opc抽取程序按照標(biāo)準(zhǔn)的opc協(xié)議從opc服務(wù)器讀取全部的工業(yè)實(shí)時(shí)數(shù)據(jù),然后打上讀取時(shí)的時(shí)間戳視為一次讀取。假設(shè)opc服務(wù)器能夠提供的數(shù)據(jù)點(diǎn)為key1、key2、key3,對(duì)應(yīng)的數(shù)據(jù)分別為value1、value2、value3;時(shí)間戳用timestamp表示,對(duì)應(yīng)的值為yyyy-mm-dd-hh-mm-ss;其中,y表示年,m表示月,d表示天,h表示時(shí),m表示分,s表示秒。opc抽取程序一次讀取的數(shù)據(jù)用json格式描述,形成字符串如下:{“key1”:“value1”,“key2”:“value2”,“key3”:“value3”,“timestamp”:“yyyy-mm-dd-hh-mm-ss”}opc抽取程序的抽取頻率為秒級(jí),抽取的數(shù)據(jù)按照一行一個(gè)json字符串的形式寫入hadoop分布式文件系統(tǒng),json字符串以小時(shí)為單位合并到一個(gè)或者多個(gè)文件中,屬于每個(gè)小時(shí)的文件放入同一個(gè)文件夾。在opc抽取程序?qū)⒁粋€(gè)小時(shí)的數(shù)據(jù)寫完之后,會(huì)在對(duì)應(yīng)的文件夾中生成一個(gè)大小為0的文件,文件名為_success,后續(xù)數(shù)據(jù)處理程序會(huì)以是否有_success作為當(dāng)前文件夾內(nèi)數(shù)據(jù)是否完整的判斷標(biāo)準(zhǔn)。opc抽取程序的抽取頻率和數(shù)據(jù)合并的時(shí)間單位可以根據(jù)實(shí)際業(yè)務(wù)的情況修改,但是一般來說抽取頻率至少比合并時(shí)間單位小一個(gè)數(shù)量級(jí)。較高的抽取頻率是為了盡可能獲取更多的實(shí)時(shí)數(shù)據(jù),不丟失數(shù)據(jù)所表示的物理狀態(tài);相對(duì)粗粒度的合并時(shí)間單位,是為了便于分布式計(jì)算引擎更加高效的處理數(shù)據(jù),同時(shí)兼顧了數(shù)據(jù)的時(shí)效性。(2)將原始數(shù)據(jù)轉(zhuǎn)換成hive數(shù)據(jù)倉庫中的明細(xì)表;使用上述的json格式將工業(yè)實(shí)時(shí)數(shù)據(jù)存儲(chǔ)在hadoop分布式文件系統(tǒng)中,是由于json格式在邏輯上天然的與工業(yè)實(shí)時(shí)數(shù)據(jù)相近,方便opc抽取程序的處理。但是json格式數(shù)據(jù)冗余很高,同一個(gè)opc服務(wù)器對(duì)應(yīng)的數(shù)據(jù)集之中,數(shù)據(jù)點(diǎn)key大量重復(fù),在大數(shù)據(jù)的情況下是對(duì)存儲(chǔ)資源的浪費(fèi)。因此,我們將json格式的opc數(shù)據(jù)僅僅作為一個(gè)緩沖層,約定一個(gè)緩沖期例如3個(gè)月,通過hadoop分布式文件系統(tǒng)提供的工作流調(diào)度工具oozie每天啟動(dòng)一個(gè)定時(shí)任務(wù),將超過緩沖期的json文件從hadoop分布式文件系統(tǒng)中刪除掉。opc抽取程序?qū)?shù)據(jù)寫入hadoop分布式文件系統(tǒng)之后,oozie會(huì)根據(jù)數(shù)據(jù)的合并時(shí)間單位定時(shí)啟動(dòng)一個(gè)任務(wù),將json格式的數(shù)據(jù)轉(zhuǎn)換成一張二維的明細(xì)表,加載進(jìn)入基于hadoop平臺(tái)的hive數(shù)據(jù)倉庫之中,進(jìn)行后續(xù)的數(shù)據(jù)處理。將json格式的opc數(shù)據(jù)轉(zhuǎn)換成hive明細(xì)表主要通過兩個(gè)步驟,首先建立一個(gè)只包含一個(gè)字符串列的臨時(shí)表加載在json數(shù)據(jù)之上,然后利用hive的json解析函數(shù)json_tuple將json字符串中的key轉(zhuǎn)換成列名,value轉(zhuǎn)換成列的值。步驟(1)中的json字符串轉(zhuǎn)換成hive明細(xì)表后結(jié)果如表1所示:key1key2key3timestampvalue1value2value3yyyy-mm-dd-hh-mm-ss表1表1中,第一行為列名,是opc數(shù)據(jù)點(diǎn)的名稱,最后加上每次數(shù)據(jù)點(diǎn)采集的時(shí)間戳;第二行才是真正的存儲(chǔ)在hadoop分布式文件系統(tǒng)中的工業(yè)實(shí)時(shí)數(shù)據(jù)。如果按照一個(gè)單位時(shí)間,如一個(gè)小時(shí),對(duì)數(shù)據(jù)進(jìn)行合并,那么明細(xì)表中將會(huì)有多行數(shù)據(jù),將這些行作為明細(xì)表的一個(gè)分區(qū),分區(qū)名為yyyy-mm-dd-hh。這樣分區(qū)的目的是為了方便明細(xì)表增量的更新,也是為了出現(xiàn)異常之后方便以分區(qū)為單位重新計(jì)算。(2)將明細(xì)表中需要的行和列過濾出來形成事實(shí)表;一張明細(xì)表反映了一個(gè)opc服務(wù)器所能提供的所有工業(yè)實(shí)時(shí)數(shù)據(jù),實(shí)際情況中一個(gè)opc服務(wù)器可能會(huì)有成千上萬個(gè)數(shù)據(jù)點(diǎn),但是用戶只關(guān)心與某個(gè)主題相關(guān)的那些數(shù)據(jù)點(diǎn)。因此,我們需要對(duì)明細(xì)表的行和列進(jìn)行過濾,生成事實(shí)表。對(duì)列過濾是排除掉與主題無關(guān)的數(shù)據(jù)點(diǎn),對(duì)行過濾是將與主題相關(guān)的數(shù)據(jù)點(diǎn)的取值范圍進(jìn)一步縮小。一般來說,列過濾是必不可少的,而行過濾是可選的。為了方便在后續(xù)步驟中事實(shí)表可以和維度表按照數(shù)據(jù)點(diǎn)的key進(jìn)行連接,在行列過濾的過程中需要將明細(xì)表的行轉(zhuǎn)換成列,列轉(zhuǎn)換成行,時(shí)間戳列保持不變,增加新的一列作為數(shù)據(jù)點(diǎn)的名稱。如表2所示,假設(shè)有明細(xì)表中包含key1、key2、key3三個(gè)數(shù)據(jù)點(diǎn),明細(xì)表的一個(gè)分區(qū)中有三行數(shù)據(jù)對(duì)應(yīng)的時(shí)間戳為time1、time2、time3,通過列過濾排除明細(xì)表中key3對(duì)應(yīng)的列,通過行過濾排除明細(xì)表中time3對(duì)應(yīng)的行,然后經(jīng)過行列變換的規(guī)則之后生成事實(shí)表,如表3所示。此時(shí),opc數(shù)據(jù)點(diǎn)的名稱不再是列名,而是成為了事實(shí)表中的key值,同時(shí)時(shí)間戳這一列依然和明細(xì)表保持一致。key1key2key3timestampvalue11value12value13time1value21value22value23time2value31value31value31time3表2keyvaluetimestampkey1value11time1key1value21time2key2value12time1key2value22time2表3opc服務(wù)器與明細(xì)表是一一對(duì)應(yīng)的關(guān)系;而明細(xì)表與事實(shí)表是一對(duì)多的關(guān)系,即一張明細(xì)表可以生成多張事實(shí)表,而一張事實(shí)表只能來源于一張明細(xì)表。這樣做的目的是為了避免在生成事實(shí)表的過程中發(fā)生多表的連接,簡(jiǎn)化流程,提高執(zhí)行的效率。(4)將事實(shí)表和維度表連接形成面向主題的寬表;事實(shí)表直接來源與工業(yè)實(shí)時(shí)數(shù)據(jù),而維度表則來源于其他的外部系統(tǒng),需要用戶手動(dòng)導(dǎo)入到hive數(shù)據(jù)倉庫之中。比如用戶可以在關(guān)系數(shù)據(jù)庫中編輯好維度表,然后通過hadoop平臺(tái)提供的分布式關(guān)系數(shù)據(jù)表導(dǎo)入工具sqoop將維度表導(dǎo)入到hive數(shù)據(jù)倉庫之中。一般來說,維度表的變更頻率較低,數(shù)據(jù)量也遠(yuǎn)遠(yuǎn)小于事實(shí)表。由一張或者多張事實(shí)表,加上一張或者多張維度表,按照一個(gè)或者多個(gè)列連接起來即可形成面向某個(gè)特定主體的寬表。一般情況下,連接的列會(huì)包括數(shù)據(jù)點(diǎn)的key,連接過程中多個(gè)列可以按照某個(gè)計(jì)算公式參與運(yùn)算,連接過程中也可以對(duì)行或者列進(jìn)行過濾。假設(shè)有如表4所示的事實(shí)表和如表5所示的維度表,兩個(gè)表的key值均是opc數(shù)據(jù)點(diǎn)的名稱,value表示數(shù)據(jù)點(diǎn)對(duì)應(yīng)的值,dimension1和dimension2表示與數(shù)據(jù)點(diǎn)相關(guān)的兩個(gè)維度例如車間和工序,按照數(shù)據(jù)點(diǎn)key連接之后形成了寬表,如表6所示。寬表是面向某個(gè)業(yè)務(wù)主題的,應(yīng)該盡可能包含與該主體相關(guān)的所有數(shù)據(jù),需要按照寧可冗余也不能缺失的原則。寬表形成之后即可對(duì)外提供多維分析的服務(wù),借助hadoop平臺(tái)提供的實(shí)時(shí)sql查詢工具impala,外部的數(shù)據(jù)可視化工具可以利用impala提供的標(biāo)準(zhǔn)sql驅(qū)動(dòng)程序接入寬表的數(shù)據(jù),對(duì)用戶提供即席查詢、看板等各種多維分析功能。keyvaluetimestampkey1value1time1key2value2time1表4keydimension1dimension2key1dim11dim21key2dim12dim22key3dim13dim23表5keyvaluedimension1dimension2timestampkey1value1dim11dim21time1key2value2dim12dim22time1表6運(yùn)用本發(fā)明方法的系統(tǒng)架構(gòu)圖如圖2所示。本發(fā)明應(yīng)用于某大型有色金屬制造廠,通過生產(chǎn)線上實(shí)時(shí)數(shù)據(jù)的采集,對(duì)該廠整個(gè)生產(chǎn)過程的電能消耗進(jìn)行分析,發(fā)掘潛在的能耗浪費(fèi)原因,對(duì)能耗超額進(jìn)行告警,實(shí)現(xiàn)了能耗的可視化管理。具體實(shí)施步驟如下:1、通過opc抽取程序每30秒一次獲取生產(chǎn)線上所有的數(shù)據(jù)點(diǎn),并按照小時(shí)聚合成表分區(qū),生成數(shù)據(jù)倉庫中的明細(xì)表。2、將明細(xì)表中與設(shè)備耗電相關(guān)的數(shù)據(jù)點(diǎn)過濾出來生成電能消耗的事實(shí)表。3、外部編輯數(shù)據(jù)點(diǎn)名稱、設(shè)備名稱、設(shè)備類型、車間、工序、班次、時(shí)間相關(guān)的維表,并導(dǎo)入到數(shù)據(jù)數(shù)據(jù)倉庫之中。4、將事實(shí)表和維表連接,應(yīng)用相應(yīng)的電能計(jì)算公式,生成設(shè)備電能消耗為主題的寬表,數(shù)據(jù)可視化工具可以按照不同的維度實(shí)時(shí)分析生產(chǎn)線上電能消耗的情況。以上的所述乃是本發(fā)明的具體實(shí)施例及所運(yùn)用的技術(shù)原理,若依本發(fā)明的構(gòu)想所作的改變,其所產(chǎn)生的功能作用仍未超出說明書及附圖所涵蓋的精神時(shí),仍應(yīng)屬本發(fā)明的保護(hù)范圍。當(dāng)前第1頁12