2014-09-23 136 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可线性扩展,并可帮助处理传输过程中的实时事件。

    总的来说,多种大数据技术的组合可以为您提出的问题提供一个非常体面的解决方案,并且这些解决方案可以扩展到大量数据。