#author("2018-05-10T16:07:58+09:00","","") #author("2018-05-21T14:50:44+09:00","","") [[山本]] #contents ** ラズパイクラスタを用いて円周率を並列計算 [#n3c22544] -必要な物~ raspberrypi 3.0×8~ sdカード16G以上×8~ 8ポート以上のハブ~ -※以下のものがあれば便利~ USB接続できるキーボート~ USB接続できるマウス~ HDMI接続できるモニタ~ ~ ~ +実験環境構築~ ラズパイクラスタの作成方法はraspberrypiクラスタの構築キットみたいなものがあるのでそちらを参考に組み立てる.~ #ref(ラズパイ全体.jpeg,,50%) +raspberrypiのインストール・設定~ ラズベリーパイのOSインストールや初期設定・SSH接続の方法などは -[[横井専門ゼミ>横井さんのロビー/専門ゼミ]]~ を参考に行う~ ** ネットワーク設定 [#b54b746c] raspberrypiをwifiでインターネットに接続する場合研究室内のwifi(AirMacpro)に接続,パスワードはbasestation~ なお, ホスト名とIPアドレスは, master, 192.168.0.60 slave1, 192.168.0.61 ... slave7, 192.168.0.67 のように設定するものとして説明する. 1. 基本設定 パスワードの変更 $ passwd (必須ではないが, 警告がでないようにする. ) 2. パッケージリストを更新する. $ sudo apt-get update 3. 設定ファイルを編集していくので, 必要であればテキストエディタをインストールする. $ sudo apt-get install emacs 4. /etc/hostnameの内容(ホスト名)を $ sudo emacs /etc/hostname により編集する(1行にホスト名を記述する). 5. 固定IPの設定のために /etc/dhcpcd.confを編集する. ファイル内の下部に#It is possible to fall.....と記述されているところがあるので,そこの3行下に #static ip_address=初期設定のIPアドレス~ と記述されているので初期設定のIPアドレスをそれぞれのラズパイのIPに書き換える.その後左の#を消去. 6. 名前解決のために/etc/hostsを編集する. 192.168.0.60 master 192.168.0.61 slave1 ... 192.168.0.67 slave7 を追記する. 7. ネットワークを再起動する(RasPi自体を再起動してもよい). 8. ping ホスト名, ping IPアドレスがそれぞれのノードに正常に通るか確認する. 9. 各RasPiでsshを有効にするための設定を行う. $ sudo raspi-config を押して, sshをenableに設定する. 10. ssh-keygen -t rsaを実行する. いくつか聞かれるが, 全てEnterで処理してよい. 11. 公開鍵を全てのマシンに送信する. $ ssh-copy-id master $ ssh-copy-id slave1 ... $ ssh-copy-id slave7 上記をすべてのラズパイで行う. ※同じラズパイで重複して行うと暗号化キーが複数できてめんどくさいことになるので注意! 以降では, リモートで各マシンにssh接続して設定を行う. ** hadoopの設定 [#xd5ec148] 11. Hadoopを実行するために必要となるjavaをインストールする. $ sudo apt-get install oracle-java8-jdk ※用いてるラズパイによってはすでにインストールされている場合がある 12. Hadoopをダウンロードし解凍する. $ cd ~pi/ $ wget http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-3.0.2/hadoop-3.0.2.tar.gz ※hadoopのバージョンはその都度インストールできバージョンを確認する $ tar zxvf hadoop-3.0.2.tar.gz 13. Hadoopの環境変数 + 設定ファイルを修正する. 本ページ下部にあるzipファイルを以下の配置に置く bashrcというファイルは配置した後に隠しファイルとするためファイル名の先頭に.をつけて.bashrcとする ~pi/.bashrc ~pi/hadoop-3.0.2/etc/hadoop/hadoop-env.sh ~pi/hadoop-3.0.2/etc/hadoop/core-site.xml ~pi/hadoop-3.0.2/etc/hadoop/hdfs-site.xml ~pi/hadoop-3.0.2/etc/hadoop/mapred-site.xml ~pi/hadoop-3.0.2/etc/hadoop/yarn-site.xml 設定ファイル修正に用いた参考URL~ https://stackoverflow.com/questions/30921838/auxservicemapreduce-shuffle-does-not-exist-on-hive-1-2-0~ https://stackoverflow.com/questions/30533501/hadoop-mapper-is-failing-because-of-container-killed-by-the-applicationmaster?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa~ https://tekmarathon.com/2017/02/15/hadoop-and-spark-installation-on-raspberry-pi-3-cluster-part-2/~ 14. Hadoopネームノードの初期設定 $hdfs namenode -format ※masterのみで実行 ※masterのみで実行~ ※再起動時にnamenodeがすぐに落ちてしまうときはこのコマンドを実行すると解消される場合がある. 15. masterのサービスの起動 $hdfs --daemon start namenode ブラウザで, master:9870,にアクセスできるか確認 $yarn --daemon start resourcemanager ブラウザで, master:8088,にアクセスできるか確認しておく. masterで $jps により現在動いているサービスが確認できる ※jpsの画像 16. slave1~7のサービスの起動 slave1~7で以下のコマンドを実行 $hdfs --daemon start datanode $yarn --daemon start nodemanager $jps により動いているサービスの確認をmasterと同様に行う 全てのslaveでdatanodeとnodemanagerを立ち上げるたらmaster:9870のLive Nodesが7になっていることと,master:8088のActive Nodesの数が7になっていることを確認する. **Hadoopのサンプルプログラムの実行 [#u04ba2ca] 17. Hadoopのサンプルプログラムの実行(masterで作業). %%円周率のサンプルプログラム%% $hadoop jar /home/pi/hadoop-3.0.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.2.jar pi 10 10000 を実行,%%以下実行結果%% 円周率のサンプルプログラムではラズパイの台数を変えても差が出ないことが分かった。 なのでwordcountというファイル内の文字数を数えるプログラムを実行する. wordcountの実行手順 wordcountの実行手順~ 参考URL https://qiita.com/Esfahan/items/bdd254dccf29da22cc7c 1.テキストファイルの用意~ http://www.textfiles.com/etext/AUTHORS/ARISTOTLE/ 上記のサイトから適当なものをダウンロードしてmasterの/home/piにいれておく. ファイルの名前はword.txtに変更しておく. ※word.txtはそのままでは容量が小さいので以下の手順を行う $cat word.txt word.txt word.txt > word1.txt $cat word1.txt word1.txt word1.txt > word2.txt $cat word2.txt word2.txt word2.txt > word3.txt $cat word3.txt word3.txt word3.txt > word4.txt . . . というように繰り返しファイルのサイズを大きくする(目安としては500MBくらいまでファイルを大きくする) というように繰り返しファイルのサイズを大きくする(目安としては500MBくらいまでファイルを大きくする)(ラズパイ1台や2台で試す場合は時間がかかってしまうので200MB程度を推奨) この作業を終えたら改めてファイル名をword.txtに変えておく. 2.ファイルの保存先(HDFS)となるディレクトリを作成~ $ hadoop fs -mkdir /input 3.テキストファイルを、/inputの下にコピー $ hadoop fs -put word.txt /input 4.コピーされたことを確認 $ hadoop fs -ls /input 5.実行 $ hadoop jar /home/pi/hadoop-3.0.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.2.jar wordcount /input /output07