3


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

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

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

  1. 时间戳,包括日期、日期、时间
  2. 报价包括Symbol,timestamp,ask,askSize,bid,bidSize,volume....(约40列数据)
  3. 交易包括Symbol,timestamp,price,size,exchange....(约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 代码,以便上面的用例可以将其值发布到中央存储库或消息服务器中吗?我可以将代理部署为 OSGI 捆绑包吗?

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

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

4

1 回答 1

7

根据我对您的需求的理解,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 在我的 hive 表上运行查询,并且我看到查询的运行时间有了很大的改进(大约 40 倍)。此外,您不需要对数据结构进行任何更改。

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

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

于 2014-09-26T20:48:46.827 回答