このレッスンですること
Hadoop は、とても大きなファイルをブロックに切り分けて、たくさんのマシンに散らして置き、ブロックのある場所でそのまま処理します。HDFS がそのファイルシステムです。どのファイルがどのブロックでできているかを知っている NameNode と、ブロックを持っている DataNode でできています。MapReduce は処理のやり方で、各マシンが自分の分を数え、その数を足し合わせます。
ラボは、NameNode と DataNode が1台ずつある小さなクラスター(何台かのマシンをまとめたもの)です。ファイルを入れて、読み返し、単語数え(ワードカウント)の結果を見ます。
始める前に
メモ
このレッスンの上のバーでラボを起動を押し、動き出したと表示されるまで待ってください。サービスは namenode、datanode、resourcemanager、nodemanager、client で、互いにその名前で見つけ合います。下の実行ボタンは、コマンドをラボのターミナルに、同じセッションの中で順番に入力してくれます。入力の様子を見たり、自分でコマンドを打ったりするときは、バーのターミナルを開く(新しいタブ)を押します。
1. HDFS にファイルを入れよう
最初のコマンドは、自分のターミナルにある1つのファイルに、1文を書き込みます。2つめのコマンドで、それを HDFS に送ります。まず NameNode に聞くと、DataNode のアドレスが返ってきます。curl は -L がついているのでそのアドレスについて行き、そこへバイトを送ります。うまくいくと何も表示されません。/user/lab/mine というフォルダはまだなかったので、HDFS が作りました。
echo 'one fish two fish red fish blue fish' > /tmp/fish.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
curl -s -L -X PUT -T /tmp/fish.txt 'http://namenode:9870/webhdfs/v1/user/lab/mine/fish.txt?op=CREATE&user.name=lab'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2. 一覧を見て、読み返そう
最初のコマンドはフォルダの中身を一覧にします。答えは JSON で、fish.txt について "length":37(文と行末の改行を合わせた長さ)と "replication":1 が出ます。DataNode が1台なので、各ブロックのコピーは1つです。2つめのコマンドはファイルを読み返して、文を表示します。同じファイルは、ブラウザで開く NameNode のページの Utilities(便利な機能)、Browse the file system(ファイルシステムを見る)でも見られます。
curl -s 'http://namenode:9870/webhdfs/v1/user/lab/mine?op=LISTSTATUS'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
curl -s -L 'http://namenode:9870/webhdfs/v1/user/lab/mine/fish.txt?op=OPEN'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3. 単語数えの結果を読もう
ラボが起動したとき、クラスターは Hadoop に付いている単語数えを、サンプルの文に対して実行し、結果を HDFS に残しました。最初のコマンドでそれを表示します。単語ごとに1行で、単語とその回数が出ます。the は 4、dog と fox は 2 です。2つめのコマンドは、ジョブがどうなったかを ResourceManager に聞いて、"finalStatus":"SUCCEEDED" と表示します。あなたのターミナルには hadoop コマンドがないので、自分のファイルの単語数えを始めることはできません。このレッスンでは、ラボがすでに作った結果を読みます。
curl -s -L 'http://namenode:9870/webhdfs/v1/user/lab/wordcount-out/part-r-00000?op=OPEN'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
curl -s http://resourcemanager:8088/ws/v1/cluster/apps | grep -o '"finalStatus":"[A-Z]*"'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボはサービスが5つで、ボリュームはありません。自動採点はありません。生徒は、HDFS に入れたファイルのパス、そのファイルから作った単語数えの行、そして NameNode と DataNode がそれぞれ何をするかの一文を提出します。文章は生徒がそれぞれ選ぶので、答えは人によって違います。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。