2014-09-23 139 views
3


我很開心學習Hadoop及其周圍的各種項目,目前有兩種不同的策略,我正在考慮構建一個系統來存儲大量的市場報價數據,我剛剛開始使用Hadoop/HDSF和HBase,但希望有人可以幫助我種植系統種子,以後我不會再使用這些技術來垃圾。下面概述了我的系統和需求以及一些查詢和數據使用用例,最後是我目前關於從我讀過的小文檔中找到最佳方法的想法。這是一個開放式問題,我很樂意喜歡任何有洞察力的答案,並接受最好的答案,隨時評論下面的任何或全部要點。 - 鄧肯克雷布斯使用Hadoop存儲股票市場報價數據

系統要求 - 能夠利用數據存儲系統的歷史反向測試,歷史數據製圖和未來的數據挖掘。一旦存儲,數據將永遠是隻讀的,快速數據訪問是理想的,但不是回測時必需的。

靜態模式 - 很簡單,我想捕捉3種消息從飼料:

  1. 時間戳,包括日期,星期,時間
  2. 報價,包括符號,時間戳,問,askSize,投標,bidSize,體積....(約40數據的列)
  3. 貿易,包括符號,時間戳,價格,尺寸,交換....(數據約20列)

數據插入用例 - 無論是從數據或查找的實時市場數據流通過經紀人API

數據查詢用例 - 下面展示了我怎麼想查詢邏輯我的數據。

  • Get me all Quotes,Trades,Timestamps for GOOG on 9/22/2014
  • Get me all Trades for GOOG,FB BEFORE 9/1/2014 AND AFTER 5/1/2014
  • Get me the number of trades for these 50 symbols for each day over the last 90 days.
  • 聖盃 - 可MapReduce的用於使用情況下,像這些下面??

    1. 通過分佈式代理從原始市場數據生成元數據。例如,編寫一份工作計算所有股票和存儲在數據庫中的所有會話在1分鐘內的平均交易量。爲每個股票/會話創建一個代理,讓我告訴它應該計算這個值的股票和會話。 (這是什麼的MapReduce可以做???)

    2. 在我可以添加自己的util的代碼,以便使用上面的情況,例如可以發佈它的值寫入中央回購或消息服務器代理的類路徑?我可以將代理部署爲OSGI捆綁包嗎?

    3. 爲不同類型的指標和評分創建不同類型的代理,每天早上在交易前市場交易前執行?

    高頻交易
    我也有興趣,如果任何人都可以分享的高頻交易系統的情況下使用Hadoop的一些經驗。剛開始使用這項技術,我的初衷是Hadoop可以非常適合存儲和處理大量的歷史數據,如果有人正在使用它進行實時交易,我會對更多的學習感興趣! - Duncan Krebs

    +2

    你能分享一下你的意思嗎?HFT-- hadoop並不意味着實時處理一般。由於大部分內存處理,Spark的性能會更好,但大多數HFT(取決於您的時間表)都需要您避免磁盤/刪除網絡。再次,這取決於你的時間表HFT。 – 2014-09-23 00:20:52

    +0

    嗨,ali haider,這也是我的感覺,HFT生態系統中的hadoop最適合存儲來自實時流或歷史查詢的滴答數據。我只是好奇,人們是否將它用於諸如日內刻度數據存儲之類的事物,這些數據在整個細分市場上實時分析,這些數據在記憶中變得困難。感謝您的評論 - 將看看星火餵養我的好奇心。 – 2014-09-23 00:31:02

    +1

    您可以通過火花更輕鬆地解決Diska和內存存儲之間的問題。使用Hadoop,您可能需要查看內存中的數據網格(或者最好是大型RAM節點上的堆外存儲器),以解決您正在嘗試執行的操作。 – 2014-09-23 00:34:35

    回答

    7

    根據我對您的需求的理解,Hadoop將是一個非常好的解決方案,可以存儲您的數據並使用Hive在其上運行您的查詢。

    儲存:您可以在Hadoop中的數據存儲在類似於目錄結構:

    ~/stock_data/years=2014/months=201409/days=20140925/hours=01/file 
    

    裏面的文件夾小時,具體到一天的那個時刻數據可以駐留。

    使用這種結構的一個優點是,您可以在Hive上使用您的分區在年,月,日和小時中在此數據中創建外部表。事情是這樣的:

    Create external table stock_data (schema) PARTITIONED BY (years bigint, months bigint, days bigint, hours int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 
        '~/stock_data' 
    

    來到查詢的一部分,一旦你存儲在上面你提到的可以輕鬆地運行簡單的查詢格式的數據。

    給我所有的行情,交易,時間戳爲GOOG於2014年9月22日

    select * from stock_data where stock = 'GOOG' and days = 20140922 
    

    找我要GOOG所有行業,FB之前2014年9月1日及之後2014年5月1日

    select * from stock_data where stock in ('GOOG', 'FB') and days > 20140501 and days < 20140901) 
    

    您可以在一天內運行一次這樣的彙總查詢,並使用輸出在市場交易前提出指標。由於Hive內部運行mapreduce,這些查詢不會很快。

    爲了獲得更快的結果,您可以使用一些內存項目,如Impala或Spark。我自己用Impala在我的配置單元表上運行查詢,並且我看到我的查詢在運行時間方面有了重大改進(大約40x)。你也不需要對數據的結構做任何改變。

    數據插入用例:您可以使用像Flume或Kafka這樣的工具將數據實時插入Hadoop(從而插入到hive表)。 Flume可線性擴展,並可幫助處理傳輸過程中的實時事件。

    總的來說,多種大數據技術的組合可以爲您提出的問題提供一個非常體面的解決方案,並且這些解決方案可以擴展到大量數據。