MapReduceのサンプル(WordCount)を実行

HDFSとYARNのインストールが終わったので、MapReduceのサンプルプログラム(WordCount)を実行してみる。

(1)ユーザーディレクトリの作成
HDFS上にユーザーのホームディレクトリを作成する。
/userはhdfsユーザーで作成し、それ以下は個々のユーザーで。
以下、takeユーザーの想定。

$ sudo -u hdfs hadoop fs -mkdir /user
$ hadoop fs -mkdir /user/take

(2)データをHDFSにアップ
せっかくなので公開されているデータを取得する。今回は著作権切れの書籍の公開サイトから「シャーロックホームズの冒険(The Adventures of Sherlock Holmes)」を。日本語の文章をサンプルのWordCountが正しく処理できるか不明なので、とりあえず英語版で。

$ wget http://www.gutenberg.org/ebooks/1661.txt.utf-8
$ hadoop fs -put 1661.txt.utf-8

(3)サンプルプログラムの実行
いよいよWordCountの実行。

$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount 1661.txt.utf-8 output
15/02/20 23:32:50 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/02/20 23:32:51 INFO mapreduce.JobSubmitter: Cleaning up the staging area /tmp/hadoop-yarn/staging/take/.staging/job_1424358523005_0002
15/02/20 23:32:51 WARN security.UserGroupInformation: PriviledgedActionException as:take (auth:SIMPLE) cause:org.apache.hadoop.security.AccessControlException: Permission denied: user=take, access=EXECUTE, inode="/tmp":mapred:supergroup:drwxrwx---
        at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:257)
(以降省略)

うーん、エラーになってしまった。
どうやらHDFS上の/tmpがmapredユーザーの所有権になっていてtakeユーザーでは書き込みができないことが原因の様子。

こんなことにならないようにHDFSのパーミッション設定をfalseにしておいたつもりなんだが…

とりあえず、Hadoopのユーザー管理やパーミッションについては後日調べるとして、今回は/tmp以下のパーミッションを777にして再トライ。

$ sudo -u hdfs hadoop fs -chmod -R 777 /tmp
$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount 1661.txt.utf-8 output
(省略)
15/02/20 23:42:42 INFO mapreduce.Job:  map 0% reduce 0%
15/02/20 23:42:50 INFO mapreduce.Job:  map 100% reduce 0%
15/02/20 23:42:56 INFO mapreduce.Job:  map 100% reduce 100%
15/02/20 23:42:56 INFO mapreduce.Job: Job job_1424358523005_0003 completed successfully
15/02/20 23:42:56 INFO mapreduce.Job: Counters: 49
(省略)
        File Output Format Counters
                Bytes Written=158018

今度は無事に終了。
/user/take/output/以下に結果が出ているはずなので見てみる。

$ hadoop fs -ls output
Found 2 items
-rw-r--r--   1 take supergroup          0 2015-02-20 23:42 output/_SUCCESS
-rw-r--r--   1 take supergroup     158018 2015-02-20 23:42 output/part-r-00000
$ hadoop fs -get output/part-r-00000 wordcount-result.txt
$ head wordcount-result.txt
"'A     1
"'About 1
"'Absolute      1
"'Ah!'  2
"'Ah,   2
"'Ample.'       1
"'And   10
"'Arthur!'      1
"'As    1
"'At    1

サンプルのWordCountは結構適当な作りらしく、クォートや感嘆符なども含んだままカウントしてしまっている様子。
でも、とりあえず動いたので今回はここまで。

コメント

コメントする