2013年5月27日 星期一

hadoop入門(1)

安裝jdk
 add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"
 add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"
 add-apt-repository "deb http://archive.canonical.com/ lucid partner"
 apt-get update
 apt-get install sun-java6-jdk

設定環境變數
export JAVA_HOME=
export CLASSPATH=
export PATH=

安裝ssh server
 apt-get install ssh

設定key
ssh-key-gen -t dsa -P '' -f ~/.ssh
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

下載hadoop並且解開
我用的是1.2

找到WordCount範例,網路上很多,已經是hadoop基本的hello world了
編譯方式javac WordCount.java -classpath ~/hadoop-1.2.0/hadoop-core-1.2.0.jar
打包jar -cvf wordcount.jar -C wordcount/ ./

準備input檔案
echo "hello world bye world" >file01
echo "hello hadoop bye hadoop" >file02
~/hadoop/bin/hadoop dfs -mkdir input
~/hadoop/bin/hadoop dfs -put ~/file0* input

執行
~/hadoop/binhadoop wordcount.jar WordCount input output
=============
hadoop基本有兩部分dfs以及map-reducer
因為要分散式計算以及顧及到容錯,所以採取dfs
跟著map將輸入分散,然後再由reduce整合,map分散的時候輸入一組key1,value1,map運算完畢則是輸出另一組key2,value2,reduce則是根據key 2, value 2做資料整合,接著輸出key3, value3

從word count來說,key1可能是jab id或者hadoop產生的key,value則為一串文字,跟著將字串分解成單字,寫出的(key2, value2)可能是(hello,1),接著reducer收到後會把這些數值加總起來,跟著輸出(key3, value3)可能為(hello, 2)