Amazon Elastic MapReduceを使う:SSHでマスタノードにログインする。sftpでファイルを転送する。
Amazon Elastic MapReduceはEC2インスタンスで構成されている。ということは、SSHなどでログインが可能だし、クライアントから直接データやプログラムが配備できる。
AWSのサイトにも書いてあるし、(日付が古いが)「Amazon Elastic MapReduce ドキュメント」にも書いてある。
1年前の記事を参考に、現在の環境でテストしてみる。
マネージメント・コンソールでEC2を選択して、Instancesをみる。以下が、Runningしているインスタンスだけ表示した画面。
この中にマスタノードがいるわけだが、(1年前と比べて)見つけるのが簡単になっている。
以下は、Elastic MapReduceのコンソール画面だが、画面上にMaster Public DNS(Name)が表示されていて、これがマスタノードのPublic Nameとなっている。
接続する先はこのインスタンスなので、先の3つのEC2インスタンスから選択して、どんなポートが開いているか、Security Groupを調べる。
Security Groupを調べるには、上の画面の右下にある「Security Group」の「view rules」をクリックする。
(不用心な話だが)22番と80番が開いていることが分かる。9100はJobTracker、9101はHDFSの管理画面のため。
試しに、
https://[your public DNS of Master Node]:9100
としてみると、以下のようにJobTrackerが表示される。
次に、
https://[your public DNS of Master Node]:9101
とすると、HDFSの操作画面が表示される。
ただし、「Browse the filesystem」は、リンクの差し先がInternal IPを指していて、ブラウザーで表示できない。普通は、この画面からHDFS上のファイルの操作ができるが、HDFSを操作するには、SSHでログイン後行うことになる(1年前も同じだったように記憶している)。
さて、SSHでマスタノードにログインしてみる。
クライアント・マシンは、Mac Book Pro(OS X 10.9.3)を用いた。
ターミナルを開き、キーペアを指定して、以下のようにマスタノードに接続する。見ての通り、ログインにはhadoopユーザーを使用する。
ssh -i ~/.ssh/[your key-pair name] hadoop@[your public DNS of Master Node]
以下が、ログイン直後の画面。
ログインできたら、環境を軽く見ておく。
Javaは、1.7.0.40。
hadoop@ip-XX-XX-XX-XX:~$ java -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
Hadoop関連のバージョンは起動時に指定するが、hadoopのホームディレクトリ/.versionsで調べることができる。
hadoop | 1.0.3 |
hbase | 0.92 |
hive | 0.11.0 |
pig | 0.11.1.1 |
である。
ちなみに、rubyは1.8.7がインストされている。
hadoop@ip-XX-XX-XX-XX:~$ ruby -version ruby 1.8.7 (2010-08-16 patchlevel 302)
hadoopのホームディレクトリには、hadoopの本体が入っているので、モンテカルロ法による円周率の近似計算を行ってみる。
hadoop@ip-XX-XX-XX-XX:~$ hadoop jar hadoop-examples-1.0.3.jar pi 10 10000 Number of Maps = 10 Samples per Map = 10000 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 Wrote input for Map #3 Wrote input for Map #4 Wrote input for Map #5 Wrote input for Map #6 Wrote input for Map #7 Wrote input for Map #8 Wrote input for Map #9 Starting Job 14/06/03 01:55:51 INFO mapred.JobClient: Default number of map tasks: 10 14/06/03 01:55:51 INFO mapred.JobClient: Default number of reduce tasks: 1 14/06/03 01:55:52 INFO security.ShellBasedUnixGroupsMapping: add hadoop to shell userGroupsCache 14/06/03 01:55:52 INFO mapred.JobClient: Setting group to hadoop 14/06/03 01:55:52 INFO mapred.FileInputFormat: Total input paths to process : 10 14/06/03 01:55:53 INFO mapred.JobClient: Running job: job_201406030041_0002 14/06/03 01:55:54 INFO mapred.JobClient: map 0% reduce 0% 14/06/03 01:56:18 INFO mapred.JobClient: map 10% reduce 0% 14/06/03 01:56:24 INFO mapred.JobClient: map 20% reduce 0% 14/06/03 01:56:30 INFO mapred.JobClient: map 30% reduce 0% 14/06/03 01:56:36 INFO mapred.JobClient: map 50% reduce 0% 14/06/03 01:56:39 INFO mapred.JobClient: map 70% reduce 0% 14/06/03 01:56:42 INFO mapred.JobClient: map 90% reduce 0% 14/06/03 01:56:45 INFO mapred.JobClient: map 100% reduce 0% 14/06/03 01:56:51 INFO mapred.JobClient: map 100% reduce 30% 14/06/03 01:56:57 INFO mapred.JobClient: map 100% reduce 100% 14/06/03 01:57:02 INFO mapred.JobClient: Job complete: job_201406030041_0002 14/06/03 01:57:02 INFO mapred.JobClient: Counters: 31 14/06/03 01:57:02 INFO mapred.JobClient: Job Counters 14/06/03 01:57:02 INFO mapred.JobClient: Launched reduce tasks=1 14/06/03 01:57:02 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=115362 14/06/03 01:57:02 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 14/06/03 01:57:02 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 14/06/03 01:57:02 INFO mapred.JobClient: Rack-local map tasks=2 14/06/03 01:57:02 INFO mapred.JobClient: Launched map tasks=10 14/06/03 01:57:02 INFO mapred.JobClient: Data-local map tasks=8 14/06/03 01:57:02 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=37673 14/06/03 01:57:02 INFO mapred.JobClient: File Input Format Counters 14/06/03 01:57:02 INFO mapred.JobClient: Bytes Read=1180 14/06/03 01:57:02 INFO mapred.JobClient: File Output Format Counters 14/06/03 01:57:02 INFO mapred.JobClient: Bytes Written=97 14/06/03 01:57:02 INFO mapred.JobClient: FileSystemCounters 14/06/03 01:57:02 INFO mapred.JobClient: FILE_BYTES_READ=113 14/06/03 01:57:02 INFO mapred.JobClient: HDFS_BYTES_READ=2450 14/06/03 01:57:02 INFO mapred.JobClient: FILE_BYTES_WRITTEN=275211 14/06/03 01:57:02 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=215 14/06/03 01:57:02 INFO mapred.JobClient: Map-Reduce Framework 14/06/03 01:57:02 INFO mapred.JobClient: Map output materialized bytes=360 14/06/03 01:57:02 INFO mapred.JobClient: Map input records=10 14/06/03 01:57:02 INFO mapred.JobClient: Reduce shuffle bytes=360 14/06/03 01:57:02 INFO mapred.JobClient: Spilled Records=40 14/06/03 01:57:02 INFO mapred.JobClient: Map output bytes=180 14/06/03 01:57:02 INFO mapred.JobClient: Total committed heap usage (bytes)=1529450496 14/06/03 01:57:02 INFO mapred.JobClient: CPU time spent (ms)=10500 14/06/03 01:57:02 INFO mapred.JobClient: Map input bytes=240 14/06/03 01:57:02 INFO mapred.JobClient: SPLIT_RAW_BYTES=1270 14/06/03 01:57:02 INFO mapred.JobClient: Combine input records=0 14/06/03 01:57:02 INFO mapred.JobClient: Reduce input records=20 14/06/03 01:57:02 INFO mapred.JobClient: Reduce input groups=20 14/06/03 01:57:02 INFO mapred.JobClient: Combine output records=0 14/06/03 01:57:02 INFO mapred.JobClient: Physical memory (bytes) snapshot=1891930112 14/06/03 01:57:02 INFO mapred.JobClient: Reduce output records=0 14/06/03 01:57:02 INFO mapred.JobClient: Virtual memory (bytes) snapshot=6932238336 14/06/03 01:57:02 INFO mapred.JobClient: Map output records=20 Job Finished in 71.073 seconds Estimated value of Pi is 3.14120000000000000000
このとき、ブラウザーからJob Trackerを見たものが以下。PiEstimaterが実行されていることが確認できる。
ジョブを監視するときは、このWeb画面が便利である。上の画面でジョブの内容をみると、以下のように実行中のMapプロセス、Reduceプロセスなどを調べることができる。
最後に、マスタノードにsftpでデータを送ってみる。
ローカルにtext.txt(空ファイル)を作成し、以下のようにログイン後に転送する。
MacBook-Pro:~ tetsuya$ sftp -i ~/.ssh/[your key-pair name] hadoop@[public DNS Name of Master Node] sftp> put test.txt test.txt Uploading test.txt to /home/hadoop/test.txt test.txt 100% 0 0.0KB/s 00:00
マスタノード側で確認すると、以下のように転送されていることが確認できる。
hadoop@ip-XX-XX-XX-XX:~$ ls -al total 100 drwxr-xr-x 15 hadoop hadoop 4096 Jun 3 01:59 . drwxr-xr-x 3 root root 4096 Oct 3 2013 .. -rwxrwxr-- 1 hadoop hadoop 57 Oct 3 2013 .bash_profile -rwxrwxr-- 1 hadoop hadoop 321 Oct 3 2013 .bashrc drwx------ 2 hadoop hadoop 4096 Jun 3 00:34 .ssh drwxr-xr-x 6 hadoop hadoop 4096 Jun 3 00:59 .versions drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 01:01 bin drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 conf drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 contrib drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 etc lrwxrwxrwx 1 hadoop hadoop 62 Jun 3 00:41 hadoop-ant-1.0.3.jar -> /home/hadoop/.versions/1.0.3/share/hadoop/hadoop-ant-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 33 Jun 3 00:41 hadoop-ant.jar -> /home/hadoop/hadoop-ant-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 65 Jun 3 00:41 hadoop-client-1.0.3.jar -> /home/hadoop/.versions/1.0.3/share/hadoop/hadoop-client-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 63 Jun 3 00:41 hadoop-core-1.0.3.jar -> /home/hadoop/.versions/1.0.3/share/hadoop/hadoop-core-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 34 Jun 3 00:41 hadoop-core.jar -> /home/hadoop/hadoop-core-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 67 Jun 3 00:41 hadoop-examples-1.0.3.jar -> /home/hadoop/.versions/1.0.3/share/hadoop/hadoop-examples-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 38 Jun 3 00:41 hadoop-examples.jar -> /home/hadoop/hadoop-examples-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 70 Jun 3 00:41 hadoop-minicluster-1.0.3.jar -> /home/hadoop/.versions/1.0.3/share/hadoop/hadoop-minicluster-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 64 Jun 3 00:41 hadoop-tools-1.0.3.jar -> /home/hadoop/.versions/1.0.3/share/hadoop/hadoop-tools-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 35 Jun 3 00:41 hadoop-tools.jar -> /home/hadoop/hadoop-tools-1.0.3.jar lrwxrwxrwx 1 hadoop hadoop 34 Jun 3 00:59 hive -> /home/hadoop/.versions/hive-0.11.0 drwxr-xr-x 3 hadoop hadoop 12288 Jun 3 01:01 lib drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 lib64 drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 libexec drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 native drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 sbin drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 templates -rw-r--r-- 1 hadoop hadoop 0 Jun 3 01:59 test.txt drwxr-xr-x 2 hadoop hadoop 4096 Jun 3 00:41 webapps
これをHDFS上にコピーし、HDFSのlsコマンドを使ってみる。
hadoop@ip-XX-XX-XX-XX:~$ hadoop fs -copyFromLocal test.txt . hadoop@ip-XX-XX-XX-XX:~$ hadoop fs -ls . Found 1 items -rw-r--r-- 1 hadoop supergroup 0 2014-06-03 02:01 /user/hadoop/test.txt
まとめると、
となっている。