張魯奧
(山東省章丘市第四中學,山東章丘,250200)
隨著大數據技術的蓬勃發展,越來越多的數據等著我們去識別,讀取,歸類,計算。針對于股票市場,如何利用大數據技術去發掘股票中隱含的眾多有價值的信息,幫助股民合理購買股票,獲得最大利潤是我們急需解決的難題,目前在股票領域的大數據研究尚不完善。因此,我們提出利用hadoop分布式框架來對每只股票的利潤進行分析的方案,用到的主要技術是分布式并行計算(mapreduce)和分布式文件存儲系統(HDFS)。對于每只股票的數據會冗雜在一起,形成龐大的數據量的情況,目前比較主流的海量數據存儲系統主要采用HDFS文件系統。在本文中我們把每只股票的相關信息存儲在HDFS文件中,然后讀取出來,通過MapReduce對股票數據進行分析。
目前,在股票行業中,每支股票每天產生的數據量難以預估,隱含的有價值的信息難以提取,如,開盤時間,閉盤時間,開盤價格,閉盤價格,多個特征中如何提取有用信息,如何有效準確的計算股票數據,在該領域的研究還有待完善。對于股票數據的分析處理問題,我們提出了合理可行的方案,基于Hadoop的并行式計算框架運用了HDFS存儲機制和Mapreduce的并行式運算,可以有效合理的解決上述問題。基于hadoop大數據的分布式并行計算框架設計方案,依賴快速高效的mapreduce,實現實時大數據的復雜計算,提供每一支股票的年利潤、總利潤、平均利潤等特征,并對明年股票進行分析和預測。
數據源模塊的主要功能是利用API服務獲取股票的數據,以龐大的股票數據做支撐,是整個框架的數據的唯一來源,上層數據的處理與整合都來源于數據源模塊。

圖1
數據接入層的主要功能是存儲來源于數據源層的股票數據,利用分布式消息訂閱系統kafka框架實現。它是一個針對流式數據處理的分布式消息訂閱系統。主要包括如下幾個模塊:
(1)Broker:Kafka集群是由1個或者多個服務器組成,這種服務器即為broker
(2)Producer:消息數據的生產者。
(3)Topic:是指發送到集群中的消息分類,每一個類別都是一個Topic。
(4)Consumer:消費消息的一方,負責broker的Topic讀取股票消息數據。
數據提取模塊的主要功能是對數據做ETL(Extract-Transform-Load)處理,清洗數據,構建數據倉庫,對數據進行分層處理。用到的主要工具的數據抽取框架Gobblin。
Gobblin是一種數據提取整合框架,可以接收以Kafka, fl ume等數據源的數據,并將這些數據采用定時的方式寫入HDFS文件中中。這樣便于集群拉取數據進行清洗、處理、分析等操作。主要包含如下組件:
(1)Source:主要起到適配器的作用。
(2)Converter:主要用來對股票數據進行清洗過濾操作,將數據轉為需要的類型。
(3)Quality Checker:主要用于數據質量檢測,以此保證數據質量,可通過手動或者可選策略的方式,將check的數據輸出到指定的外部文件中。
(4)Writer:依據程序指定的配置文件,按照指定的數據格式,將股票數據輸出到最終的存儲路徑下。
(5)Publiser:將數據輸出到配置文件指定的路徑下。
數據存儲模塊的功能主要針對股票數據的存儲,用到的主要存儲工具是分布式文件系統(HDFS)。具有如下幾個特點:
(1)故障分析
針對HDFS一些無效的部件或者無效的文件片進行合理的分析、處理。
(2)數據訪問
hadoop的hdfs讀取和寫入數據采用的是流式讀取和寫入的方式,這一般程序讀取數據的方式。HDFS比較適合離線的、批量的數據存儲,針對的是高吞吐量,體現在數據吞吐量上。
(3)大數據集
HDFS分布式文件系統主要是針對高吞吐量的作業,需要依賴海量數據集,如果數據量較小,無法體現HDFS分布式文件系統的特性和優勢,通常一個分布式集群可以支持成百上千個數據節點和成千上萬的文件量。
(4)簡單一致性模型
HDFS文件操作具有簡單一致性的特點,對文件的操作都是采用一次寫入多次讀取的方式。HDFS文件只要經過創
計算海量數據的能力,是目前處理高吞吐量數據比較可靠的方法。
通過數據讀取,計算,最后會得到反饋,我們會得到每只股票的年利潤,平均利潤,通過利潤計算來預測這只股票下一年的走勢。
對于海量的股票數據存儲主要是采用分布式文件系統HDFS。HDFS文件系統主要針對離線、高吞吐量的數據存儲系統,采用流式數據讀取和寫入的方式處理大文件數據。
Block:block是HDFS文件存儲的基本單位。數據的讀取和寫入都是以block為單位的,默認大小為64M,在本文中,股票數據被分成64M大小的block塊進行存儲。
NameNode:名稱節點,主要的功能是保存文件系統的元數據,主要維護兩個數據結構:fsimage和editlog。editlog記錄對HDFS文件的增刪改查操作。
DataNode:datanode是客戶端讀取或者寫入數據的節點,數據節點會定期采用心跳機制和namenode節點交互,以此獲取整個集群的資源信息。
HDFS讀取股票數據的過程:
(1)客戶端通過API采用遠程調用的方式和namenode進行通信(此過程的通信協議依然是Tcp/Ip協議),得到股票數據塊信息。
(2)Namenode節點返回保存每一個block數據塊的地址信息,并按距離遠近進行排序。
(3)給客戶端獲得存儲block數據的地址信息后,調用API,讀取存儲股票數據的block塊。
(4)客戶端調用API的開始讀取數據。當block數據塊數據讀取結束時,關閉相應數據節點的連接,然后連接和下一個需要讀入文件距離最近的節點,繼續讀入股票數據。

圖2
(5)當客戶端(client)讀取股票數據結束的時候,通過調用API的close方法,關閉股票輸入流即可。
股票的數據計算采用的是分布式計算框架MapReduce。MapReduce采用分布式計算的方式,采用主從架構的模式,執行的過程主要可分為map和reduce兩個過程。
mapreduce的對股票數據的計算過程如下。
(1)客戶端要編寫好腳本程序,打成可運行的jar包,準備需要讀入計算的數據源,也就是我們的股票數據。
(2)提交任務,提交股票數據是提交到Resource Manager上的,ResourceManager就會構建這個股票任務的信息,給這個需要運行的任務一個id,即為JobId,同時檢查作業的輸出目錄是否已經存在,若不存在,正常運行;如已經存在,要進行資源的重新分配。
(3)作業初始化操作,將股票數據放到一個內部隊列中,通過調度器進行初始化工作,創建一個正在運行的股票數據對象。
(4)初始化過程結束后,作業調度器(schema)讀入輸入分片信息如果分片較小,會先聚合成大文件讀入,減少I/O帶來的時間延誤。接下來就是任務分配的過程了,先遍歷每一個分片的數據,并根據分片數據的遠近進行排序。
(5)執行任務。將運行任務的jar包從HDFS拷貝到本地并進行解壓.并創建一個JVM,將Application程序加載到JVM中來執行具體的任務。
·輸入分片(inputsplit):HDFS文件理想的split大小是一個HDFS塊,本次實驗采用默認的64M為一個block塊。
·map階段:①讀取HDFS中的文件。每一行按指定分隔符進行分割,將分割后的結果解析成一個<key,value>鍵值對。②對分割后輸出的<key,value>鍵值對進行分區操作;③對不同分區(partition)的股票數據按照key值進行排序操作。④對分組排序后的數據進行歸約,減少傳輸到reduce過程的數據量
·reduce階段:①對于map的輸出結果,按照分區(partition)的不同,通過http協議,遠程拷貝到不同的reduce節點上:②將reduce處理后的<key,value>結果輸出到HDFS文件系統。
本文提出了基于hadoop的股票利潤分析設計方案,對股票數據進行了提取,存儲,計算,得到股票的利潤信息。通過對股票利潤進行分析,對股票的發展趨勢進行了合理的預測。在大數據時代,采用分布式并行計算框架和存儲框架解決實際問題已經成為一種必然趨勢。最近幾年,股票市場研究一直在不斷加大,對股票信息進行分析,預測已經成為一個熱門研究方向。股票的分析預測可以幫助股民提取股票中的關鍵信息,精準把握股票市場的動態,以此獲得更高的利潤,避免股票陷阱。
影響股票價格走勢和利潤多少的因素多種多樣,我們無法把所有因素全都考慮到平臺中,因此想要實現股票價格的精確預測十分困難,難以實現。縱使我們能夠把每一支股票的利潤都分析出來,依然存在誤差,但對股票的整體的走勢分析依舊有很大的幫助。