私は現在、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 を認識している必要があるため、データが「そこにある」と仮定することはできません。
誰かがこれらのトピックについて簡単に詳しく説明してくれれば幸いです。
- ホームディレクトリは何のためにあるのでしょうか?
- 最初にデータをホーム ディレクトリに移行し、その後で実際の分散システムに移行しますか?
- WebHDFS はどのように機能し、user.name 変数に関してどのような役割を果たしますか
- 「ビッグ データ」をその場で HDFS に移行するにはどうすればよいでしょうか。また、それがビッグ データでなくても、ファイル システムに適切な方法でデータを取り込むにはどうすればよいでしょうか (つまり、チャンクがクラスター全体にランダムに分散されるようにするにはどうすればよいでしょうか?