gpt4 book ai didi

hadoop - 使用 Hadoop 存储股市报价数据

转载 作者:可可西里 更新时间:2023-11-01 14:25:36 26 4
gpt4 key购买 nike


我在学习 Hadoop 及其相关的各种项目时很开心,目前我正在考虑构建一个系统来存储大量市场报价数据的 2 种不同策略,我才刚刚开始使用 Hadoop/HDSF和 HBase,但希望有人可以帮助我种下系统种子,以后使用这些技术时我就不必将其丢弃。下面是我的系统和要求的概述,以及一些查询和数据使用用例,最后是我目前从我阅读的少量文档中考虑的最佳方法。这是一个开放式问题,我很乐意喜欢任何有见地的答案并接受最好的答案,请随时对以下任何或所有要点发表评论。 - 邓肯克雷布斯

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

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

  1. 时间戳包括日期、日期、时间
  2. 报价包括Symbol,timestamp,ask,askSize,bid,bidSize,volume....(约40列数据)
  3. Trade including Symbol,timestamp,price,size,exchange....(约20列数据)

数据插入用例 - 来自实时市场数据流或通过经纪人 API 查找

数据查询用例 - 下面演示了我希望如何从逻辑上查询我的数据。

  1. 获取 2014 年 9 月 22 日 GOOG 的所有行情、交易、时间戳
  2. 获取 2014 年 9 月 1 日之前和 2014 年 1 月 1 日之后的所有 GOOG、FB 交易
  3. 获取过去 90 天内每天这 50 个交易品种的交易次数。

chalice - MapReduce 能否用于以下这些用例?

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

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

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

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

最佳答案

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

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

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

在 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'

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

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

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 在我的配置单元表上运行查询,我发现我的查询运行时间有了重大改进(大约 40 倍)。此外,您不需要对数据结构进行任何更改。

数据插入用例:您可以使用 Flume 或 Kafka 等工具将数据实时插入到 Hadoop(从而插入到配置单元表)。 Flume 是线性可扩展的,还可以帮助在传输时动态处理事件。

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

关于hadoop - 使用 Hadoop 存储股市报价数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com