24

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

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

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

4

4 に答える 4

26

Hadoop とは何ですか?

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

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

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

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

Hadoop が実行するタスクを取得すると、HDFS 上の入力ファイルのパス、目的の出力パス、Mapper および Reducer クラスを取得します。Mapper と Reducer は通常、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 and Python in Mappers and Reducers

于 2012-10-01T10:52:35.473 に答える
1

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

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

PS このコードをリファクタリングし、https://github.com/Obie-Wan/django_hadoopに配置しました。今は別の django アプリです。

于 2013-05-07T11:22:03.480 に答える