close

P_20160304_211653[1].jpg

自從做了小專題用virtual box架設一個小型hadoop系統之後,一直想要自己弄一個系統來測試,之後想要練習寫mapreduce程式或是pig、hive之類的也比較方便,於是趁著raspberry pi 3推出的時候一次買了五台,除了跟pi 2相比多了wifi及BT模組之外,CPU時脈也有稍微增加到了1GHz。不過記憶體還是維持1G RAM而已(沒想到之後這也會是一個問題)。趁著昨天休息一天,一口氣把整個系統架起來,當然中間也遇到了很多問題。

  1. 硬體架設

raspberry pi 3上面的孔是M3的,沒想到銅柱拿來之後發現居然小了一點點…原本想要硬攻牙穿過去,後來想想五片板子要攻二十次牙,誰知道會不會攻牙的時候把板子弄壞了,最後就作罷了。去電子材料行找到M2的塑膠柱,雖然耐用性應該比較差,不過暫時當作權宜之計了。將板子架起來之後,就是電源的部分了。這次是用之前為了旅行買的5 port USB充電器,最大輸出是40W,對五台來說應該夠用了。線材的部分因為之前用一般的micro USB線有遇過供電不穩的狀況,為了穩定性就換成單純充電的micro USB線。因為hadoop是需要用網路來進行傳輸的,之前偷懶想說直接用wifi分享器來架設就好,不過實測之後發現連SSH都會lag...看來根本不可行,最後還是乖乖找了一組8 port hub來使用了。原本還有計畫要加上風扇,不過因為外殼還做好,所以就先暫時用散熱片來幫助散熱而已,實測的結果是真的會有點熱,下一階段安裝風扇應該真的是必要的了。

ganglia服務有對時的需求,所以後來又另外買了RTC的時鐘,不然系統時間落差太大的話就沒辦法監控系統了。

  1. 安裝hadoop系統

Ubuntu也不完全相同(雖然raspberry pi用的是rasbian,跟Ubuntu同樣源自於Debian,不過有些指令還是要去查了才知道)。

  1. 設定locale、keyboard、timezone
    • sudo raspi-config

將locale設定為TW,時區設定為TPE,鍵盤設定為US

  1. 設定hostname, IP, hosts
    • 設定hostname

sudo nano /etc/hostname

master1

  • 設定IP

sudo nano /etc/network/interfaces

auto eth0

iface eth0 inet static

address 192.168.1.110

netmask 255.255.255.0

gateway 192.168.1.1

  • hosts

sudo nano /etc/hosts

192.168.1.110 master1

192.168.1.111 node1

192.168.1.112 node2

192.168.1.113 node3

192.168.1.114 node4

  1. 新增hadoop的使用者

adduser hadoop

gpasswd –a hadoop sudo

groups hadoop

  1. 下載hadoop壓縮檔

wget http://apache.stu.edu.tw/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

tar -xvf hadoop-2.7.2.tar.gz -C /usr/local

mv /usr/local/hadoop-2.7.2 /usr/local/hadoop

chown -R hadoop:hadoop /usr/local/hadoop

  1. 新增SSH免密碼連線

su - hadoop

ssh-keygen -t dsa

ls –l ~/.ssh

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

copy public key to other nodes

ssh-copy-id -i ~/.ssh/id_dsa.pub hadoop@node1/2/3

ssh hadoop@master1/node1/2/3

  1. 設定環境PATH

sudo nano ~/.bashrc

加入下列內容

# Set HADOOP_HOME

export HADOOP_HOME=/usr/local/hadoop

# Set JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt

# Add Hadoop bin and sbin directory to PATH

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source ~/.bashrc

  1. 設定hadoop參數
    1. hadoop-env.sh

                      export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt

                      export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

因為總共只有1G的RAM,所以要改heapsize的設定,如果不改預設就是用1000mb了

                  export HADOOP_HEAPSIZE=700

更改預設的Java runtime,執行時才不會一直跑警告出來

export HADOOP_OPTS="$HADOOP_OPTS -XX:-PrintWarnings -Djava.library.path=/usr/local/hadoop/lib/native -Djava.net.preferIPv4Stack=true"

設定core-site.xml

                        sudo nano /usr/local/hadoop/etc/hadoop/core-site.xml

                        <property>

                        <name>hadoop.tmp.dir</name>

                        <value>/home/hadoop/tmp</value>

                        </property>

                        <property>

                        <name>fs.defaultFS</name>

                        <value>hdfs://master1:54310</value>

                        </property>

                        設定yarn-site.xml

                        sudo nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

                        <property>

                        <name>yarn.nodemanager.aux-services</name>

                        <value>mapreduce_shuffle</value>

                        </property>

                        <property>

                        <name>yarn.nodemanager.resource.memory-mb</name>

                        <value>2048</value>

                        </property>

                        <property>

                        <name>yarn.nodemanager.resource.cpu-vcoress</name>

                        <value>1</value>

                        </property>

                        <property>

                        <name>yarn.resourcemanager.hostname</name>

                        <value>master1</value>

                        </property>

                        <property>

                        <name>yarn.scheduler.minimum-allocation-mb</name>

                        <value>500</value>

                        </property>

                        設定hdfs-site.xml

                        sudo nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

                        <property>

                        <name>dfs.replication</name>

                        <value>2</value>

                        </property>

                        設定mapred-site.xml

                        因為原本沒有mapred-site.xml檔案,所以從template去複製

      cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml

  sudo nano /usr/local/hadoop/etc/hadoop/mapred-site.xml

                        <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

  </property>

  <property>

        <name>mapreduce.jobhistory.address</name>

        <value>master3.example.org:10020</value>

  </property>

  <property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>master3.example.org:19888</value>

  </property>

設定slaves

sudo nano /usr/local/hadoop/etc/hadoop/slaves

加入所有節點

node1

node2

node3

node4

設定master

sudo nano /usr/local/hadoop/etc/hadoop/masters

加入master

master1

  1. 格式化namenode

在master1上執行:

hdsf namenode -format

successfully formatted就成功了

  1. 執行測試程式

啟動hdfs 服務

start-dfs.sh

啟動yarn服務

start-yarn.sh

啟動jobhistory server服務

mr-jobhistory-daemon.sh start historyserver

執行測試程式

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 30 100

http://192.168.1.111:8088還有http://192.168.1.111:50070看系統狀況

參考資料:請看這

arrow
arrow
    文章標籤
    Hadoop RaspberryPi
    全站熱搜

    mirage 發表在 痞客邦 留言(0) 人氣()