Amazon Elastic MapReduce : Hadoop2.4環境でワードカウントのプログラムを実行する(Ruby Client & SSH)。
前回の記事では、前々回に作成したワードカウントのサンプルをAWSマネージメントコンソールから実行した。
GUIから実行するのは簡単なのだが、回数が多くなってくると面倒くさい。なので、Elactic MapReduce Client Rubyでの実行方法と、SSHでログインして(Hadoopを生で使う)実行方法を以下にメモしておく。
Elastic MapReduce Ruby Clientで、ワードカウントを実行する。
Elastic MapReduce Ruby Clientの使い方については、
先日の記事にかいた。
- プログラム(jarファイル:hadoopsample.jar)はS3に保管。
- 入力となるテキストファイルもS3に保管。
- 出力もS3に書き出し
という、前回の記事と同じ条件で実行する。
この場合、クラスタが起動後、以下のコマンド1つでステップの追加と実行ができる。
elastic-mapreduce --jar s3n://[your bucket]/[your folder]/hadoopsample.jar --main-class com.tetsuyaodaka.WordCount --args s3n://[your bucket]/[your input folder],s3n://[your bucket]/[your input folder] --step-name WordCount --jobflow j-XXXXXXXXX
j-XXXXXXXXXは、Job Flow ID。
引数は、(ターミナルからの実行と違い)カンマ区切りとなす。
mainクラスも指定でき、(ターミナルから指定した場合と違って)実行中のGUIにMain Classが正確に表示される。
SSHでマスタノードにログインして、ワードカウントを実行する。
クラスタ起動後に、sftpでマスタノードにプログラムと入力テキストを送り、SSHでログインして実行する。
手続きとしては、
- sftpでhadoopsample.jarとinput.txt(入力テキスト)を送る(以前の記事)。
- SSHでログインする。
- HDFS上に入力用(出力用)ディレクトリを作成する。
- HDFSの入力用フォルダーにinput.txtをコピーする。
- hadoopsample.jar内のWordCountを実行する。
- 結果をHDFSからOS上に取り出す。
という流れになる。
HDFS上に入出力用のディレクトリを作成する。
sftpで、マスタノードに、プログラム(hadoopsample.jar)と入力ファイル(input.txt)を送ったら、SSHでログインする。
以下のコマンドで、HDFS上に入力用(出力用)フォルダーを作成する。hadoop fsコマンドではなくて、hdfsコマンド。
[hadoop@ip-10-91-156-75 ~]$ hdfs dfs -mkdir -p /input [hadoop@ip-10-91-156-75 ~]$ hdfs dfs -mkdir -p /output
Hadoop2.4のAMIを使った場合、Web GUIでHDFSがブラウジングできる。
HDFSの入力用フォルダーにinput.txtをコピーする。
以下のコマンドで、HDFS上の/input/に入力テキストをコピーする。
[hadoop@ip-10-91-156-75 ~]$ hdfs dfs -put input.txt /input/
以下がinputフォルダーをブラウジングしたところ。
hadoopsample.jar内のWordCountを実行する。
ここまで準備ができたら、以下のコマンドでワードカウントを実行する。
(/output/の下に2014/0610フォルダーを作って、出力を書き込む)
hadoop jar hadoopsample.jar com.tetsuyaodaka.WordCount /input /output/2014/0610
以下のログが画面に流れる(必要に応じてリダイレクトする。)。
14/06/10 05:59:17 INFO client.RMProxy: Connecting to ResourceManager at /10.91.156.75:9022 14/06/10 05:59:18 INFO client.RMProxy: Connecting to ResourceManager at /10.91.156.75:9022 14/06/10 05:59:19 WARN mapreduce.JobSubmitter: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. 14/06/10 05:59:19 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library from the embedded binaries 14/06/10 05:59:19 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev 77cfa96225d62546008ca339b7c2076a3da91578] 14/06/10 05:59:19 INFO mapred.FileInputFormat: Total input paths to process : 1 14/06/10 05:59:20 INFO mapreduce.JobSubmitter: number of splits:2 14/06/10 05:59:20 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1402369340436_0003 14/06/10 05:59:20 INFO impl.YarnClientImpl: Submitted application application_1402369340436_0003 14/06/10 05:59:20 INFO mapreduce.Job: The url to track the job: http://10.91.156.75:9046/proxy/application_1402369340436_0003/ 14/06/10 05:59:20 INFO mapreduce.Job: Running job: job_1402369340436_0003 14/06/10 05:59:34 INFO mapreduce.Job: Job job_1402369340436_0003 running in uber mode : false 14/06/10 05:59:34 INFO mapreduce.Job: map 0% reduce 0% 14/06/10 05:59:49 INFO mapreduce.Job: map 50% reduce 0% 14/06/10 06:00:00 INFO mapreduce.Job: map 100% reduce 0% 14/06/10 06:00:17 INFO mapreduce.Job: map 100% reduce 100% 14/06/10 06:00:18 INFO mapreduce.Job: Job job_1402369340436_0003 completed successfully 14/06/10 06:00:19 INFO mapreduce.Job: Counters: 49 File System Counters FILE: Number of bytes read=1459 FILE: Number of bytes written=296895 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=2142 HDFS: Number of bytes written=1329 HDFS: Number of read operations=9 HDFS: Number of large read operations=0 HDFS: Number of write operations=2 Job Counters Launched map tasks=2 Launched reduce tasks=1 Data-local map tasks=2 Total time spent by all maps in occupied slots (ms)=66351 Total time spent by all reduces in occupied slots (ms)=65636 Total time spent by all map tasks (ms)=22117 Total time spent by all reduce tasks (ms)=16409 Total vcore-seconds taken by all map tasks=22117 Total vcore-seconds taken by all reduce tasks=32818 Total megabyte-seconds taken by all map tasks=16985856 Total megabyte-seconds taken by all reduce tasks=16802816 Map-Reduce Framework Map input records=15 Map output records=214 Map output bytes=2155 Map output materialized bytes=1644 Input split bytes=184 Combine input records=214 Combine output records=165 Reduce input groups=150 Reduce shuffle bytes=1644 Reduce input records=165 Reduce output records=150 Spilled Records=330 Shuffled Maps =2 Failed Shuffles=0 Merged Map outputs=2 GC time elapsed (ms)=427 CPU time spent (ms)=3310 Physical memory (bytes) snapshot=783855616 Virtual memory (bytes) snapshot=3907485696 Total committed heap usage (bytes)=598089728 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=1958 File Output Format Counters Bytes Written=1329