2011-02-03 4 views
9

こんにちはを照会するために、のHadoop(+ HBaseの/ HDFS) - 独立した、構造化データのロードが処理され、</strong> SO <strong>であっ

私から次のいくつかのアイデア/コメントをしたいと思いますあなたは名誉ある尊敬の房です。

私は処理する必要がある100Mのレコードを持っています。私はこれを行うために5つのノードを(岩石群内に)持っています。データは非常に構造化されており、リレーショナルデータモデルにはうまく収まりません。私は処理に時間がかかるので、並行してやりたい

私はそれを見ると、私は、主に2つのオプションがあります。

する各ノード上でMySQLをインストールし、それぞれに20Mレコードを入れています。ヘッドノードを使用して、ノードにクエリを委任し、結果を集約します。 クエリ機能++でも、私はパーティショニング戦略などを選択するときに頭痛に冒される可能性があります(Q.これはmysql/postgresクラスタと呼ばれていますか?)。本当に悪い点は、レコードの処理が今私に任せられていることです(マシン間での配布方法など)。

また、Hadoop、Hive、HBaseをインストールしてください。 HBaseは列指向であるため、データを格納する最も効率的な方法です)、ノードを定義するだけです。私たちはMapReduceのパラダイムにすべてを書いています。私たちはいつまでも幸せに生きています。ここで問題となるのは、「リアルタイム」クエリ機能が失われていることです(ハイブを使用できることはわかっていますが、これはリアルタイムクエリに対しては推奨されません)ワインからcolor = 'brown'を選択してください。

理論上、もし私が100Mのマシンを持っていたら、各レコードに対して処理が他のものと独立しているので、即座に全てを行うことができました。また、私のデータは読み取り専用です。私は更新が起こっているとは考えていません。私は1つのノードに100Mのレコードを必要としません。 mysql/postgresとHadoop/HBase/HDFSの両方に保存するので、冗長なデータが存在することは望ましくありません。本当の選択肢ではありません。

多くのおかげ

+0

私の友人は私にこのようなものを投稿しました:http://www.cloudera.com/blog/2009/03/database-access-with-hadoop/それは正しい方向への小さな一歩ですが、私はデザインについてのあなたの意見を聞きたいのですが、どうすればいいのですか... – MalteseUnderdog

答えて

1

HI、

は、私はSQLAlchemyのとライブラリをマルチプロセッシングのpythonを使用して並行して作成された多くのテーブルを持っていた状況がありました。テーブルごとに1つずつ複数のファイルがあり、並列COPYプロセスを使用してロードしました。各プロセスが別々のテーブルに対応する場合、それはうまく機能します。 1つのテーブルでCOPYを使用するのは難しいでしょう。あなたはPostgreSQLでテーブル分割を使うことができました。あなたが興味を持っているなら、私は詳細を与えることができます。

よろしくお願いいたします。

2

提案する前に、いくつか質問してください。
プライマリキーのみでアクセスできるようにクエリを構成できますか?言い換えれば、 - すべての結合とテーブルスキャンを回避できる場合。もしそうなら、HBaseはオプションです。非常に高速な読み出し/書き込みアクセスが必要な場合。
ハイヴァイが低いデータ量を考慮して良いオプションではないことはありません。あなたがそれらが大きく成長することを期待すれば - それを考慮することができます。どんな場合でも、ハイブはOLTPタイプの処理ではなく、分析ワークロードに適しています。
ジョインとスキャンでリレーショナルモデルが必要な場合は、1つのマスターノードと4つのスレーブ間でレプリケーションを行うのがよいソリューションだと思います。マスターへのすべての書き込みを指示し、クラスタ全体の読み取りをバランスさせます。それはあなたがはるかに多くの読書をしている場合は特に良いです。
このスキーマでは、各ノードに100Mレコード(一致していないもの)がすべて存在します。必要に応じて、各ノード内でパーティション化を使用できます。

8

MySQLがボトルネックであることを証明できますか? 100万レコードはそれほど多くなく、複雑なクエリを実行していないようです。どのような処理が行われているか正確にわからなくても、次の順番で処理します:

  1. 100MをMySQLに保存します。 ClouderaのSqoopユーティリティを見て、データベースからレコードをインポートし、Hadoopでレコードを処理してください。
  2. MySQLが(1)のボトルネックになっている場合は、スレーブレプリケーションを設定することを検討してください。これにより、断片化されたデータベースの複雑さなしに、読み込みをパラレル化できます。すでにデータベースに書き戻す必要はないと述べているので、これは実行可能な解決策になるはずです。必要な数のサーバーにデータを複製できます。
  3. データベースから複雑な選択クエリを実行していて、(2)がまだ実行可能でない場合は、Sqoopを使用してレコードをインポートし、Hadoopで必要なクエリ変換を実行することを検討してください。

あなたの状況では、絶対に必要でない限り、私はMySQLから飛び降りる誘惑に抵抗します。

1

Cassandraを使用することをおすすめします。私は最近、あなたの記事を読むときに思い出されたHBase vs. Cassandraのこの記事を発見しました。

その要点は、Cassandraは高い評価を得ているNoSQLソリューションであり、探しているソリューションのような音のようなものであることが速いクエリです。

したがって、リレーショナル・モデルを維持する必要があるかどうかによって異なります。

関連する問題