3


私はHadoopとそれに関連するさまざまなプロジェクトについて楽しく学んでおり、現在、マーケットティックデータの大規模なコレクションを保存するシステムを構築するために2つの異なる戦略を考えています.Hadoop/HDSFの両方を始めたばかりです.と HBase ですが、これらのテクノロジを使用して後でジャンクする必要のないシステムの種を植えるのを誰かが手伝ってくれることを願っています。以下は、いくつかのクエリとデータの使用例を含む私のシステムと要件の概要です。最後に、私が読んだ小さなドキュメントからの最良のアプローチについての私の現在の考えです。これは自由回答形式の質問であり、洞察力に富み、最良の回答を受け入れることができれば幸いです。以下の点のいずれかまたはすべてについて自由にコメントしてください。- ダンカン・クレブス

システム要件 - システムの過去のバック テスト、過去のデータのチャート作成、将来のデータ マイニングにデータ ストアを活用できること。いったん保存されると、データは常に読み取り専用になり、高速なデータ アクセスが望まれますが、バック テストの際には必須ではありません。

静的スキーマ- 非常に単純です。フィードから 3 種類のメッセージを取得したいと考えています。

  1. 日付、曜日、時刻を含むタイムスタンプ
  2. Symbol、timestamp、ask、askSize、bid、bidSize、出来高を含む見積もり (約 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.

The Holy Grail - MapReduce は以下のようなユースケースに使用できますか??

  1. 分散エージェントを介して生の市場データからメタデータを生成します。たとえば、データベースに保存されているすべての株式とすべてのセッションについて、1 分間隔で平均取引量を計算するジョブを作成します。この値を計算する必要がある株式とセッションを伝える、各株式/セッションのエージェントを持つジョブを作成します。(これが MapReduce でできることですか???)

  2. エージェントのクラスパスに独自のユーティリティ コードを追加して、たとえば上記のユース ケースでその値を中央レポやメッセージング サーバーに公開できますか? エージェントを OSGI バンドルとしてデプロイできますか?

  3. 毎朝、市場前取引の前に実行されるさまざまなタイプのメトリックとスコアに対して、さまざまなタイプのエージェントを作成しますか?

高頻度取引
高頻度取引システムのコンテキストで Hadoop を使用した経験を誰かが共有できるかどうかも興味があります。このテクノロジーを始めたばかりの私の最初の感覚は、Hadoop は大量の過去のティック データを保存および処理するのに最適であるということです。誰かがこれをリアルタイム取引に使用している場合は、もっと学びたいと思います! - ダンカン・クレブス

4

1 に答える 1

7

あなたの要件に対する私の理解に基づいて、Hadoop は、データを保存し、Hive を使用してクエリを実行するための非常に優れたソリューションです。

ストレージ: 次のようなディレクトリ構造で Hadoop にデータを保存できます。

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

時間フォルダー内には、その日のその時間に固有のデータが存在する可能性があります。

このような構造を使用する利点の 1 つは、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)

このような集計クエリを 1 日に 1 回実行し、その出力を使用して、市場前取引の前にメトリックを作成できます。Hive は内部で mapreduce を実行するため、これらのクエリはそれほど高速ではありません。

より高速な結果を得るために、Impala や Spark などのインメモリ プロジェクトを使用できます。私自身、Hive テーブルでクエリを実行するために Impala を使用しましたが、クエリの実行時間が大幅に改善されました (約 40 倍)。また、データの構造を変更する必要はありません。

データ挿入のユース ケース: Flume や Kafka などのツールを使用して、Hadoop (および Hive テーブル) にリアルタイムでデータを挿入できます。Flume は直線的にスケーラブルであり、転送中にオンザフライでイベントを処理するのにも役立ちます。

全体として、複数のビッグ データ テクノロジを組み合わせることで、提案された問題に対して適切なソリューションを提供できます。これらのソリューションは、膨大な量のデータに拡張できます。

于 2014-09-26T20:48:46.827 に答える