張魯奧
(山東省章丘市第四中學(xué),山東章丘,250200)
隨著大數(shù)據(jù)技術(shù)的蓬勃發(fā)展,越來(lái)越多的數(shù)據(jù)等著我們?nèi)プR(shí)別,讀取,歸類,計(jì)算。針對(duì)于股票市場(chǎng),如何利用大數(shù)據(jù)技術(shù)去發(fā)掘股票中隱含的眾多有價(jià)值的信息,幫助股民合理購(gòu)買股票,獲得最大利潤(rùn)是我們急需解決的難題,目前在股票領(lǐng)域的大數(shù)據(jù)研究尚不完善。因此,我們提出利用hadoop分布式框架來(lái)對(duì)每只股票的利潤(rùn)進(jìn)行分析的方案,用到的主要技術(shù)是分布式并行計(jì)算(mapreduce)和分布式文件存儲(chǔ)系統(tǒng)(HDFS)。對(duì)于每只股票的數(shù)據(jù)會(huì)冗雜在一起,形成龐大的數(shù)據(jù)量的情況,目前比較主流的海量數(shù)據(jù)存儲(chǔ)系統(tǒng)主要采用HDFS文件系統(tǒng)。在本文中我們把每只股票的相關(guān)信息存儲(chǔ)在HDFS文件中,然后讀取出來(lái),通過(guò)MapReduce對(duì)股票數(shù)據(jù)進(jìn)行分析。
目前,在股票行業(yè)中,每支股票每天產(chǎn)生的數(shù)據(jù)量難以預(yù)估,隱含的有價(jià)值的信息難以提取,如,開(kāi)盤(pán)時(shí)間,閉盤(pán)時(shí)間,開(kāi)盤(pán)價(jià)格,閉盤(pán)價(jià)格,多個(gè)特征中如何提取有用信息,如何有效準(zhǔn)確的計(jì)算股票數(shù)據(jù),在該領(lǐng)域的研究還有待完善。對(duì)于股票數(shù)據(jù)的分析處理問(wèn)題,我們提出了合理可行的方案,基于Hadoop的并行式計(jì)算框架運(yùn)用了HDFS存儲(chǔ)機(jī)制和Mapreduce的并行式運(yùn)算,可以有效合理的解決上述問(wèn)題?;趆adoop大數(shù)據(jù)的分布式并行計(jì)算框架設(shè)計(jì)方案,依賴快速高效的mapreduce,實(shí)現(xiàn)實(shí)時(shí)大數(shù)據(jù)的復(fù)雜計(jì)算,提供每一支股票的年利潤(rùn)、總利潤(rùn)、平均利潤(rùn)等特征,并對(duì)明年股票進(jìn)行分析和預(yù)測(cè)。
數(shù)據(jù)源模塊的主要功能是利用API服務(wù)獲取股票的數(shù)據(jù),以龐大的股票數(shù)據(jù)做支撐,是整個(gè)框架的數(shù)據(jù)的唯一來(lái)源,上層數(shù)據(jù)的處理與整合都來(lái)源于數(shù)據(jù)源模塊。
圖1
數(shù)據(jù)接入層的主要功能是存儲(chǔ)來(lái)源于數(shù)據(jù)源層的股票數(shù)據(jù),利用分布式消息訂閱系統(tǒng)kafka框架實(shí)現(xiàn)。它是一個(gè)針對(duì)流式數(shù)據(jù)處理的分布式消息訂閱系統(tǒng)。主要包括如下幾個(gè)模塊:
(1)Broker:Kafka集群是由1個(gè)或者多個(gè)服務(wù)器組成,這種服務(wù)器即為broker
(2)Producer:消息數(shù)據(jù)的生產(chǎn)者。
(3)Topic:是指發(fā)送到集群中的消息分類,每一個(gè)類別都是一個(gè)Topic。
(4)Consumer:消費(fèi)消息的一方,負(fù)責(zé)broker的Topic讀取股票消息數(shù)據(jù)。
數(shù)據(jù)提取模塊的主要功能是對(duì)數(shù)據(jù)做ETL(Extract-Transform-Load)處理,清洗數(shù)據(jù),構(gòu)建數(shù)據(jù)倉(cāng)庫(kù),對(duì)數(shù)據(jù)進(jìn)行分層處理。用到的主要工具的數(shù)據(jù)抽取框架Gobblin。
Gobblin是一種數(shù)據(jù)提取整合框架,可以接收以Kafka, fl ume等數(shù)據(jù)源的數(shù)據(jù),并將這些數(shù)據(jù)采用定時(shí)的方式寫(xiě)入HDFS文件中中。這樣便于集群拉取數(shù)據(jù)進(jìn)行清洗、處理、分析等操作。主要包含如下組件:
(1)Source:主要起到適配器的作用。
(2)Converter:主要用來(lái)對(duì)股票數(shù)據(jù)進(jìn)行清洗過(guò)濾操作,將數(shù)據(jù)轉(zhuǎn)為需要的類型。
(3)Quality Checker:主要用于數(shù)據(jù)質(zhì)量檢測(cè),以此保證數(shù)據(jù)質(zhì)量,可通過(guò)手動(dòng)或者可選策略的方式,將check的數(shù)據(jù)輸出到指定的外部文件中。
(4)Writer:依據(jù)程序指定的配置文件,按照指定的數(shù)據(jù)格式,將股票數(shù)據(jù)輸出到最終的存儲(chǔ)路徑下。
(5)Publiser:將數(shù)據(jù)輸出到配置文件指定的路徑下。
數(shù)據(jù)存儲(chǔ)模塊的功能主要針對(duì)股票數(shù)據(jù)的存儲(chǔ),用到的主要存儲(chǔ)工具是分布式文件系統(tǒng)(HDFS)。具有如下幾個(gè)特點(diǎn):
(1)故障分析
針對(duì)HDFS一些無(wú)效的部件或者無(wú)效的文件片進(jìn)行合理的分析、處理。
(2)數(shù)據(jù)訪問(wèn)
hadoop的hdfs讀取和寫(xiě)入數(shù)據(jù)采用的是流式讀取和寫(xiě)入的方式,這一般程序讀取數(shù)據(jù)的方式。HDFS比較適合離線的、批量的數(shù)據(jù)存儲(chǔ),針對(duì)的是高吞吐量,體現(xiàn)在數(shù)據(jù)吞吐量上。
(3)大數(shù)據(jù)集
HDFS分布式文件系統(tǒng)主要是針對(duì)高吞吐量的作業(yè),需要依賴海量數(shù)據(jù)集,如果數(shù)據(jù)量較小,無(wú)法體現(xiàn)HDFS分布式文件系統(tǒng)的特性和優(yōu)勢(shì),通常一個(gè)分布式集群可以支持成百上千個(gè)數(shù)據(jù)節(jié)點(diǎn)和成千上萬(wàn)的文件量。
(4)簡(jiǎn)單一致性模型
HDFS文件操作具有簡(jiǎn)單一致性的特點(diǎn),對(duì)文件的操作都是采用一次寫(xiě)入多次讀取的方式。HDFS文件只要經(jīng)過(guò)創(chuàng)
計(jì)算海量數(shù)據(jù)的能力,是目前處理高吞吐量數(shù)據(jù)比較可靠的方法。
通過(guò)數(shù)據(jù)讀取,計(jì)算,最后會(huì)得到反饋,我們會(huì)得到每只股票的年利潤(rùn),平均利潤(rùn),通過(guò)利潤(rùn)計(jì)算來(lái)預(yù)測(cè)這只股票下一年的走勢(shì)。
對(duì)于海量的股票數(shù)據(jù)存儲(chǔ)主要是采用分布式文件系統(tǒng)HDFS。HDFS文件系統(tǒng)主要針對(duì)離線、高吞吐量的數(shù)據(jù)存儲(chǔ)系統(tǒng),采用流式數(shù)據(jù)讀取和寫(xiě)入的方式處理大文件數(shù)據(jù)。
Block:block是HDFS文件存儲(chǔ)的基本單位。數(shù)據(jù)的讀取和寫(xiě)入都是以block為單位的,默認(rèn)大小為64M,在本文中,股票數(shù)據(jù)被分成64M大小的block塊進(jìn)行存儲(chǔ)。
NameNode:名稱節(jié)點(diǎn),主要的功能是保存文件系統(tǒng)的元數(shù)據(jù),主要維護(hù)兩個(gè)數(shù)據(jù)結(jié)構(gòu):fsimage和editlog。editlog記錄對(duì)HDFS文件的增刪改查操作。
DataNode:datanode是客戶端讀取或者寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)會(huì)定期采用心跳機(jī)制和namenode節(jié)點(diǎn)交互,以此獲取整個(gè)集群的資源信息。
HDFS讀取股票數(shù)據(jù)的過(guò)程:
(1)客戶端通過(guò)API采用遠(yuǎn)程調(diào)用的方式和namenode進(jìn)行通信(此過(guò)程的通信協(xié)議依然是Tcp/Ip協(xié)議),得到股票數(shù)據(jù)塊信息。
(2)Namenode節(jié)點(diǎn)返回保存每一個(gè)block數(shù)據(jù)塊的地址信息,并按距離遠(yuǎn)近進(jìn)行排序。
(3)給客戶端獲得存儲(chǔ)block數(shù)據(jù)的地址信息后,調(diào)用API,讀取存儲(chǔ)股票數(shù)據(jù)的block塊。
(4)客戶端調(diào)用API的開(kāi)始讀取數(shù)據(jù)。當(dāng)block數(shù)據(jù)塊數(shù)據(jù)讀取結(jié)束時(shí),關(guān)閉相應(yīng)數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接和下一個(gè)需要讀入文件距離最近的節(jié)點(diǎn),繼續(xù)讀入股票數(shù)據(jù)。
圖2
(5)當(dāng)客戶端(client)讀取股票數(shù)據(jù)結(jié)束的時(shí)候,通過(guò)調(diào)用API的close方法,關(guān)閉股票輸入流即可。
股票的數(shù)據(jù)計(jì)算采用的是分布式計(jì)算框架MapReduce。MapReduce采用分布式計(jì)算的方式,采用主從架構(gòu)的模式,執(zhí)行的過(guò)程主要可分為map和reduce兩個(gè)過(guò)程。
mapreduce的對(duì)股票數(shù)據(jù)的計(jì)算過(guò)程如下。
(1)客戶端要編寫(xiě)好腳本程序,打成可運(yùn)行的jar包,準(zhǔn)備需要讀入計(jì)算的數(shù)據(jù)源,也就是我們的股票數(shù)據(jù)。
(2)提交任務(wù),提交股票數(shù)據(jù)是提交到Resource Manager上的,ResourceManager就會(huì)構(gòu)建這個(gè)股票任務(wù)的信息,給這個(gè)需要運(yùn)行的任務(wù)一個(gè)id,即為JobId,同時(shí)檢查作業(yè)的輸出目錄是否已經(jīng)存在,若不存在,正常運(yùn)行;如已經(jīng)存在,要進(jìn)行資源的重新分配。
(3)作業(yè)初始化操作,將股票數(shù)據(jù)放到一個(gè)內(nèi)部隊(duì)列中,通過(guò)調(diào)度器進(jìn)行初始化工作,創(chuàng)建一個(gè)正在運(yùn)行的股票數(shù)據(jù)對(duì)象。
(4)初始化過(guò)程結(jié)束后,作業(yè)調(diào)度器(schema)讀入輸入分片信息如果分片較小,會(huì)先聚合成大文件讀入,減少I/O帶來(lái)的時(shí)間延誤。接下來(lái)就是任務(wù)分配的過(guò)程了,先遍歷每一個(gè)分片的數(shù)據(jù),并根據(jù)分片數(shù)據(jù)的遠(yuǎn)近進(jìn)行排序。
(5)執(zhí)行任務(wù)。將運(yùn)行任務(wù)的jar包從HDFS拷貝到本地并進(jìn)行解壓.并創(chuàng)建一個(gè)JVM,將Application程序加載到JVM中來(lái)執(zhí)行具體的任務(wù)。
·輸入分片(inputsplit):HDFS文件理想的split大小是一個(gè)HDFS塊,本次實(shí)驗(yàn)采用默認(rèn)的64M為一個(gè)block塊。
·map階段:①讀取HDFS中的文件。每一行按指定分隔符進(jìn)行分割,將分割后的結(jié)果解析成一個(gè)<key,value>鍵值對(duì)。②對(duì)分割后輸出的<key,value>鍵值對(duì)進(jìn)行分區(qū)操作;③對(duì)不同分區(qū)(partition)的股票數(shù)據(jù)按照key值進(jìn)行排序操作。④對(duì)分組排序后的數(shù)據(jù)進(jìn)行歸約,減少傳輸?shù)絩educe過(guò)程的數(shù)據(jù)量
·reduce階段:①對(duì)于map的輸出結(jié)果,按照分區(qū)(partition)的不同,通過(guò)http協(xié)議,遠(yuǎn)程拷貝到不同的reduce節(jié)點(diǎn)上:②將reduce處理后的<key,value>結(jié)果輸出到HDFS文件系統(tǒng)。
本文提出了基于hadoop的股票利潤(rùn)分析設(shè)計(jì)方案,對(duì)股票數(shù)據(jù)進(jìn)行了提取,存儲(chǔ),計(jì)算,得到股票的利潤(rùn)信息。通過(guò)對(duì)股票利潤(rùn)進(jìn)行分析,對(duì)股票的發(fā)展趨勢(shì)進(jìn)行了合理的預(yù)測(cè)。在大數(shù)據(jù)時(shí)代,采用分布式并行計(jì)算框架和存儲(chǔ)框架解決實(shí)際問(wèn)題已經(jīng)成為一種必然趨勢(shì)。最近幾年,股票市場(chǎng)研究一直在不斷加大,對(duì)股票信息進(jìn)行分析,預(yù)測(cè)已經(jīng)成為一個(gè)熱門(mén)研究方向。股票的分析預(yù)測(cè)可以幫助股民提取股票中的關(guān)鍵信息,精準(zhǔn)把握股票市場(chǎng)的動(dòng)態(tài),以此獲得更高的利潤(rùn),避免股票陷阱。
影響股票價(jià)格走勢(shì)和利潤(rùn)多少的因素多種多樣,我們無(wú)法把所有因素全都考慮到平臺(tái)中,因此想要實(shí)現(xiàn)股票價(jià)格的精確預(yù)測(cè)十分困難,難以實(shí)現(xiàn)??v使我們能夠把每一支股票的利潤(rùn)都分析出來(lái),依然存在誤差,但對(duì)股票的整體的走勢(shì)分析依舊有很大的幫助。