web-dev-qa-db-ja.com

HadoopとDjango、それは可能ですか?

私が理解したところによると、Hadoopは分散ストレージシステムです。しかし、実際には得られないのは、通常のRDBMS(MySQL、Postgresql、Oracle)をHadoopに置き換えることはできますか?それとも、Hadoopは単なる別のタイプのファイルシステムであり、RDBMSを実行できますか?

また、Django Hadoopと統合できますか?通常、Webフレームワーク(ASP.NET、PHP、Java(JSP、JSFなど))はどのようにHadoopと統合できますか?

HadoopとRDBMSについて少し混乱しているので、説明をいただければ幸いです。 (申し訳ありませんが、ドキュメントを何度も読んでいますが、英語の知識が不足しているためか、ほとんどの場合、ドキュメントが少し混乱していることがわかります)

23
Haikal Nashuha

Hadoopとは何ですか?

次の課題を想像してみてください。大量のデータがあり、大量の場合、少なくともテラバイトを意味します。このデータを変換するか、いくつかの情報を抽出して、データを操作できるように、インデックス付け、圧縮、または「ダイジェスト」された形式に処理する必要があります。

Hadoopはそのような処理ジョブを並列化することができ、ここで最良の部分は、ファイルの冗長ストレージ、クラスター上の異なるマシンへのタスクの分散などの処理を行います(はい、クラスターが必要です。そうでない場合、Hadoopはフレームワークのパフォーマンス低下を補うことができません)。

Hadoopエコシステムを最初に見ると、HDFS(Hadoopファイルシステム)、Hadoop自体(MapReduceを使用)、HBase(「データベース」の場合は列ストアであり、正確に適合しない)の3つの大きな用語があります。

HDFSは、HadoopとHBaseの両方で使用されるファイルシステムです。これは、ホスト上の通常のファイルシステムの上にある追加のレイヤーです。 HDFSは、アップロードされたファイルをチャンク(通常は64MB)にスライスし、クラスター内で使用可能な状態に保ち、レプリケーションを処理します。

Hadoopが実行するタスクを取得すると、HDFS上の入力ファイルのパス、目的の出力パス、マッパー、およびレデューサークラスを取得します。マッパーとリデューサーは通常、JARファイルで渡されるJavaクラスです(ただし、 Hadoop Streaming を使用すると、任意のコマンドラインツールを使用できます)。マッパーは呼び出されます。入力ファイルのすべてのエントリ(通常は行ごと、たとえば「行に不正なF *ワードが含まれている場合は1を返す」)を処理するために、出力はレデューサーに渡され、レデューサーは単一の出力を目的の他の形式にマージします(例: :数字の追加)。これは、「不良ワード」カウンターを取得する簡単な方法です。

クールなこと:マッピングの計算はノード上で行われます。チャンクを線形に処理し、半消化された(通常は小さい)データだけをネットワーク経由でレデューサーに移動します。

また、ノードの1つが停止した場合、同じデータを持つ別のノードがあります。

HBaseは、ファイルの分散ストレージを利用して、クラスター上でチャンクに分割されたテーブルを格納します。 HBaseは、Hadoopとは異なり、データへのランダムアクセスを提供します。

ご覧のとおり、HBaseとHadoopはRDMBSとはかなり異なります。また、HBaseにはRDBMSの多くの概念が欠けています。トリガー、プリペアドステートメント、外部キーなどを使用してデータをモデル化することは、HBaseが行うと考えられていたことではありません(これについて100%確信が持てないので、訂正してください;-))

Django Hadoopと統合できますか?

Javaの場合は簡単です:HadoopはJavaで記述されており、すべてのAPIが用意されており、すぐに使用できます。

Python/Djangoについては(まだ)わかりませんが、最後の手段としてHadoopストリーミング/ Jythonを使用して何かできると確信しています。私は次のことを見つけました: Hadoopy および マッパーとリデューサーのPython

24
romedius

色相 、HadoopのWeb UIは Djangoに基づく

7
Romain

DjangoはほとんどのRDMSと接続できるため、Hadoopベースのソリューションで使用できます。

Hadoopはさまざまなものであるため、具体的には、HBaseなどの低レイテンシーが必要であり、HiveやImpalaで使用しないでください。

Pythonには、Hbaseにクエリを実行できるthriftベースのバインディングhappybaseがあります。

3
Sonny

Django Hadoopとの統合の基本的な(!)例[リンクを削除]

私はOozie REST apiをジョブの実行に使用し、 'hadoop cat'を使用してジョブの結果を取得します(HDFSの分散性のため)。より良いアプローチは、Hoopのようなものを使用してHDFSデータを取得することです。とにかく、これは単純な解決策ではありません。

P.S.このコードをリファクタリングして https://github.com/Obie-Wan/Django_hadoop に配置しました。これで、別のDjangoアプリになりました。

1
Obie-Wan