我在学习hadoop和它周围的各种项目时很开心,目前我正在考虑两种不同的策略来构建一个系统来存储大量的市场行情数据,我刚刚开始使用hadoop/hdsf和hbase,但希望有人能帮我种下一个系统种子,以后使用这些技术我就不必丢弃它了。下面是我的系统概要和需求,以及一些查询和数据使用用例,最后是我从我阅读的小文档中对最佳方法的当前想法。这是一个开放式的问题,我很乐意接受任何有见地的答案,并接受最好的一个,请随时评论下面的任何或所有要点。-邓肯·克雷布斯
系统要求-能够利用数据存储进行系统的历史回测、历史数据图表和未来数据挖掘。一旦存储,数据将永远是只读的,快速的数据访问是理想的,但不是必须的,当回测。
静态模式-非常简单,我想从提要捕获3种类型的消息:
时间戳,包括日期、日期、时间
报价包括符号、时间戳、ask、asksize、bid、bidsize、卷……(约40列数据)
贸易包括符号,时间戳,价格,大小,交换(大约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分钟间隔内的平均交易量。创建作业,使每个股票/会话都有一个代理,我告诉它应该为哪个股票和会话计算这个值(这就是mapreduce能做的吗??)
在代理的类路径上,我是否可以添加自己的util代码,以便上面的用例可以将其值发布到中心repo或消息传递服务器中?我可以将代理部署为osgi包吗?
为不同类型的指标和分数创建不同类型的代理,这些指标和分数每天早上在上市前交易前执行?
高频交易
如果有人能分享一些在高频交易系统中使用hadoop的经验,我也很感兴趣。刚接触到这项技术,我最初的感觉是hadoop可以很好地存储和处理大量的历史数据,如果有人用它进行实时交易,我会有兴趣了解更多邓肯·克雷布斯
1条答案
按热度按时间ki1q1bka1#
根据我对您的需求的理解,hadoop将是一个非常好的解决方案,可以使用hive来存储数据和运行查询。
存储:可以将hadoop中的数据存储在如下目录结构中:
在hours文件夹中,可以驻留特定于一天中该小时的数据。
使用这种结构的一个优点是,您可以在配置单元中创建外部表来覆盖这些数据,并按年、月、日和小时划分分区。像这样:
在查询部分,一旦您以上述格式存储了数据,就可以轻松地运行简单的查询。
给我2014年9月22日谷歌的所有报价,交易,时间戳
请在2014年9月1日之前和2014年5月1日之后给我提供goog、fb的所有交易
您可以每天运行一次任何此类聚合查询,并在上市前交易之前使用输出来提出度量。因为hive在内部运行mapreduce,所以这些查询不会很快。
为了获得更快的结果,您可以使用一些内存中的项目,如impala或spark。我自己使用impala在我的配置单元表上运行查询,我看到查询的运行时间有了很大的改进(大约是40倍)。而且您不需要对数据的结构进行任何更改。
数据插入用例:可以使用flume或kafka等工具将数据实时插入hadoop(从而插入到hive表)。flume是线性可伸缩的,在传输过程中还可以帮助处理动态事件。
总的来说,多种大数据技术的结合可以为您提出的问题提供一个真正体面的解决方案,这些解决方案可以扩展到大量数据。