blog.Ring.idv.tw

Articles

愜意的下午...

今天又給它睡到中午才醒來... 因為昨天給它一邊看電視一邊寫程式~ 究竟這樣的開發方式到底是怎麼達到的呢?哈哈哈~ 我來解答一下~ XDDD

解答

話說張無忌學張三豐的太極拳時~ 它的師父和他說了一句話~ 當你忘記全部的招數時~ 這時你就練就了「太.極.拳」,果然好一個「無招勝有招」的絕技~ 說到這邊~ 如果你想達到「一邊看電視一邊寫程式」同步進行的話~ OK,請記得先忘掉所謂的「Agile Software Development」、「Extreme Programming」~ 這時你就練就了這上乘武功.... XDDDD (我什麼時候會這樣亂掰呀~ 哈哈)

就這樣~ 下午就給它跑去誠品逛逛~ 因為昨天同事建泰分享給我一篇「Science 2.0: Great New Tool, or Great Risk?」~ 剛好這個月科學人雜誌就包含了這篇文章的中譯版(科學人雜誌:Science 2.0)~ 雖然我在書店內就將整篇給讀完了~ 不過我覺得這篇有提到許多重點~ 所以我就將這一期的雜誌買回家了~ 待會再寫個讀書心得來分享 ^^v

我的長皮夾剛好也破損的差不多了~ 就順便給它帶一個回家.... 就這樣渡過了今天的下午...

2008-06-21 17:33:38 | Add Comment

Fundamental of Information Retrieval & Search Engine 順利成功! ^^b

(兩張投影片所用到的全部素材~ XDDD)

今天回學校和學弟妹們分享「Fundamental of Information Retrieval」和「Fundamental of Search Engine」的相關資訊~

雖然今天講課到後來已經有點口乾舌燥~ 不過終究還是順利地帶領著大家來共襄盛舉~

尤其我會很關注學弟妹們是否能吸收我所闡述的內容~ 所以最值得開心的是幾乎大家都能將「Information」轉換成「Knowledge」嚕~ ^^b 這對我來說是最有成就感的~

而且我安排的「笑點」果然奏效~ 哈哈~ 一整個開心耶! ^^

其實昨天晚上有點失眠~ 幾乎都沒什麼睡到~ 早上肚子還不舒服~ 一整個有累到~ 在上場前我還有點擔心會不會說著說著就給它睡著了~ 呵~

然而,今天能得以順利,首先要謝謝「游耿能」老師,不僅提供Hadoop實驗用的三台機器~ 而且通常我一有任何需求~ 老師絕對沒有第二句話馬上就幫我了~

第二要謝謝學弟呈現~ 我在台中的交通、住宿都是他全包了~ 一整個很相挺!!

所以今天有來參與這二堂分享課程的學弟妹們,別忘了感謝默默付出的人!

最後~ 希望今天有來參與聆聽的學弟妹們,請給予我一些評價吧(非網拍XD)~

好的地方讓我能持續保持~ 不好的地方讓我能得以改進~ 最後謝謝大家 ^^

有機會的話下次再和你們分享嚕~ ^^

投影片下載

Fundamental of Search Engine

2008-06-17 22:14:16 | Comments (7)

Fundamental of Information Retrieval & Search Engine

下禮拜二(6/17)要回台中一趟和學弟妹們分享一些資訊檢索的相關資訊~ ^^v 想念你們!!

這次我預計要講兩個主題,分別為「Fundamental of Information Retrieval」和「Fundamental of Search Engine」~

所以從上禮拜開始一直到現在都在精心製作ppt中~ ^^

Fundamental of Information Retrieval

這部份主要會介紹IR領域所「必要」理解的二個方法、一個評估,分別為:

.Precision & Recall

.TF-IDF

.Vector Space Model

何謂「Information」?「Data」、「Information」和「Knowledge」有何不同?

該從什麼角度來切入看待三者之間的關係?「Information Retrieval」是誰提出來的?何謂向量?為何要有「Recall」評估?blah blah blah.... ^^

Fundamental of Search Engine

這部份主要會先介紹目前「Search Engine」的發展~

並介紹Google's Infrastructure然後帶進整個主題~ 預計包含的內容有:

.What's the Search Engine?

.Crawler

.Parser

.Indexer

.Google's PageRank

.Introduction to Hadoop

這個主題會說明整個「Search Engine」是怎麼設計的,然後介紹Google最重要的「PageRank」演算法~ 最後分享目前火紅到發燙的「Hadoop」~ 我的最愛 ^^v

希望屆時順利地達成我的任務~ 也希望將歡樂帶給大家~ 哈哈~ ^^v

P.S. 順便回台中剪頭髮~ XDDD

相關訊息

當天會到場的朋友、學弟妹們~ 可以先行觀看下述三篇ZDNet的相關新聞~

IBM攜手Google 聯合培養網雲運算人才 - 2007/10/09

Google、Yahoo、微軟 在台力推網雲運算 - 2008/05/07

Google看好企業走向網雲應用 - 2008/06/11

2008-06-12 23:55:47 | Comments (1)

跨瀏覽器鍵盤按鍵偵測

由於工作上的需要~ 我必須去做一個「鍵盤按鍵偵測」的事項~

所以找了一下相關資訊~ 從這篇「No window.event in firefox ?」好心人士所提供的解決方案~ 的確就簡單的達成我想要的功能~ 如下所示:

<script>
function handleKeyPress(evt)
{
	var nbr = (window.event)?event.keyCode:evt.which;
	alert(nbr);
	return true;
}
document.onkeydown= handleKeyPress
</script>

但是~ 我想要的效果是「偵測到按鍵之後去做相對應的事項~ 且剛剛所按鍵的字母不會出現在Textarea之中」~

其實解法不會太困難~ 我的解法如下:

<script>
function handleKeyPress(evt)
{
	var nbr = (window.event)?event.keyCode:evt.which;
	if(nbr == 96)
	{
		//do something....
		return false;
	}
}
</script>
<textarea id="content" rows="20" cols="65" onKeyPress="return handleKeyPress(event)">

和先前所處理的「Submit, but No Page Refresh!!」有著異曲同工之妙~ ^^

2008-06-11 01:28:19 | Add Comment

建構屬於自己的Cloud Computing - Hadoop

本文的主旨在於整個Hadoop的環境安裝教學,其它的相關資訊將會另闢說明~

筆者採用目前Hadoop-0.16.4「Stable」版本來建構~

硬體環境

我採用了三台機器來建構,並且為它們都裝上「Debian Linux 4.0r3 (amd64)」的作業系統~ 如下述所示:

主機名稱:hdp-1 IP:192.168.0.10 功能:NameNode、JobTracker、DataNode、TaskTracker

主機名稱:hdp-2 IP:192.168.0.11 功能:DataNode、TaskTracker

主機名稱:hdp-3 IP:192.168.0.12 功能:DataNode、TaskTracker

我在安裝時為這些主機都建立一個名為「hdp」的使用者帳號~

建構步驟

.下載「hadoop-0.16.4.tar.gz」並解壓縮~ 然後搬到「hdp」的家目錄

wget http://ftp.tcc.edu.tw/pub/Apache/hadoop/core/stable/hadoop-0.16.4.tar.gz
tar zxvf hadoop-0.16.4.tar.gz
mv hadoop-0.16.4 /home/hdp/

{重要}修改「三台」主機的「/etc/hosts」,讓彼此的主機名稱和IP位址都能順利地被解析

127.0.0.1       localhost       localhost
192.168.0.10    hdp-1   hdp-1
192.168.0.11    hdp-2   hdp-2
192.168.0.12    hdp-3   hdp-3

.接著安裝你的Java環境在「每台機器」上,這裡我們以「jdk1.6.0_06」為例,並將目錄搬移至「/usr/java/」底下

./jdk-6u6-linux-x64.bin
mkdir /usr/java
mv jdk1.6.0_06 /usr/java/

.「每台機器」請安裝必要的相關軟體,因為Hadoop會透過SSH來啟動和停止各節點的程式

sudo apt-get install ssh

.然後設定你的SSH可以透過公鑰認證的方式來連線,相關細節可參考「鳥哥的Linux 私房菜 - 遠端連線伺服器 Telnet/SSH/XDMCP/VNC/RSH」,筆者在這裡列出我的相關設定

ssh-keygen -t rsa
cd /home/hdp/.ssh/
cat id_rsa.pub >> authorized_keys
ssh hdp-1

現在應該就不需要密碼即可登入hdp-1本身的機器了~ 不過我們也要利用這樣的方式來登入另外兩台機器,分別為hdp-2、hdp-3,所以請一併地在這兩台機器下的「/home/hdp/」都建立一個「.ssh」的目錄夾,然後用「scp」拷貝「authorized_keys」到這些機器上即可:

sudo scp authorized_keys hdp-2:/home/hdp/.ssh/ 
sudo scp authorized_keys hdp-3:/home/hdp/.ssh/ 
ssh hdp-2
ssh hdp-3

.接著開始進行修改Hadoop的相關設定,首先先修改「conf/masters」、「conf/slaves」這兩個設定檔(修改hdp-1即可)。

Secondary NameNode設定:(<HADOOP_HOME>/conf/masters)

hdp-2

Slave設定:(<HADOOP_HOME>/conf/slaves)

hdp-1
hdp-2
hdp-3

.然後修改一下「conf/hadoop-env.sh」來設定Hadoop的環境變數

export JAVA_HOME=/usr/java/jdk1.6.0_06

.接著修改Hadoop的相關參數設定「conf/hadoop-site.xml」,範例如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
  <name>fs.default.name</name>
  <value>hdfs://hdp-1:9000/</value>
</property>
<property>
  <name>mapred.job.tracker</name>
  <value>hdp-1:9001</value>
</property>
<property>
  <name>dfs.name.dir</name>
  <value>/home/hdp/dfs/name</value>
  </property>
<property>
  <name>dfs.data.dir</name>
  <value>/home/hdp/dfs/data</value>
</property>
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>
</configuration>

.最後用「scp」將「hdp-1」的Hadoop整個環境設定及目錄結構拷貝到另外兩台機器上

scp -r /home/hdp/hadoop-0.16.4 hdp-2:/home/hdp/
scp -r /home/hdp/hadoop-0.16.4 hdp-3:/home/hdp/

到這邊大致上就完成屬於你自己的Cloud Computing環境建構了~ 接下來就是啟動Hadoop,並用個小範例來玩玩嚕~

啟動Hadoop

.先格式化一個新的分散式的檔案系統HDFS

<HADOOP_HOME>/bin/hadoop namenode -format

會出現如下所示的相關訊息:

08/06/09 23:45:54 INFO dfs.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = hdp-1/192.168.0.10
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.16.4
STARTUP_MSG:   build = http://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.16 -r 652614; compiled by 'hadoopqa' on Fri May  2 00:18:12 UTC 2008
************************************************************/
08/06/09 23:45:55 INFO fs.FSNamesystem: fsOwner=hadoop,hadoop,dialout,cdrom,floppy,audio,video,plugdev,netdev,powerdev
08/06/09 23:45:55 INFO fs.FSNamesystem: supergroup=supergroup
08/06/09 23:45:55 INFO fs.FSNamesystem: isPermissionEnabled=true
08/06/09 23:45:55 INFO dfs.Storage: Storage directory /home/hadoop/dfs/name has been successfully formatted.
08/06/09 23:45:55 INFO dfs.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hdp-1/192.168.0.10
************************************************************/

.接著就給它啟動「Hadoop」嚕~

<HADOOP_HOME>/bin/start-all.sh

要驗證所有過程是否無誤~ 可以參閱「<HADOOP_HOME>/logs/」相關的紀錄檔~

或是開啟NameNode的網頁介面來觀察,若依筆者的設定則需開啟「http://hdp-1:50070/」來觀察,配置正確的話應該有三台DataNode是活著的 ^^v

跑Hadoop範例

這裡我們用官方的一個「WordCount」範例來介紹~

主要建立兩個文字檔,裡頭的單字都用空格來區隔~ 以方便範例程式來運作~

比較重要的是「<HADOOP_HOME>/bin/hadoop dfs -put ./testdata input」,這一行就是用來將「testdata」目錄夾寫入到「HDFS」裡~

mkdir testdata
cd testdata
echo "hello world bye hello" > file1.txt
echo "hadoop hello goodbye hadoop" > file2.txt
cd ..
<HADOOP_HOME>/bin/hadoop dfs -put ./testdata input

最後就跑給它看嚕~ 看看小飛象能飛得多快~ 哈哈~ ^^b

<HADOOP_HOME>/bin/hadoop jar hadoop-0.16.4-examples.jar wordcount input output

執行結果:

08/06/10 00:03:24 INFO mapred.FileInputFormat: Total input paths to process : 2
08/06/10 00:03:25 INFO mapred.JobClient: Running job: job_200806092347_0001
08/06/10 00:03:26 INFO mapred.JobClient:  map 0% reduce 0%
08/06/10 00:03:28 INFO mapred.JobClient:  map 33% reduce 0%
08/06/10 00:03:29 INFO mapred.JobClient:  map 100% reduce 0%
08/06/10 00:03:35 INFO mapred.JobClient:  map 100% reduce 100%
08/06/10 00:03:36 INFO mapred.JobClient: Job complete: job_200806092347_0001
08/06/10 00:03:36 INFO mapred.JobClient: Counters: 12
08/06/10 00:03:36 INFO mapred.JobClient:   Job Counters
08/06/10 00:03:36 INFO mapred.JobClient:     Launched map tasks=3
08/06/10 00:03:36 INFO mapred.JobClient:     Launched reduce tasks=1
08/06/10 00:03:36 INFO mapred.JobClient:     Data-local map tasks=1
08/06/10 00:03:36 INFO mapred.JobClient:   Map-Reduce Framework
08/06/10 00:03:36 INFO mapred.JobClient:     Map input records=2
08/06/10 00:03:36 INFO mapred.JobClient:     Map output records=8
08/06/10 00:03:36 INFO mapred.JobClient:     Map input bytes=50
08/06/10 00:03:36 INFO mapred.JobClient:     Map output bytes=82
08/06/10 00:03:36 INFO mapred.JobClient:     Combine input records=8
08/06/10 00:03:36 INFO mapred.JobClient:     Combine output records=6
08/06/10 00:03:36 INFO mapred.JobClient:     Reduce input groups=5
08/06/10 00:03:36 INFO mapred.JobClient:     Reduce input records=6
08/06/10 00:03:36 INFO mapred.JobClient:     Reduce output records=5

執行完成之後,我們再將HDFS下的output資料夾抓出來看~

<HADOOP_HOME>/bin/hadoop dfs -get output output
cat output/*

輸出的結果就是:

bye     1
goodbye 1
hadoop  2
hello   3
world   1

成功啦~ 恭禧你!! ^^v

要停止Hadoop的運作只要下「bin/stop-all.sh」指令即可~

結論

本文一整個打了很多字~ 如果有介紹未盡詳細的地方,請參閱相關資源~

或是連結到本站的另一篇「一個值得研究的領域 - Hadoop」~

如果在安裝過程之中有任何問題~ 非常歡迎留言討論~ 如果本文有任何謬誤的地方,也請不吝地給予指正,必當感激!!

2008-06-10 00:13:02 | Comments (67)

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment