安裝必要的套件(ssh、rsync、jdk)
sudo apt-get install openssh-server rsync sun-java6-jdk
設定 SSH 可以透過公鑰認證的方式來連線
ssh-keygen -t rsa cd /home/使用者/.ssh/ cat id_rsa.pub >> authorized_keys #測試ssh(需更改 /etc/hostname /etc/hosts) ssh pc1#(hostname) cd /home/使用者/.ssh/ #將建好的key移到其他子節點(子節點主機也要做ssh-keygen -t rsa來產生.ssh資料夾) scp authorized_keys pc2:/home/使用者/.ssh/
下載Hadoop,並切換到Hadoop目錄
cd /home/使用者 wget http://apache.stu.edu.tw/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz tar -zxvf hadoop-0.20.2.tar.gz cd hadoop-0.20.2/
接下進行修改 Hadoop 的相關設定,首先修改 conf/masters(主要)
pc1
再來設定 conf/slaves(次要)
pc1 pc2
修改 conf/hadoop-env.sh 來設定 Hadoop 環境變數
export JAVA_HOME="/usr/lib/jvm/java-6-openjdk/" export HADOOP_HOME="/home/johnson4932/hadoop/" #如果要加入hbase的話需要加入相關設定 export HBASE_HOME="/home/johnson4932/hbase/" export HADOOP_CLASSPATH="$HBASE_HOME/lib/:$HBASE_HOME/hbase-0.90.6.jar:$HADOOP_HOME/lib/"
接下來修改相關參數
conf/core-site.xml:
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/johnson4932/hadoop/hadoop-${user.name}</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://pc1:9000</value> </property> </configuration>
conf/hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>1</value> <description>複本備份細數</description> </property> </configuration>
conf/mapred-site.xml:
<configuration> <property> <name>mapred.job.tracker</name> <value>pc1:9001</value> </property> <property> <name>mapred.map.tasks</name> <value>3</value> <description>定義map會把任務分派給幾個節點</description> </property> </configuration>
將Hadoop複製到其他子節點上
scp -r /home/使用者/hadoop-0.20.1 pc2:/home/使用者/
格式化一個新的分散式的檔案系統 HDFS
bin/hadoop namenode -format
啟動 Hadoop
bin/start-all.sh
接下來就打開網頁就會看到了「http://pc1:50070/」
由於 Hadoop 0.20.2 的 HDFS 檢查比較嚴謹,因此單機狀態下,會看到 http://pc1:50070 顯示Safe Mode is ON,代表 HDFS 目前是被封鎖住寫入權限,需等待至少 30 秒以後才會恢復正常。
測試:
移動到hadoop資料夾下
javac -classpath hadoop-0.20.2-core.jar -d MyJava WordCount.java #將WordCount.java編譯存到MyJava資料夾 jar -cvf wordcount.jar -C MyJava . #將MyJava包成jar,注意最後有一個 點 代表目前路徑 mkdir test_input #新建一個測資資料夾 echo "I like Cloud Course." > test_input/input1 #新增測資 bin/hadoop fs -put test_input input_hdfs #將測資丟進HDFS資料夾,input_hdfs自行命名 bin/hadoop fs -mkdir test #建立資料夾在HDFS裡 bin/hadoop fs -ls input_hdfs #確認有沒有成功放進HDFS裡 bin/hadoop jar wordcount.jar WordCount input_hdfs out/ #將jar檔裡的WordCount執行測資並把結果輸出到out資料夾裡 bin/hadoop fs -cat out/part-00000 #查看輸出,part從00000開始累加 bin/hadoop fs -rmr out (刪除out輸出資料夾)