自從做了小專題用virtual box架設一個小型hadoop系統之後,一直想要自己弄一個系統來測試,之後想要練習寫mapreduce程式或是pig、hive之類的也比較方便,於是趁著raspberry pi 3推出的時候一次買了五台,除了跟pi 2相比多了wifi及BT模組之外,CPU時脈也有稍微增加到了1GHz。不過記憶體還是維持1G RAM而已(沒想到之後這也會是一個問題)。趁著昨天休息一天,一口氣把整個系統架起來,當然中間也遇到了很多問題。
- 硬體架設
raspberry pi 3上面的孔是M3的,沒想到銅柱拿來之後發現居然小了一點點…原本想要硬攻牙穿過去,後來想想五片板子要攻二十次牙,誰知道會不會攻牙的時候把板子弄壞了,最後就作罷了。去電子材料行找到M2的塑膠柱,雖然耐用性應該比較差,不過暫時當作權宜之計了。將板子架起來之後,就是電源的部分了。這次是用之前為了旅行買的5 port USB充電器,最大輸出是40W,對五台來說應該夠用了。線材的部分因為之前用一般的micro USB線有遇過供電不穩的狀況,為了穩定性就換成單純充電的micro USB線。因為hadoop是需要用網路來進行傳輸的,之前偷懶想說直接用wifi分享器來架設就好,不過實測之後發現連SSH都會lag...看來根本不可行,最後還是乖乖找了一組8 port hub來使用了。原本還有計畫要加上風扇,不過因為外殼還做好,所以就先暫時用散熱片來幫助散熱而已,實測的結果是真的會有點熱,下一階段安裝風扇應該真的是必要的了。
ganglia服務有對時的需求,所以後來又另外買了RTC的時鐘,不然系統時間落差太大的話就沒辦法監控系統了。
- 安裝hadoop系統
Ubuntu也不完全相同(雖然raspberry pi用的是rasbian,跟Ubuntu同樣源自於Debian,不過有些指令還是要去查了才知道)。
- 設定locale、keyboard、timezone
- sudo raspi-config
將locale設定為TW,時區設定為TPE,鍵盤設定為US
- 設定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
- 新增hadoop的使用者
adduser hadoop
gpasswd –a hadoop sudo
groups hadoop
- 下載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
- 新增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
- 設定環境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
- 設定hadoop參數
- 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
- 格式化namenode
在master1上執行:
hdsf namenode -format
successfully formatted就成功了
- 執行測試程式
啟動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看系統狀況
參考資料:請看這
留言列表