王黎,張瑩
漯河食品職業(yè)學(xué)院,河南 漯河 462000
大數(shù)據(jù)技術(shù)是一個(gè)相對(duì)龐大的概念,具體又可細(xì)分為多個(gè)核心的管理功能。而這些功能的實(shí)現(xiàn)全部都離不開各種專業(yè)的軟件工具和相應(yīng)的編程技術(shù)。在大數(shù)據(jù)的采集中需通過程序算法規(guī)定字段、格式等內(nèi)容。在數(shù)據(jù)庫(kù)存儲(chǔ)和查詢中需使用專門的SQL、HQL等語言,數(shù)據(jù)的可視化則要使用前端編程語言和工具。計(jì)算機(jī)軟件技術(shù)的發(fā)展與進(jìn)步直接關(guān)系到大數(shù)據(jù)的發(fā)展,因而要將二者綜合起來研究。
網(wǎng)絡(luò)信息化技術(shù)早已深入地進(jìn)入到生活中的各類場(chǎng)景,大量的日常工作都從傳統(tǒng)的人工模式轉(zhuǎn)化為基于網(wǎng)絡(luò)的線上模式,網(wǎng)絡(luò)化系統(tǒng)的特點(diǎn)是將生活中的具體場(chǎng)景業(yè)務(wù)化、數(shù)據(jù)化以及流程化,每一個(gè)環(huán)節(jié)都會(huì)記錄并存儲(chǔ)下相關(guān)的數(shù)據(jù)信息,業(yè)務(wù)場(chǎng)景越是細(xì)化,數(shù)據(jù)規(guī)模就越龐大,由此便產(chǎn)生了海量的系統(tǒng)運(yùn)營(yíng)數(shù)據(jù)。大數(shù)據(jù)技術(shù)在本質(zhì)上是為了適應(yīng)現(xiàn)代社會(huì)數(shù)據(jù)規(guī)模急速膨脹所建立一整套數(shù)據(jù)管理技術(shù),從圖1中可知,大數(shù)據(jù)技術(shù)在實(shí)際應(yīng)用過程中需實(shí)現(xiàn)一系列核心功能,主要包括海量數(shù)據(jù)的采集、存儲(chǔ)、查詢、計(jì)算以及數(shù)據(jù)的可視化等。而這些功能的實(shí)現(xiàn)都依賴于現(xiàn)代化的計(jì)算機(jī)軟件工具、編程語言以及程序算法等,可以說,計(jì)算機(jī)軟件技術(shù)是實(shí)現(xiàn)大數(shù)據(jù)開發(fā)和管理的基礎(chǔ)。例如,在大數(shù)據(jù)的存儲(chǔ)中使用的Hbase可支持海量數(shù)據(jù)的讀寫以及分布式NoSQL數(shù)據(jù)庫(kù),而數(shù)據(jù)庫(kù)相關(guān)的技術(shù)就是最典型的計(jì)算機(jī)軟件技術(shù)。從圖1展示的關(guān)系即可判斷,大數(shù)據(jù)應(yīng)用中的每一個(gè)核心節(jié)點(diǎn)都會(huì)使用到大量的計(jì)算技術(shù)軟件技術(shù),并且后者的更新速度非??欤碌能浖ぞ吆图夹g(shù)不斷涌現(xiàn),這些都會(huì)成為助力大數(shù)據(jù)技術(shù)發(fā)展的積極因素[1]。
圖1 大數(shù)據(jù)技術(shù)及其對(duì)應(yīng)的軟件技術(shù)能力需求
數(shù)據(jù)是大數(shù)據(jù)技術(shù)的源頭,各類業(yè)務(wù)場(chǎng)景中產(chǎn)生的數(shù)據(jù)要通過專業(yè)的計(jì)算機(jī)軟件技術(shù)來進(jìn)行采集,大數(shù)據(jù)采集方式分為多種類型,具體如下。
(1)基于服務(wù)器日志的數(shù)據(jù)采集。這種數(shù)據(jù)采集方式的基本原理如下:用戶訪問一個(gè)軟件系統(tǒng)時(shí),如網(wǎng)站頁(yè)面、APP頁(yè)面,用戶的前端操作行為可通過網(wǎng)站來進(jìn)行監(jiān)聽,頁(yè)面上的各類按鈕可設(shè)計(jì)點(diǎn)擊監(jiān)聽事件、輸入監(jiān)聽事件、選擇監(jiān)聽事件等,用戶每進(jìn)行一次操作,對(duì)應(yīng)的就會(huì)從前端發(fā)出一個(gè)網(wǎng)絡(luò)請(qǐng)求,后端程序中設(shè)計(jì)了專門的程序代碼,訪問進(jìn)入到服務(wù)器之后就會(huì)在日志文件中增加一條新的記錄,日志的格式可自行設(shè)定,由此就會(huì)產(chǎn)生大規(guī)模的日志信息。以Nginx服務(wù)器為例,日志中可記錄訪問者的IP地址、訪問時(shí)間、用戶信息、請(qǐng)求的網(wǎng)絡(luò)鏈接等。工程技術(shù)人員可利用數(shù)據(jù)處理工具,如Linux中的切割、正則匹配等命令從日志文件中提取出有用的信息,并將其存儲(chǔ)起來[2]。
(2)實(shí)時(shí)采集。這種采集方式中會(huì)使用到一些重要的計(jì)算機(jī)軟件工具及相應(yīng)的數(shù)據(jù)處理技術(shù),典型的如Kafka(一種分布式的消息系統(tǒng)),在數(shù)據(jù)規(guī)模較大、訪問請(qǐng)求較為集中的網(wǎng)絡(luò)應(yīng)用系統(tǒng)中可使用類似于Kafka這樣的消息中間件工具,某些系統(tǒng)數(shù)據(jù)先進(jìn)入到Kafka中,等待后端系統(tǒng)批量化的處理和存儲(chǔ)新數(shù)據(jù),Kafka具備臨時(shí)性的存儲(chǔ)功能,同時(shí)可做一定程度的數(shù)據(jù)處理,但最終的數(shù)據(jù)還是要寫入到數(shù)據(jù)庫(kù)中[3]。
(3)網(wǎng)絡(luò)請(qǐng)求寫入數(shù)據(jù)。這種數(shù)據(jù)采集方式指的是用戶在前端系統(tǒng)提交表單或者發(fā)送前端Ajax請(qǐng)求,由請(qǐng)求頭攜帶相關(guān)的數(shù)據(jù)參數(shù)到后端,經(jīng)過一系列的數(shù)據(jù)運(yùn)算之后將特定類型的數(shù)據(jù)資源存儲(chǔ)在大數(shù)據(jù)的存儲(chǔ)系統(tǒng)中,實(shí)際上這是最常規(guī)的數(shù)據(jù)采集方式之一。這一過程中使用到的計(jì)算機(jī)軟件技術(shù)包括前端代碼編寫、后端代碼編寫、業(yè)務(wù)邏輯梳理、后端數(shù)據(jù)庫(kù)系統(tǒng)操作等。
(4)網(wǎng)絡(luò)采集腳本寫入數(shù)據(jù)。爬蟲技術(shù)是通過前端網(wǎng)頁(yè)抓取數(shù)據(jù)的一種方法,目前主要利用Python編寫網(wǎng)絡(luò)爬蟲腳本,對(duì)特定的網(wǎng)站系統(tǒng)開展數(shù)據(jù)的采集,這是一種專業(yè)的前端數(shù)據(jù)采集方式,腳本獲取的數(shù)據(jù)經(jīng)過邏輯運(yùn)算或者計(jì)算,轉(zhuǎn)化成更具價(jià)值的存儲(chǔ)數(shù)據(jù)。
(1)大數(shù)據(jù)存儲(chǔ)技術(shù)和傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)技術(shù)的主要區(qū)別。在過去很長(zhǎng)一段時(shí)間之內(nèi),數(shù)據(jù)存儲(chǔ)技術(shù)建立在Oracle、MySQL等關(guān)系型數(shù)據(jù)庫(kù)上,在數(shù)據(jù)規(guī)模較小的情況下,這種數(shù)據(jù)庫(kù)完全可以滿足使用需求,但是進(jìn)入大數(shù)據(jù)時(shí)代之后,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在查詢速度上表現(xiàn)出嚴(yán)重的缺陷,無法滿足大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)存儲(chǔ)和響應(yīng)速度。于是各種新的數(shù)據(jù)庫(kù)和架構(gòu)模式就出現(xiàn)了[4]。大數(shù)據(jù)技術(shù)下的數(shù)據(jù)存儲(chǔ)系統(tǒng)關(guān)鍵要解決好數(shù)據(jù)規(guī)模不斷攀升與數(shù)據(jù)操作響應(yīng)速度之間的矛盾。
(2)大數(shù)據(jù)存儲(chǔ)技術(shù)。①傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在大數(shù)據(jù)存儲(chǔ)中依然具備很高的利用價(jià)值,因?yàn)檫@些關(guān)系型數(shù)據(jù)庫(kù)可通過系統(tǒng)架構(gòu)的方式形成龐大的數(shù)據(jù)庫(kù)集群,將原本非常集中的數(shù)據(jù)存儲(chǔ)任務(wù)分散到不同的關(guān)系型數(shù)據(jù)庫(kù)中。例如,將網(wǎng)站系統(tǒng)中的圖片資源統(tǒng)一存儲(chǔ)在一個(gè)數(shù)據(jù)庫(kù)中,將其他數(shù)據(jù)資源存儲(chǔ)在其他數(shù)據(jù)庫(kù)中,并且還可進(jìn)行分庫(kù)、分表等一系列操作。用戶訪問數(shù)據(jù)時(shí)可在后端的程序代碼中根據(jù)訪問資源的類型連接到對(duì)應(yīng)的數(shù)據(jù)庫(kù)上,這樣就能顯著提高傳統(tǒng)數(shù)據(jù)庫(kù)的負(fù)載能力和響應(yīng)速度,其技術(shù)優(yōu)化在于數(shù)據(jù)庫(kù)系統(tǒng)的架構(gòu)方式上。②HBase。現(xiàn)階段,談到大數(shù)據(jù)存儲(chǔ)技術(shù),HBase是非常重要的一種技術(shù)路徑,這種數(shù)據(jù)存儲(chǔ)技術(shù)的特點(diǎn)是分布式、高性能、高可靠,可通過Shell接口、API接口等存儲(chǔ)數(shù)據(jù)資源。與傳統(tǒng)的關(guān)系性數(shù)據(jù)庫(kù)不同,HBase對(duì)數(shù)據(jù)的結(jié)構(gòu)沒有做出嚴(yán)格的限制,而關(guān)系型數(shù)據(jù)庫(kù)依靠字段類型、字段長(zhǎng)度等限制數(shù)據(jù)的基本結(jié)構(gòu)。因而HBase的存儲(chǔ)模式更加靈活。③NoSQL數(shù)據(jù)庫(kù)。所謂NoSQL指的是“Not only SQL”,也是相對(duì)于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)而言的,因?yàn)楹笳咧饕褂肧QL語言完成操作。NoSQL數(shù)據(jù)庫(kù)的典型代表是MongoDb、ES等。MongoDb的數(shù)據(jù)格式Bson,結(jié)構(gòu)上與Json非常類似。MongoDb的性能非常優(yōu)越,可勝任大數(shù)據(jù)量的存儲(chǔ)和查詢,尤其是查詢功能,對(duì)傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)形成了巨大的優(yōu)勢(shì)。圖2展示了MongoDb中數(shù)據(jù)的存儲(chǔ)格式,其中存儲(chǔ)的字段名稱是name(姓名),對(duì)應(yīng)的存儲(chǔ)內(nèi)容是“yeyz”和“zhangsan”,這種數(shù)據(jù)庫(kù)可靈活地?cái)U(kuò)充每一條存儲(chǔ)信息的內(nèi)容,如增加新的字段。這些非關(guān)系型數(shù)據(jù)庫(kù)為大數(shù)據(jù)技術(shù)的實(shí)現(xiàn)提供了有力的保障,在很大程度上提升了數(shù)據(jù)存儲(chǔ)的能力[5]。
圖2 MongoDB數(shù)據(jù)格式
基于Pearson相關(guān)系數(shù),對(duì)大數(shù)據(jù)緩存技術(shù)進(jìn)行優(yōu)化,Pearson系數(shù)的取值為[-1,+1],如果Pearson系數(shù)為+1,則變量為正相關(guān)關(guān)系,如果Pearson系數(shù)為-1,則表示變量為負(fù)相關(guān)關(guān)系,其計(jì)算公式為:
大數(shù)據(jù)技術(shù)在存儲(chǔ)到數(shù)據(jù)之后,還需支持快速高效的數(shù)據(jù)查詢服務(wù),數(shù)據(jù)查詢與數(shù)據(jù)存儲(chǔ)系統(tǒng)存在直接的關(guān)聯(lián)。傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫(kù)的大數(shù)據(jù)存儲(chǔ)系統(tǒng)依靠SQL語句來查詢相關(guān)數(shù)據(jù),SQL適用于Oracle、MySQL等一系列關(guān)系型數(shù)據(jù)庫(kù)。MongoDB的數(shù)據(jù)查詢方式具有其特定的命令規(guī)則,可謂自成體系。在大數(shù)據(jù)查詢中要格外重視以下幾種軟件技術(shù)和工具。①Hive。Apache公司在大數(shù)據(jù)技術(shù)方面提供了較為完整的技術(shù)架構(gòu),如Hadoop、Hive等。其中Hadoop是一種適用于大數(shù)據(jù)的分布式系統(tǒng),而Hive則建立在Hadoop之上,其作用是數(shù)據(jù)倉(cāng)庫(kù)的管理工具,數(shù)據(jù)存在文件中,而這些文件滿足關(guān)系性數(shù)據(jù)庫(kù)的字段要求,形成了一種基于文件的結(jié)構(gòu)化數(shù)據(jù),Hive可將這些文件映射成類似于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)表,然后可利用SQL語言直接在映射成的數(shù)據(jù)表中查詢字段信息。Hive中使用的查詢語言稱為HQL,但在原理上、寫法上與SQL基本上是一致的。②Spark。這是一種大數(shù)據(jù)分析引擎,基于內(nèi)存,其特點(diǎn)是通用性強(qiáng)、速度快以及可擴(kuò)展能力強(qiáng)。Spark中內(nèi)置了Spark SQL,專門用于完成大數(shù)據(jù)的查詢。實(shí)際上Spark SQL使用的查詢語言就是HQL和SQL。數(shù)據(jù)源無論是JSON格式、Hive表,均可使用Spark SQL來進(jìn)行查詢。Spark與Hadoop類似,都是一個(gè)完整的生態(tài),其中包含了一系列專業(yè)的軟件工具,內(nèi)嵌了編程語言,Spark中涵蓋了Spark Core、Spark SQL、MLlib(機(jī)器學(xué)習(xí))、Graphx(圖計(jì)算)[6]。這些軟件工具相互配合,在大數(shù)據(jù)存儲(chǔ)、計(jì)算以及查詢方面發(fā)揮著各自的作用。并且國(guó)內(nèi)外的企業(yè)已經(jīng)開始大量使用這些技術(shù)來開展大數(shù)據(jù)業(yè)務(wù)。
進(jìn)入大數(shù)據(jù)時(shí)代之后,數(shù)據(jù)規(guī)模快速擴(kuò)張,對(duì)數(shù)據(jù)運(yùn)算造成了很大的挑戰(zhàn)。在交通、電子商務(wù)、醫(yī)療等各個(gè)產(chǎn)業(yè)中都會(huì)產(chǎn)生大量的數(shù)據(jù)計(jì)算需求,并且這種計(jì)算容量達(dá)到了很高的級(jí)別。大數(shù)據(jù)技術(shù)下開發(fā)出了專業(yè)的大數(shù)據(jù)計(jì)算引擎。較為著名的計(jì)算引擎包括Storm、Flink、Spark Streaming等。這些計(jì)算引擎是一種專業(yè)的算法程序,本質(zhì)上也屬于軟件技術(shù)的一種,按照相關(guān)分類,一種稱為實(shí)時(shí)計(jì)算引擎,另一種稱為離線計(jì)算引擎。前者在計(jì)算上的延時(shí)非常短,一般只有毫秒到秒級(jí)別,離線計(jì)算的延時(shí)量較大,可按照T+1秒來評(píng)估。實(shí)時(shí)計(jì)算引擎中的典型代表是Flink、Spark Streaming。離線計(jì)算引擎的典型是Spark。Storm可用于實(shí)現(xiàn)批量計(jì)算任務(wù)。圖3中較為全面地展示了一些主流大數(shù)據(jù)技術(shù)在整個(gè)系統(tǒng)中的關(guān)聯(lián)關(guān)系,從中可觀察到Flink在系統(tǒng)中所處的位置,作為一種計(jì)算引擎,經(jīng)過Flink的處理之后才會(huì)將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,F(xiàn)link在工作時(shí)會(huì)占用計(jì)算機(jī)內(nèi)存[7]。
圖3 大數(shù)據(jù)系統(tǒng)中各種軟件工具和技術(shù)的關(guān)聯(lián)示意圖
大數(shù)據(jù)技術(shù)畢竟是為人和社會(huì)所服務(wù)的,各種海量的數(shù)據(jù)既要滿足于軟件工具的計(jì)算、存儲(chǔ)和查詢,更為關(guān)鍵的是借助前端頁(yè)面將這些大數(shù)據(jù)展示出來,形成一種數(shù)據(jù)可視化的管理模式。例如,企業(yè)在運(yùn)營(yíng)過程中需掌握用戶大數(shù)據(jù),如地區(qū)分布圖。那么前端可使用類似電子地圖的形式將各個(gè)省份的用戶數(shù)據(jù)展示在對(duì)應(yīng)在版圖上,這樣就可一目了然的通過視覺化的圖形快速掌握相關(guān)信息。實(shí)際上大數(shù)據(jù)可視化需要前端的軟件界面和后端的數(shù)據(jù)查詢代碼實(shí)現(xiàn)高度的配合。至于可視化的前端界面,主要是利用JS、HTML5以及CSS等前端語言進(jìn)行編寫。目前已經(jīng)出現(xiàn)了一大批集成化的可視化前端軟件工具平臺(tái),例如Highcharts、ECharts等。其中ECharts由國(guó)內(nèi)的企業(yè)自主開發(fā)而成,內(nèi)置了折線圖、柱狀圖、陰影圖、雷達(dá)圖以及其他多種類型的可視化前端數(shù)據(jù)展示效果,并且軟件開發(fā)人員還可利用ECharts自行定義和開發(fā)一些可視化的圖例。大數(shù)據(jù)展示是大數(shù)據(jù)技術(shù)中非常關(guān)鍵的一個(gè)環(huán)節(jié)。除了圖例之外,還包括企業(yè)管理中經(jīng)常使用的報(bào)表、數(shù)據(jù)表格等??傮w而言,大數(shù)據(jù)的可視化展示主要使用了前端軟件開發(fā)技術(shù),包括JavaScript以及各種成熟的前端軟件包。ECharts在使用時(shí)先將源代碼下載下來,然后放置在服務(wù)器中的特定目錄中,隨著項(xiàng)目共同引入,之后便可在前端調(diào)用其中的對(duì)象,展示數(shù)據(jù)圖表[8]。
計(jì)算機(jī)軟件技術(shù)是大數(shù)據(jù)技術(shù)的重要基礎(chǔ),從數(shù)據(jù)采集,到數(shù)據(jù)存儲(chǔ),再到數(shù)據(jù)的前端展示,都離不開各種軟件工具、編程語言以及集成化的軟件框架。在研究大數(shù)據(jù)技術(shù)時(shí)應(yīng)該充分建立計(jì)算機(jī)軟件技術(shù)的基礎(chǔ)之上,分析大數(shù)據(jù)中的不同功能分別使用了哪些軟件工具和技術(shù),重點(diǎn)在于HBase、Hive、Spark等與大數(shù)據(jù)密切相關(guān)的軟件技術(shù)。