使用Hadoop存储股票市场价格数据

时间:2014-09-23 00:08:35

标签: hadoop hdfs hstore hdfstore hft


我很高兴了解Hadoop及其周围的各种项目,目前我有两种不同的策略,我正考虑建立一个系统来存储大量的市场价格数据,我只是得到了从Hadoop / HDSF和HBase开始,但希望有人可以帮助我种植一个系统种子,以后我不得不使用这些技术进行垃圾处理。下面是我的系统和要求的概述,包括一些查询和数据使用用例,最后是我目前对我所阅读的小文档中最佳方法的思考。这是一个开放式的问题,我很乐意接受任何具有洞察力并接受最佳答案的答案,随时评论以下任何或所有要点。 - 邓肯克雷布斯

系统要求 - 能够利用数据存储进行系统的历史回溯测试,历史数据图表和未来的数据挖掘。一旦存储,数据将始终是只读的,需要快速数据访问,但在返回测试时不是必须的。

静态架构 - 非常简单,我想从Feed中捕获3种类型的消息:

  1. 时间戳,包括日期,日期,时间
  2. 引用包括Symbol,timestamp,ask,askSize,bid,bidSize,volume ....(约40列数据)
  3. 交易包括符号,时间戳,价格,大小,交换....(约20列数据)
  4. 数据插入用例 - 来自实时市场数据流或通过代理API查找

    数据查询用例 - 下面演示了我如何逻辑查询数据。

    1. Get me all Quotes,Trades,Timestamps for GOOG on 9/22/2014
    2. Get me all Trades for GOOG,FB BEFORE 9/1/2014 AND AFTER 5/1/2014
    3. Get me the number of trades for these 50 symbols for each day over the last 90 days.
    4. 圣杯 - MapReduce可以用于下面这些用例吗?

      1. 通过分布式代理从原始市场数据生成元数据。例如,编写一个作业,计算所有股票和数据库中存储的所有股票的1分钟间隔的平均交易量。创建作业以为每个库存/会话设置一个代理,我告诉它应该为哪个库存和会话计算该值。 (这是MapReduce可以做的吗?)

      2. 在代理的类路径中,我可以添加自己的util代码,以便上面的用例可以将其值发布到中央存储库或Messaging服务器中吗?我可以将代理部署为OSGI捆绑包吗?

      3. 为上市前交易前每天早上执行的不同类型的指标和分数创建不同类型的代理?

      4. 高频交易
        如果有人可以在高频交易系统中使用Hadoop分享一些经验,我也很感兴趣。刚开始使用这项技术,我最初的感觉是Hadoop可以很好地存储和处理大量的历史滴答数据,如果有人使用它进行实时交易,我有兴趣了解更多信息! - 邓肯克雷布斯

1 个答案:

答案 0 :(得分: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'

进入查询部分,一旦您以上述格式存储数据,您就可以轻松运行简单查询。

获取2014年9月22日的所有行情,交易,时间戳

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

在2014年9月1日及2014年5月1日之后获取所有针对GOOG,FB的交易

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

您可以在一天内运行一次任何此类聚合查询,并在上市前交易之前使用输出来提供指标。由于Hive在内部运行mapreduce,因此这些查询的速度不会很快。

为了获得更快的结果,您可以使用一些内存项目,如Impala或Spark。我自己使用Impala在我的hive表上运行查询,我看到我的查询运行时间有了很大的改进(大约40倍)。您也不需要对数据结构进行任何更改。

数据插入用例:您可以使用Flume或Kafka等工具将数据实时插入Hadoop(以及hive表)。 Flume具有线性可扩展性,还可以在传输过程中帮助处理事件。

总的来说,多种大数据技术的结合可以为您提出的问题提供非常好的解决方案,这些解决方案可以扩展到大量数据。