雲端運算DIY系列【1】:單節點版 Hadoop on CentOS5

多虧internet, 開放源碼以及虛擬化技術,要玩個小規模的雲端運算,自建平台,只要花點時間研究一下英文文件就可以。等玩出興趣了,也有實際應用需求了,隨時就可上手將服務雲端化。 在台灣,除了自己玩,也可以參與CloudTW雲端運算社群。可以加入社群的討論區或Facebook粉絲專頁,跟著社群成長,參與聚會(剛好11/17有第四次的社群meetup活動)或討論增廣見聞,交流心得新知。
評論
評論

前言

有想玩自建雲端雲算平台,並開始踏出第一步嗎?多虧 internet, 開放源碼以及虛擬化技術,要玩個小規模的雲端運算,自建平台,只要花點時間研究一下英文文件就可以。等玩出興趣了,也有實際應用需求了,隨時就可上手將服務雲端化。

在台灣,除了自己玩,也可以參與

什麼是 Hadoop?

Hadoop 專案的目標是希望提供開放源碼的軟體,來建立穩定可擴充的分散式運算平台。

本文目標?

在一個 CentOS 5 的 Linux 系統上安裝 Hadoop 單節點版。初步了解相關使用。

參考資料

Hadoop Common 0.21 版 英文文件 + 安裝經驗

安裝步驟

第一步:準備 Linux 環境 + JDK

1. 安裝 CentOS5.5, 將軟體進行補丁更新。

2. 安裝 Sun JDK,在本練習中下載的是 jdk-6u22-linux-i586-rpm.bin,可上 Sun 官網找一模一樣的版本就可完整照著做。

# sh ./jdk-6u22-linux-i586-rpm.bin   //用 root

3. 確認系統用的是 SUN JDK

# java -version

CentOS 5 的預設 JAVA 套件是 Open JDK,所以執行上面這行後會出現

java version "1.6.0_17″
OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

如果系統目前預設 OpenJDK,用以下步驟換成‭ ‬SUN JDK

‭#‬‭ ‬alternatives‭ --‬install‭ /‬usr/bin/java java‭ /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/java 20000
‭# ‬alternatives‭ --‬install‭ /‬usr/bin/javaws javaws‭ /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/javaws 20000
‭# ‬alternatives‭ --‬install‭ /‬usr/bin/javac‭  ‬javac‭ /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/javac 20000
‭# ‬alternatives‭ --‬config java

有‭ ‬3‭ ‬程式提供‭ ‘‬java‭'‬。

‭  ‬選擇‭        ‬指令
-----------------------------------------------
‭ + ‬1‭           /‬usr/lib/jvm/jre-1.6.0-openjdk.x86‭_‬64‭/‬bin/java
‭   ‬2‭           /‬usr/lib/jvm/jre-1.4.2-gcj/bin/java
‭*  ‬3‭           /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/java

請輸入以保留目前的選擇‭[+]‬,或輸入選擇號碼‭:‬3

做到現在,系統預設的 JDK 就變成 Sun 的 JDK,檢查一下:

‭# ‬java‭ -‬version
java version‭ "‬1.6.0‭_‬22‭"‬
Java‭(‬TM‭) ‬SE Runtime Environment‭ (‬build 1.6.0‭_‬22-b04‭)‬
Java HotSpot(TM‭) ‬Client VM‭ (‬build 17.1-b03‭, ‬mixed mode‭, ‬sharing‭)‬
‭#‬javac‭ -‬version
javac 1.6.0‭_‬22


第二步:單機版 Hadoop 安裝

0‭.‬    建立 hadoop 這個使用者

‭# ‬useradd hadoop
‭# ‬passwd hadoop

接下來的操作都用 hadoop 個使用者來做。

‭# ‬su‭ -- ‬hadoop

1‭.‬    下載 Hadoop 0.21

‭# ‬wget‭ ‬http‭://‬ftp.tcc.edu.tw/pub/Apache‭//‬hadoop/core/hadoop-0.21.0‭/‬hadoop-0.21.0‭.‬tar.gz

2‭.‬    解開並作初步修改後安裝

‭#‬ tar xvzf‭ ‬hadoop-0.21.0‭.‬tar.gz
‭# ‬cd hadoop-0.21.0
‭# ‬vi‭ ‬conf/hadoop-env.sh

vi 打開 haddop-env.sh 後,找到底下這行,在後面添加 JAVA_HOME 的位置

‭# ‬The java implementation to use‭.  ‬Required‭.‬
‭# ‬export JAVA_HOME‭=/‬usr/lib/j2sdk1.6-sun
export JAVA_HOME‭=/‬usr/java/jdk1.6.0‭_‬22

這樣,已經完成了 Hadoop 的安裝!

3. 測試 Hadoop 安裝是否正確

# bin/hadoop
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
fs                   run a generic filesystem user client
version              print the version
jar <jar>            run a jar file
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath            prints the class path needed to get the
Hadoop jar and the required libraries
daemonlog            get/set the log level for each daemon
or
CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.

看到 hadoop 這個指令怎麼使用的英文說明如上,代表可以使用了!

4. 單機操作模式

Hadoop 預設是單機就可執行的 JAVA 應用程式。通常用來作為測試除蟲用。我們先來執行看看:

以 Hadoop 官網上的例子:我們想查看某個目錄裡面的 xml 檔案內容中,是不是有 dfz 開頭的字存在,如果有,就找出來。假如那個目錄裡面有百萬個 xml 檔案,這樣的工作用一台電腦找就會很辛苦,但是我們有 Hadoop,這件事情就可以分散到很多機器上去執行,再蒐集結果回來。

不過,這裡只是做個試驗,因此我們把 conf/這個目錄裡的 xml 檔案當做要找的問題,複製到 input/目錄中,並把結果放在 output/目錄裡。

# mkdir input

# cp  conf/*.xml input

# bin/hadoop jar hadoop-mapred-examples-0.21.0.jar  grep input output ‘dfs[a-z.]+'

執行上述行,接下來螢幕會跑出非常多的訊息,看起來電腦跑的很忙,真令人高興。執行完了看結果,果然找到一個字 -- dfsadmin,出現一次。

# cat output/*
1       dfsadmin

我們用 Linux 上的 grep 指令來驗證一下,果然在 hadoop-policy.xml 中有看到 dfsadmin 這個字。

# grep dfs input/*
input/hadoop-policy.xml:    dfsadmin and mradmin commands to refresh the security policy in-effect.

5. 單節點分散式操作

剛剛做的是用單一個 java 執行程序來跑這個問題,基本上跟 grep 做的方法差不多,是傳統的 Unix process,沒有分散運算。

這小節要用到 Hadoop 的分散特性,在單台電腦節點上做模擬分散運算的作法,讓每個 Hadoop 的守護進程 (daemon) 各自跑一個 java process 起來,各司其職。

我們先把結果照做出來,相關名詞後續文章會進行介紹解釋。

5.1 修改 Hadoop 設定檔:

# vi conf/core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

# vi conf/hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

# vi conf/mapred-site.xml

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>

5.2 設定 SSH 無密碼連接

# ssh-keygen -t dsa -P " -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

# chmod 400  ~/.ssh/authorized_keys

現在你應該可以直接連接 SSH,不需要敲密碼了,試試看。

# ssh localhost

5.3 格式化分散式檔案系統,很酷吧。

英文文件說要執行 bin/hadoop namenode -format

不過,在這一版的 hadoop 裡,如果用上述指令,你會發現下面這行訊息:

DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

照他的意思,我們就改用 hdfs 這個指令來做格式化。不過,可能是因為 script 寫的不完整,他找不到 HADOOP_HOME 這個環境變數,所以我們得依照自己安裝的環境設定一下這個環境變數。以我的環境為例,我把 HADOOP 解壓縮在/home/hadoop/hadoop-0.21.0:

# export HADOOP_HOME=/home/hadoop/hadoop-0.21.0

# bin/hdfs namenode -format

格式化完之後,系統會建立/tmp/hadoop-hadoop/dfs 的目錄。

注意,如果 hadoop 已經在執行運算了,千萬不要執行格式化的指令,免得把資料刪除了。

5.4 啟動 hadoop daemons:

官方文件上寫說執行 bin/start-all.sh,不過看起來也是要 Deprecated 了。因此執行底下的指令:

# bin/start-dfs.sh
starting namenode, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-datanode-localhost.localdomain.out
localhost: starting secondarynamenode, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-secondarynamenode-localhost.localdomain.out

# bin/start-mapred.sh
starting jobtracker, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-jobtracker-localhost.localdomain.out
localhost: starting tasktracker, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-tasktracker-localhost.localdomain.out

啟動完成了,看一下帶起來的 Hadoop daemons 吧:

先用 root 把 Firewall 關掉:

# /etc/init.d/iptables stop

若是用本機的 Xwindows 上的 Firefox 看,只需要指向 localhost:

http://localhost:50070/

看到 NameNode 的狀態

http://localhost:50030/

看到 JobTracker 的狀態

看起來真是有模有樣了~

5.5 執行先前單機版跑的搜尋 dfs 開頭關鍵字的那個問題:

# bin/hadoop fs -put conf input

# bin/hadoop jar hadoop-mapred-examples-0.21.0.jar grep input output ‘dfs[a-z.]+'

接下來,你會看到終端機上吐出一大堆的訊息。執行了很久,終於回到系統提示符號。同一時間,可用 browser 連上 NameNode 與 JobTracker 看目前執行狀態。

跑完了的話來看結果(當然還是一樣!):

# cat output/*

1       dfsadmin

你會發現,用雲端運算跑的速度簡直是比單機跑的速度要慢上一大截!這是因為我們只用了一個節點做運算,而他把問題用 Map/Reduce 的方式來執行,多出了一些功夫,整體花費時間就長了。不過,這個架構才能擴充到數十數百數千台運算節點,先從單節點練習起,多節點的時候才好上手。

5.6 本文的單節點安裝與練習到此結束,停掉 hadoop 服務:

# bin/stop-dfs.sh

# bin/stop-mapred.sh

本文小結

以上內容,應該可了解:

1. 台灣的 Cloud 社群加入方式。

2. Hadoop 的基本概念。

3. 安裝好一個單節點的 Hadoop 系統。

若有相關問題,請用留言系統回覆或溝通。謝謝。


NEC 以專業的生物辨識驗證技術,為人類生活打造更準確又安全的身份識別方式

NEC 具有多重比對臉部檢測法、攝動空間法、適應領域混合比對等先進技術,讓辨識更準確又快速,不但多次奪下美國國家標準暨技術研究院(NIST)評鑑第一名,在一對多的人臉辨識速度上也是業界之首。
評論
Photo  Credit:NEC 台灣政府公共解決方案事業群群總經理張裕昌
評論

你有沒有在機場使用過 e-Gate 快速通關系統呢?這種利用生物特徵的辨識技術既方便又安全,早在幾年前就已經是很多政府機關使用的成熟技術,讓我們跟著生物特徵辨識領導廠商 NEC 一起瞭解這種技術的原理吧。

生物辨識面面觀

身份辨識是電腦資安領域中很重要的一環,過去我們常常使用「知識辨識」方式來辨識使用者身份,但是使用輸入密碼的方式可能會被忘記,或是容易被破解的問題。至於「持有物辨識」是某種 USB 加密鑰匙,雖然可以省下記憶密碼的麻煩,但也有機率會不小心遺失。

生物辨識則是利用身體上獨一無二的特徵進行驗證,具備唯一性且不易盜用的先天優勢。其實這也不是很新的技術,早在數千年前人類就開始使用生物辨識,比如我們出門看到隔壁鄰居的臉,就能認出他是老王,這就是生物辨識的概念;但是要教會電腦辨識生物特徵,可就不是這麼簡單的事了。

生物辨識驗證領域全球領導廠商 NEC 從 1970 年代便開始研發指紋辨識、掌紋辨識和人臉辨識等技術。目前除了上述技術之外,NEC 也已開發出虹膜辨識、語音辨識,以及原創的耳道聲波辨識技術,這些獨特且高度準確的生物辨識驗證技術解決方案在全球各地都有實際應用的經驗。

NEC 將這些生物辨識驗證技術以「Bio-IDiom」品牌運用在各式應用中,並且以有效的組合運用這些技術,從而打造出「任何人都能安全無慮地使用數位內容」的世界。

NEC  在生物辨識驗證技術有 50 多年的經驗與龐大的研發團隊,並且具有多項領先技術。/Photo  Credit:NEC

領先業界的人臉辨識技術

以人臉辨識技術為例,它是透過攝影鏡頭補捉人臉的畫面,並透過電腦分析臉部各個特徵點的資訊,來判斷受檢人員是不是與登錄的資料相符。

人臉辨識技術有許多優點,由於人臉是平常人們用來判斷對方身份的方法當中最自然的一種,所以使用者的心理負擔很小,使用過程中也無需動手操作,而且一般攝影機就可辨識,讓建置更快速且低成本。此外它還具備有效防止弊端的特色,例如辨識的時候系統能夠留儲「臉部影像記錄」,讓管理者可以目視確認是否相符。

NEC 具有多重比對臉部檢測法、攝動空間法、適應領域混合比對等先進技術,讓辨識更準確又快速,也能在人臉被遮蔽或影像不清楚的情況下正確辨識,不但多次奪下美國國家標準暨技術研究院(NIST)評鑑第一名,在大規模一對多的人臉辨識準確度上也是業界之首。

生物辨識有使用方便、不易被盜用的優點,近年的應用越來越廣泛。/Photo Credit:NEC
除了人臉辨識之外,NEC 也有多種不同的生物辨識驗證技術可以交互搭配使用。/Photo  Credit:NEC

奧運史上首次使用人臉辨識入場

NEC 為 2020 東京奧運和東京帕拉林匹克運動會(Tokyo 2020)成功提供人臉辨識系統,為奧運的安全、可靠和高效舉辦做出貢獻。NEC 台灣政府公共解決方案事業群群總經理張裕昌在訪談中表示:「NEC 提供的臉部辨識系統,用於驗證運動員、工作人員、志工和其他比賽相關成員的身份,當他們進入奧運和帕運選手村、國際廣播中心(International Broadcasting Center, IBC)以及主新聞中心(Main Press Center, MPC),系統會自動進行臉部辨識。該系統為 NEC 生物辨識驗證技術『Bio-IDiom』的核心技術,採用準確度世界第一的臉部辨識技術。」

NEC 提供的臉部辨識系統,用於驗證 2020 東京奧運和東京帕拉林匹克運動會運動員、工作人員、志工和其他比賽相關成員的身份。/Photo Credit:NEC

One ID 帶來更便利的生活

機場是有高度安全考量的場所,因此無論在航空公司櫃台報到、海關查驗、登機口查驗,甚至在免稅店購物都需要旅客出示護照以確認身份,不但過程相當耗時,同時也增加了經常拿進拿出而遺失護照的風險。

以 NEC 提出的 One ID 解決方案為例,旅客只需要登錄其臉部影像,就能在機場辦理與進行各種手續,例如報到、托運行李、安檢、登機等,而不需要出示護照與登機證,不僅能加速程序的進行,還能達到全程零接觸,降低染疫風險。

全球最大航空公司聯盟星空聯盟(Star Alliance)、NEC 集團及國際航空電訊集團公司(SITA)達成一項新協議,在不久的將來,星空聯盟成員航空公司的飛行常客計劃之客戶,將能在任何參與此協議的機場與航空公司使用生物識別進行身份驗證。/Photo Credit:NEC
NEC 希望透過更多元的生物辨識技術改善人類的生活,透過只要伸出手指就能確實證明兒童身份的指紋辨識技術,就可以不受出生國家或地區左右,建立確實執行給予所有兒童合法出生證明與出生登記的環境,同時也打造兒童在成長過程中必要的、確保享有身為國民應有的公共醫療、教育機會與社會之保障。/Photo Credit:NEC

張裕昌提及,目前 NEC 的技術已經達到相當高的準確度與可靠性,未來的發展重點不再是改善辨識準確度,而是發展更多元的辨識種類,以及透過系統整合的方式,結合多種不同技術,以因應更多差異化的使用需求。

此外張裕昌總經理也特別提到,以 NEC 獨家的嬰兒指紋辨識技術為例,可以克服嬰兒指紋會隨時間變化的問題,有助於協助戶政系統不完善的國家追蹤嬰兒疫苗接種情況,發揮降低夭折比例的功效,為人類社會做出實質貢獻。