September 2012 Archives

Hadoop 叢集佈建初探 - hiCloud 為例

國家高速網路與計算中心 王耀聰 副研究員


本文首次發表於 2012年07月06日出版之 iTcloud專刊no.2 (NO.44)
原稿與圖檔 PDF 版本,請至此網址下載。


(續上篇)

Hadoop叢集版初探 -hiCloud Ubuntu Linux

上個小節我們介紹了如何在Windows上建立一個Hadoop的實驗環境,然而Windows版本存在著許多小問題,像是Cygwin的路徑與Java Runtime認知的Windows路徑不同,因此許多時候,您在下指令的時候,還必須要透過cygpath指令將Cygwin路徑轉換成Windows路徑,相當不便。其次,假設您想要把多台hadoop4win串起來,有許多先決條件,像是必須要有不同的電腦名稱、要有相同的使用者名稱跟檔案存取權限。因此,一般我們在提供商業運轉的Hadoop環境時,仍舊會採用Linux版本。


  雲端運算的五大基礎特徵中,第一點是「隨需自助服務」,其背後隱藏著「標準化」與「自動化」的精神。本文為了讓每位讀者能有標準化的實作環境,免除不同Linux版本造成的操作問題,此次採用的是中華電信hiCloudUbuntu 10.04虛擬機器當作示範架設Hadoop叢集版的環境。底下將示範如何在十台Ubuntu 10.04的虛擬機器上,建置一個Hadoop叢集。由於Hadoop安裝的指令繁瑣,筆者這裡提供一個自動化的安裝腳本程式,各位可至http://github.com/jazzwang/hicloud-hadoophttp://hidoop.sf.net下載原始碼。以下我們用圖解的方式,說明如何使用hicloud開啟十台虛擬機器,並設定成Hadoop叢集




STEP 1:請連線至hicloud.hinet.net

並點選右上角「客戶登入」



STEP 2:若您不是中華電信用戶,

請先加入會員,然後用取得帳號登入


STEP 3:點選上方「雲運算」

STEP 4:點選左方「虛擬主機」

STEP 5:點選左上角「申請」

STEP 6:確認同意中華電信hicloud租約

選擇「Linux微運算型XS」,按「下一步」


STEP 7:選擇「Ubuntu 10.0,32bit

STEP 8:用hdp命名,產生10台虛擬機器

STEP 9:等待申裝狀態變為「已申裝」

STEP 10:請確認供裝狀態變為「已申裝」

點左上角「全選」,並選「開機」

STEP 11:點選右上角「預設密碼」,將password.zip儲存到桌面

STEP 12:用預設密碼解壓縮password.zip並匯入CSV格式的密碼檔案

STEP 13:我們從密碼表中挑選第一台

PieTTY連線到該台虛擬機器


STEP 14:預設請使用root帳號登入,

密碼請根據您的密碼表輸入六碼預設密碼


  做到這邊,我們已經把十台虛擬機器開機。請從hiCloud介面上確認每一台虛擬機器都已經進入「已開機」的狀態,接著使用您慣用的SSH連線軟體,這裡我們使用的是PieTTY,可以自http://ntu.csie.org/~piaip/pietty/ 下載。由於hicloud-hadoop自動安裝腳本是針對Linux環境撰寫的,因此我們直接挑選其中一台來進行安裝。您也可以在自己的Linux環境上執行以下的步驟。在執行hicloud-hadoop自動安裝腳本前,有一些前置作業:(1)產生SSH連線用的金鑰;(2)安裝PerlExpect.pm函式庫,因為我們會使用Expect來幫忙您自動填入預設密碼,登入另外九台虛擬機器,並進行Hadoop安裝作業。現在請您在登入第一台虛擬機器的PieTTY視窗內中輸入以下兩個指令:


~# ssh-keygen -t rsa -P ""

~# apt-get install libexpect-perl


  接下來,讓我們下載hicloud-hadoop自動安裝腳本,並且解壓縮安裝檔。然後在hicloud-hadoop目錄底下建一個conf子目錄。


~# wget http://nchc.dl.sourceforge.net/project/hidoop/0.0.1/hicloud-hadoop-0.0.1.tar.gz

~# tar zxvf hicloud-hadoop-0.0.1.tar.gz

~# mkdir -p hicloud-hadoop/conf


  接著,使用記事本先編輯兩個檔案,一個叫master,一個叫slave。可用PieTTYWinSCP上傳這兩個檔案到hicloud-hadoop/conf 底下,或參考底下的作法在conf底下建立兩個設定檔。


~# cat > hicloud-hadoop/conf/master << EOF

203.66.14.171 root 800773

EOF

~# cat > hicloud-hadoop/conf/slave << EOF

203.66.14.40 root 154737

.................

210.65.10.139 root 367578

EOF


  以上的IP、帳號、密碼三個欄位,您可以直接從CSV貼到記事本,加入中間的空白,在貼到命令列。最後切換到hicloud-hadoop目錄,然後執行 install-ubuntu 自動安裝腳本。


~# cd hicloud-hadoop

hicloud-hadoop# ./install-ubuntu


從密碼表中挑選第一台的IP、帳號、密碼

貼到記事本,補上空格,然後轉貼到master

從密碼表中挑選剩下的IP、帳號、密碼

貼到記事本,補上空格,然後轉貼到slave


  等自動安裝腳本執行完畢後,您會看到類似底下的訊息。此時,點選兩個網址,就會看到HadoopHDFS NameNodeMapReduce JobTracker網頁。



安裝完畢的最後一行會顯示5007050030的兩個網址


50070HDFS頁面


50030MapReduce頁面


雲端精算師:好的設計可以省下更多錢

  做到這邊,各位讀者應該可以繼續在hiCloud的十台虛擬機器上練習在Hadoop4Win的指令。不過這裡要提醒的一件很重要的事情:「不同於Amazon EC2有開機才計價,hiCloud是從申裝開始計費,退租才停止計費,就像您租用手機門號一樣,不管有沒有開機都會計費」。因此建議您如果口袋不夠深的話,練習完麻煩一台一台把虛擬機器退租吧!一節課程大約花個兩三個小時,14塊台幣/小時,跟買杯超商咖啡差不多,這就是雲端帶給各位的新學習環境。


  


練習完畢後,請務必退租,

免得收到帳單會很痛!


花了28塊(10*2小時*1.4元)

Hadoop叢集佈署



  倘若您手邊有兩台以上的實體機器,或者多核心效能強大的伺服器,不妨安裝VirtualBox虛擬化軟體,在一台電腦上建立兩至三台Ubuntu 10.04Linux環境,各位聰明的讀者可以透過上述的步驟來安裝您專屬的Hadoop叢集,就算是一個小型的私有雲了。


  在本文最後,筆者想提出幾個關於「雲端精算師」的軟體設計精神,與各位讀者分享。目前hicloud-hadoop 0.0.1版本是循序安裝,因此機器愈多,安裝時間愈長。未來將加入多執行緒的程式碼,讓安裝流程能同時進行。對hiCloud這種按時計費的公有雲而言,如何節省安裝時間變得很重要。未來hiCloud若能讓使用者建立自己專屬的虛擬機器範本,相信能有效降低各位讀者荷包的負擔。


  其次,中華電信的計價模式還包含網路流量,因此如何減少網路傳輸也是採用公有雲服務應該要思考的第二個重點。目前的腳本每一台虛擬機器都會重複下載JavaHadoop安裝檔。若能把Hadoop安裝檔先存在同一個公有雲提供的「儲存服務」,讓資料來自於「內部網路」而非「網際網路」,不納入流量計費,那也是對用戶有利的計價模式。


  最後,若能夠把要處理的事情變成自動化,計算完就關閉虛擬機器,以上這些考量就是在雲端時代程式設計師應該具備的「雲端精算師」精神,擁有節省成本的思考模式將是您未來在職場上的新競爭力!


Hadoop 叢集佈建初探 - hiCloud 為例

國家高速網路與計算中心 王耀聰 副研究員


(乘上篇)

Hadoop單機版初探 - Windows

  根據hadoop官方文件的建議,Hadoop最佳營運案例主要是在Linux作業系統底下運行。但在台灣,多數資訊從業人員仍以Windows為主要的作業系統。筆者為了降低各位學習Hadoop的門檻,撰寫了一套名為Hadoop4Win的懶人包安裝程式。目前在Windows XPWindows 2000環境下測試正常,至於Windows 7環境下目前因為安全性權限較嚴格,需關閉UAC,常不易安裝成功,因此這次我們以Windows XP環境來做示範。

  首先,請到http://hadoop4win.nchc.org.twhttp://hadoop4win.org下載0.1.5版本的hadoop4win完整安裝檔。Hadoop4win 0.1.5目前包含五大軟體組成:(1) Cygwin(2) JDK 1.6.0 update 18(3) Hadoop 0.20.2(4) HBase 0.20.6(5) Ant 1.8.2。因此整個完整版懶人包大約有189 MB,請點擊hadoop4win-setup-full_0.1.5.exe執行檔開始進行安裝的動作

  備註:由於hadoop4win會在安裝資料夾寫入數量眾多的檔案,假如您有安裝防毒軟體,安裝時間可能會比較長(因為每個檔案都被掃描過一次)。倘若您希望縮短安裝時間,可暫時性關閉防毒軟體。

  當您完成hadoop4win的安裝後,有兩種方式可以在Windows上啟動Hadoop。其一是從「開始」選單選取 start-hadoop捷徑。其二是先點選 hadoop4win 捷徑,進入Cygwin指令操作的介面,才下指令start-hadoop來啟動Hadoop的五個背景服務(亦及NameNodeDataNodeJobTrackerTaskTrackerSecondaryNameNode)。


  備註:安裝過程中,Windows防火牆會跳出警告說有Java程式嘗試開啟網路連線埠,這是因為Hadoop背景服務至少會開啟五個網路連線埠來進行底層的RPC通訊,請選擇「解除封鎖」。


  接著,您可以根據hadoop4win網頁的說明,學習基本的Hadoop指令操作。礙於版面篇幅,這裡我們僅列舉三個指令操作來進行說明。首先,第一個指令叫jps,這個指令顧名思義就是列出所有java process。單機版的Hadoop4Win,基本上應該要有五個Java程序。因此,倘若您無法看到如圖的五個Java程序名稱(前面的數字為PID,每次執行會不同),那代表您的電腦可能記憶體不足(最低需求為512MB,建議至少有1GB記憶體)。倘若您在執行上遇到任何問題,歡迎到forum.hadoop.tw提問。


  如果您可以正常看到jps出現的五個Java程序,代表您的Hadoop環境已經在背景正常執行了。此時您可以點選「開始」選單的「NameNode Web UI」與「JobTracker Web UI」,或者直接用瀏覽器開啟http://localhost:50070http://localhost:50030的網址。


  第二個指令叫作hadoop fs,這個指令是用來驗證Hadoop分散式檔案系統(HDFSHadoop Distributed File System)的功能是否正常。請在Cygwin指令視窗鍵入以下指令,將位於安裝目錄(c:\hadoop4win)的opt\hadoop\conf-pseudo子目錄,上傳到HDFS的抽象檔案系統:


$ cd /opt/hadoop

$ hadoop fs -put conf-pseudo input ; hadoop fs -ls


  最後一個指令叫作hadoop jar,這個指令是用來驗證HadoopMapReduce運算環境功能是否正常。請在Cygwin指令視窗中鍵入以下指令,將剛剛上傳到HDFSinput目錄,共計13個檔案,進行「字數統計(Word Count)」的MapReduce範例運算。


$ hadoop jar hadoop-0.20.2-examples.jar wordcount input output




STEP 1:首先請選擇語系

「繁體中文,Chinese (Traditional)


STEP 2:本軟體採用Apache 2.0授權,

請按「我接受」


STEP 3:如果您不需要HBaseAnt

可以取消選取

STEP 4:選擇安裝目標資料夾,

預設為C:\hadoop4win

STEP 5:接著安裝程式會開始解壓縮

STEP 6:接著會跳出Cygwin的安裝畫面

STEP 7:安裝完成後,請按關閉結束

STEP 8:您可以從「開始」程式集」

hadoop4win」點選start-hadoop

啟動Hadoop服務於背景

Hadoop 叢集佈建初探 - hiCloud 為例

國家高速網路與計算中心 王耀聰 副研究員


Hadoop打造您專屬的SMAQ資訊架構

  隨著資訊科技的快速演進,我們每天產生數量眾多的數位文件、圖片、音樂跟影片等。根據EMC委託IDC對數位宇宙(Digital Universe)的研究報告指出,2007年全球人類所產生的資料量已經遠超過全球所有儲存設施的總容量,意味著我們已經進入資料大爆炸(Data Explosion)的時代。2011年數位宇宙的總容量更高達1.8 ZBZetabyte, 109 TB),因此2012年可以稱為「巨量資料(Big Data)」的元年。

  根據Gartner CIO Agenda 2012的調查,2012年最重要的三大資訊科技分別為「商業智慧(Bussiness IntelligenceBI)」、「行動科技(Mobile Technology)」與「雲端運算(Cloud Computing)」。事實上商業智慧早在Gartner CIO Agenda 2009就名列第一名,為何四年後捲土重來?那是因為要達成商業智慧之前,企業必須先具備處理巨量資料的資訊架構,也就是20106Edd Dumbill 於「The SMAQ stack for big data」一文中提出的SMAQ架構。




  SMAQ架構說明了處理巨量資料須具備儲存(Storage)、平行運算(MApReduce)與查詢(Query)三層資訊架構。其中,儲存層用來儲存分散而沒有關聯(Non-relational) 的非結構化資料 (unstructured data),平行運算層採用谷歌提出的MapReduce演算法,將龐大的非結構化資料轉化成結構化資料(資訊,Information),並且將結構化資料儲存到查詢層的資訊系統,如資料庫、資料倉儲等。

  透過SMAQ資訊架構,企業還再次將資料倉儲的龐大資料經過MapReduce運算,運用統計的方法,找出重複出現的經驗法則(知識,Knowledge)。企業有了這些經驗法則,才能夠進一步對充滿變數的未來進行預測,最後形成某種智慧(Wisdom)。十年前知識管理專家所提出的DIKW模型(DataInformationKnowledgeWisdom),如今終於在資訊系統中獲得了具體的實現。

  Hadoop這套自由軟體實現了類似Google File System的儲存層,提供給企業一個具備彈性擴充的儲存設施;其次它也實作了MapReduce演算法,並且將谷歌的在地運算(Data Locality)精神融入Hadoop的核心設計中,大幅降低了資料搬運的時間與頻寬成本。此外,建構於Hadoop之上,存在著HBase分散式資料庫與Hive資料倉儲等查詢層軟體。

  因此,透過導入Hadoop生態系相關軟體元件,能提供貴單位符合SMAQ的資訊架構。像YahooFacebookTweeterLinkedInJoost等均已採用Hadoop當背後的支援火力。連OracleMicrosoft SQL Server都提供Hadoop的資料庫連結元件,足見業界對於Hadoop的重視。

  Hadoop經過七年的開發,阿帕契軟體基金會(Apache Software Foundation)終於在20123月釋出1.0.1版本,其重點在於安全性的改良以及對HBase有更好的支援。此外1.0版也算是Hadoop成熟到能支持企業營運任務的重大里程碑。即便如此,目前Hadoop最令人望之怯步的關鍵點在於「不夠友善」。筆者自2009年起便在台灣推動Hadoop使用者社群(http://www.hadoop.tw),經營Hadoop論壇(http://forum.hadoop.tw),但初學者往往第一個要面對的問題是缺乏佈建Hadoop叢集所需的背景知識,如LinuxJava語言等。因此,撰寫本文讓更多資訊從業人員得以從實例操作中,學習如何使用Hadoop生態系。


(待續)