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