How to install Hadoop on Ubuntu (single-node cluster)

30 June 2011

這篇主要教導大家如何在ubuntu上架起single-node的hadoop。
會在其他篇教導大家如何架設multi-node。
因為架設multi-node的前提是先得架設single-node。
所以先教導大家如何架設。
至於如何執行一個MapReduce的project將在下一篇教導大家。

我的環境如下:
ubuntu版本:10.10
hadoop:0.20.2



【1】要架設hadoop起來的前提是必須安裝Sun的java-jdk
     【1.1】首先先增加Canonical Partner Repository到我們的repositories,語法如下:
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
     【1.2】更新我們的source.list,語法如下:
sudo apt-get update
     【1.3】安裝sun java sdk,語法如下:
sudo apt-get install sun-java6-jdk
     【1.4】因為linux的jdk預設為open-jdk,所以語法如下:


【2】建立一個Hadoop系統的專屬使用者
sudo addgroup hadoop
sudo adduser --ingroup hadoop hadoop


【3】設定SSH,因為hadoop利用ssh去管理node
     【3.1】首先先產生一個SSH key給hadoop user,語法如下:
su - hadoop
ssh-keygen -t rsa -P ""  
     【3.2】利用新產生的key去accees本機上的機器,語法如下:
su - hadoop
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys


【4】關閉IPv6
     【4.1】利用vim去開啟設定檔,語法如下:
vim /etc/sysctl.conf 
     【4.2】將檔案中的設定改如下:
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1



上面都是為了安裝Hadoop的先前作業
下面是正式進行下載以及安裝Hadoop


【5】下載Hadoop並且解壓縮
cd /usr/local
wget http://apache.ntu.edu.tw/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
tar zxvf hadoop-0.20.2.tar.gz
sudo mv hadoop-0.20.2 hadoop
sudo chown -R hadoop:hadoop hadoop


【6】更新$HOME/.bashrc(注意!是以hadoop身分執行語法)
     【6.1】利用vim去開啟.bashrc,語法如下:
sudo vim $HOME/.bashrc 
     【6.2】將檔案中的設定更改成如下:
# Set Hadoop-related environment variables
export HADOOP_HOME=/usr/local/hadoop

# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin


【7】Hadoop的設定
      接著是一連串的Hadoop設定檔,設定檔的位置都位於/usr/local/hadoop/conf/底下,
      都是先利用vim去開啟設定檔案做編輯,故下面就省略vim的語法
     【7.1】hadoop-env.sh,語法如下:
           把預設的JAVA_HOME位置更改掉
# The java implementation to use.  Required.
export JAVA_HOME=/usr/lib/jvm/java-6-sun 
     【7.2】core-site.xml,語法如下:
           紀錄Hadoop將資料存在哪
           先建立一個Hadoop的暫存資料夾,並設定權限及擁有人
sudo mkdir /app/hadoop/tmp
sudo chown hadoop:hadoop /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp 
           接著就是打開設定檔更改設定,注意!請填自己的ip,改成如下:

hadoop.tmp.dir
/app/hadoop/tmp
A base for other temporary directories.



fs.default.name
hdfs://140.133.xxx.xxx:54310
The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.



      【7.3】mapred-site.xml,語法如下:
          打開設定檔更改設定,注意!請填自己的ip,改成如下:

mapred.job.tracker
140.133.xxx.xxx:54311
The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.



     【7.4】hdfs-site.xml,語法如下:
           打開設定檔更改設定,此檔案紀錄著檔案被複製的數量,改成如下:

dfs.replication
1
Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.





【8】對我們的namenode格式化
/usr/local/hadoop/bin/hadoop namenode -format

出來的output應該會如下:
11/06/30 16:59:56 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = ubuntu/140.133.xxx.xxx
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
10/05/08 16:59:56 INFO namenode.FSNamesystem: fsOwner=hadoop,hadoop
10/05/08 16:59:56 INFO namenode.FSNamesystem: supergroup=supergroup
10/05/08 16:59:56 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/05/08 16:59:56 INFO common.Storage: Image file of size 96 saved in 0 seconds.
10/05/08 16:59:57 INFO common.Storage: Storage directory .../hadoop-hadoop/dfs/name has been successfully formatted.
10/05/08 16:59:57 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/140.133.xxx.xxx
************************************************************/




【9】啟動我們的single-node cluster
/usr/local/hadoop/bin/start-all.sh


這將會啟動機器上的Namenode, Datanode, Jobtracker and a Tasktracker!!
出來的output應該會如下:
starting namenode, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-namenode-ubuntu.out
localhost: starting datanode, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-datanode-ubuntu.out
localhost: starting secondarynamenode, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-secondarynamenode-ubuntu.out
starting jobtracker, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-jobtracker-ubuntu.out
localhost: starting tasktracker, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-tasktracker-ubuntu.out


如果要檢查是否有啟動成功,可以打入下列語法:
jps

正確出來的output應該會如下:
2287 TaskTracker
2149 JobTracker
1938 DataNode
2085 SecondaryNameNode
2349 Jps
1788 NameNode













read more »


Integrate CAPTCHA to your site (using plugin)-【1】

30 May 2011

CAPTCHA,相信大家不陌生,
是驗證碼的意思(如圖),











原本我是在Google App Engine中,自己畫出那些驗證碼的數字!
在local端可以繪出圖形來,但是deploy上去GAE以後,
就失敗了,原因是因為有個class並不被GAE支援。
因此無法繪圖。

我也懶得找其他的solution,第一個念頭就是找是否有相關的API。
找到了reCAPTCHA(被Google買的)。

接下來就來說明reCAPTCHA如何整合及運作。
reCAPTCHA提供了兩種方法,讓開發者將reCAPTCHA整合至自己的網站中,
1) using plugin.
2) writing code to communicate with our servers.
第一種就是Google已經以大部分的程式語言撰寫出一個套件讓開發者使用。
第二種就是寫一些簡單的code和他們的server進行溝通(驗證)
兩種其實都不難,都很簡單。

但這裡我就先教大家第一種。
1) 首先請大家先至此網站進行申請,輸入您要使用reCAPTCHA的domain。 如圖一

圖一
2) 輸入完成以後,會得到兩組key,一組是public,一組是private。

3) 申請完成以後,就選擇你要以哪種程式語言進行整合。(這裡選JAVA)

4) 來此處下載lib(recaptcha4j-0.0.7.jar),並且放進去project。

5) 接著就開始coding。

先撰寫client端要顯示CAPTCHA圖片的code

1) 首先先撰寫client端的code,先import需要的class
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %>
<%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>


2) 建立一個intance以準備create一個captcha,記得填入自己的public、private key。
第三個參數在官方文件中並沒有說明,但是去看source code,是"includeNoscript"的意思,
意思是說此instance(object)是否包含Noscript,而這邊是沒有,所以是false
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);



3) 利用剛剛object的顯示出CAPTCHA來。
第一個參數(errorMessage)是指當有錯誤時要顯示甚麼樣的訊息
第二個參數(options)是指一些要給此object的一些特別屬性(如:theme)
c.createRecaptchaHtml(null, null)




接下來就寫server端驗證的code!

String remoteAddr = request.getRemoteAddr();
ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
reCaptcha.setPrivateKey("your_private_key");

String challenge = request.getParameter("recaptcha_challenge_field"); //這個參數是要給server要求驗證的
String uresponse = request.getParameter("recaptcha_response_field"); //這個參數是使用者輸入的參數!
ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);

if (reCaptchaResponse.isValid()) {
out.print("Answer was entered correctly!");
} else {
out.print("Answer is wrong");
}




這樣就大功告成了。

read more »


a tutorial on install GAE plugin on eclipse

17 May 2011

因為學弟妹需要在GAE上使用Google Analytics,
因此打這篇安裝流程給學弟妹。


主要分成兩大步驟,
(一) 先去註冊Google App Engine
(二) 在Eclipse上安裝GAE Plugin

(一)在上課時就請大家申請好了,這邊就不多做說明。
主要講解(二) 步驟,

(二)的逐步步驟如下:

1) 先來到這個網址 http://www.eclipse.org/downloads/ ,接著下載 "Eclipse Classic 3.6.2, 171 MB"


2) 下載完成,就進行解壓縮,不需要進行安裝的動作就可以使用Eclipse 


3) 接著就打開Eclipse ,點選工具列上的Help(如圖一)
圖一


4) 並點選Install New Software,會見到以下畫面(圖二)
圖二

5) 請點選上圖(圖二)中的Add按鈕,點選以後會出現下圖(圖三)
圖三

6) 請在圖三中的兩個欄位(Name、Location)輸入這些資訊
Name:隨意取,但盡量取相關名稱
Location:告訴Eclipse你要安裝的plugin在哪個位置

7) 輸入完成後請按OK,並稍等一下,會見到下圖(圖四)
圖四
8) 出現上圖(圖四)以後,請勾選Plugin以及SDKs,勾選以後點選Next即可進行安裝。

9) 安裝完成,會發現工具列上多了四個按鈕(如圖五)
圖五
以上是安裝GAE Plugin 的步驟。


接下來說明建立一個project的步驟。

1) 點選下圖(圖六)中的藍色圈圈,並點選New Web Application Project
圖六

2) 點選以後,會見到下圖(圖七),並輸入相關資訊
Project Name:專案名稱(需英文)。EX: test
Package:  之後建立的class都會在此package名稱底下,package名稱由兩個以上的英文組成,並且英文之間須以句號(.)來進行分隔。 EX: com.ken
Location:  此project會存在哪裡,預設是存在workspace,當然也可以更改儲存路徑
Google SDKs:這邊有兩個選項(1) Use Google Web Toolkit、(2) Use Google App Engine,在這邊我們只需要勾選(2)就好,不需要勾選(1)GWT。


圖七

3) 輸入相關資訊後,按下Finish即可完成建立。

4) 接著就可以安插Google Analytics的js code。(這邊以前上JSP/Servlet過的話應該都會了,就不進行說明)這裡就是普通的JSP/Servlet,GAE較不同且較精華的是Database的部分,GAE是採用datastore(big table),它是屬於物件式資料庫,並不是傳統在學校學的關聯式資料庫。這邊學弟妹只需要上傳Google Analytics的code,因此就不深入講解datastore。

5) 安插以後,按下圖八中的飛機按鈕進行deploy的動作。

圖八
6) 按下以後會見到下圖(圖九),按下按鈕Deploy之前!!!!請先點選圖九中的App Engine project settings

圖九
7) 點選以後會見到下圖(圖十),請記得填寫自己的Application ID。填寫完成按下按鈕OK,就會回到圖九,此時再按下按鈕Deploy,就完成了







read more »