2

私は現在、VM で Hadoop を「いじっています」(cloudera の CDH4.1.3 イメージ)。私が疑問に思っているのは次のことです(そして、ドキュメントはその点で私を本当に助けませんでした)。

チュートリアルに従って、最初に NameNode をフォーマットします。Cloudera イメージを使用する場合は、すでに完了しています。同様に、HDFS ファイル構造はすでに存在しています。hdfs-site.xml では、datanode data dir が次のように設定されています。

/var/lib/hadoop-hdfs/cache/${user.name}/dfs/data

これは明らかに、実際の分散設定でブロックがコピーされるはずの場所です。cloudera のチュートリアルでは、hdfs の「ホーム ディレクトリ」を各ユーザー ( /users/<username>) ごとに作成するように指示されていますが、その目的がわかりません。単一ノード設定でのローカル テスト実行専用ですか? ローカル ストレージに収まらないタイプのデータが実際に数ペタバイトあるとします。このデータはすぐに配布する必要があり、ローカルの「ホーム ディレクトリ」はまったく役に立たなくなります。

直感的にわかるように、大量のデータを扱う実際の Hadoop ワークフローがどのようになるか教えてもらえますか? 最初にどのような種類のノードを実行しますか?

マスター (JobTracker) とそのスレーブ ファイル (どこに置くか) があり、マスターがすべての DataNode を解決できるようにします。次に、ブロック ID が格納されている場所を追跡する NameNode があります。DataNode は、TaskTracker の責任も負います。構成ファイルには、NameNode の URI が含まれています。これまでのところ、正しいですか? それから、構成にはまだ${user.name}変数があり、それを正しく理解していれば、WebHDFS と関係があるようです。実行中の例では、指示がハードコーディングされる傾向があります。

/var/lib/hadoop-hdfs/cache/1/dfs/data, /var/lib/hadoop-hdfs/cache/2/dfs/data and so on.

では、例に戻ります。たとえば、テープを持っていて、データを HDFS にインポートしたいとします (そして、単一のマシンにローカルに保存するためのローカル ストレージがないため、ファイル システムにデータをストリーミングする必要があります)。移行プロセスはどこから始めればよいですか? 任意の DataNode で? チャンクを配布する NameNode では? 結局のところ、名前ノードはブロック ID を認識している必要があるため、データが「そこにある」と仮定することはできません。

誰かがこれらのトピックについて簡単に詳しく説明してくれれば幸いです。

  1. ホームディレクトリは何のためにあるのでしょうか?
  2. 最初にデータをホーム ディレクトリに移行し、その後で実際の分散システムに移行しますか?
  3. WebHDFS はどのように機能し、user.name 変数に関してどのような役割を果たしますか
  4. 「ビッグ データ」をその場で HDFS に移行するにはどうすればよいでしょうか。また、それがビッグ データでなくても、ファイル システムに適切な方法でデータを取り込むにはどうすればよいでしょうか (つまり、チャンクがクラスター全体にランダムに分散されるようにするにはどうすればよいでしょうか?
4

1 に答える 1

5

ホームディレクトリは何のためにあるのでしょうか?

ここで少し混乱しています。/home が Linux のローカル ファイルシステムに存在するように、ユーザーには独自のストレージ スペースが与えられますが、/users は HDFS (分散 FS) のホーム マウントです。チュートリアルでは、後でデータのロードとクエリを実行するユーザーのホーム ディレクトリを管理上作成する必要があります。これにより、ユーザーは HDFS への適切なアクセス許可とストレージ アクセスを取得できます。チュートリアルでは、これらのディレクトリをローカルに作成するよう求めていません。

最初にデータをホーム ディレクトリに移行し、その後で実際の分散システムに移行しますか?

上記の回答でこれが明確になると思います。HDFS にホーム ディレクトリを作成し、そのディレクトリ内にすべてのデータをロードする必要があります。

WebHDFS はどのように機能し、user.name 変数に関してどのような役割を果たしますか

WebHDFS は、HDFS にアクセスするさまざまな方法の 1 つです。HDFS と通信する通常のクライアントでは、Java API を使用する必要があります。WebHDFS (および HttpFs) 手法が HDFS に追加され、HDFS に REST フロントエンドを提供することで、他の言語が独自の API セットを持つことができるようになりました。WebHDFS ではユーザー認証が可能であり、アクセス許可とセキュリティ モデルを永続化するのに役立ちます。

「ビッグ データ」をその場で HDFS に移行するにはどうすればよいでしょうか。また、それがビッグ データでなくても、ファイル システムに適切な方法でデータを取り込むにはどうすればよいでしょうか (つまり、チャンクがクラスター全体にランダムに分散されるようにするにはどうすればよいでしょうか?

HDFS が解決する問題の大部分は、データの分散を管理することです。HDFS にファイルまたはデータ ストリームをロードする場合 (CLI ツール、Apache Flume からのシンクなどを介して)、ブロックは HDFS 自体によって理想的な分散に分散され、チャンクも HDFS によって管理されます。あなたがする必要があるのは、ユーザー側の通常の FileSystem スタイル API を使用することだけであり、その下にあるものはすべてあなたのために管理されます。

于 2013-02-17T08:30:01.943 に答える