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

Dun*_*ebs 3 hadoop hdfs hft hstore hdfstore


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

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

静态模式 - 非常简单,我想从feed中捕获3种类型的消息:

  1. 时间戳包括日期,日期,时间
  2. 引用包括Symbol,timestamp,ask,askSize,bid,bidSize,volume ....(约40列数据)
  3. 交易包括符号,时间戳,价格,大小,交换....(约20列数据)

数据插入用例 - 来自实时市场数据流或通过代理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.

圣杯 - MapReduce可以用于下面这些用例吗?

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

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

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

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

Ama*_*mar 7

根据我对您的要求的理解,Hadoop将是一个非常好的解决方案,可以使用Hive存储您的数据并在其上运行您的查询.

存储:您可以将数据存储在Hadoop中的目录结构中,如:

~/stock_data/years=2014/months=201409/days=20140925/hours=01/file
Run Code Online (Sandbox Code Playgroud)

在hours文件夹中,可以驻留特定于当天该小时的数据.

使用此类结构的一个优点是,您可以在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'
Run Code Online (Sandbox Code Playgroud)

来到查询部分,一旦您以上述格式存储数据,您就可以轻松地运行简单查询.

在2014年9月22日为我提供所有报价,交易,时间戳

select * from stock_data where stock = 'GOOG' and days = 20140922
Run Code Online (Sandbox Code Playgroud)

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

select * from stock_data where stock in ('GOOG', 'FB') and days > 20140501 and days < 20140901)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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