因為雲端與資訊檢索課程都要求期末專題,因此選了可涵蓋兩門課程的交集計畫:建立雲端叢集上的搜尋引擎。以下是一些過程與其中遇到的問題。
此期末專題採用的組件如下
- Eucalyptus:提供 AWS EC2,S3 與 EBS 等服務相同的自建雲端平台。雖然 Ubuntu 在 11.10 時主力轉向另外一套 OpenStack ,但經過漫長艱辛的嘗試,覺得目前後者在快速佈署、運作與改設定的穩定上不如以往 Ubuntu 在 11.04 以前 Installer CD 同綑 Eucalyptus 的作法[1]
- Crawlzilla:國網中心開發,將索引庫、搜尋引擎、爬蟲、分佈式運算的 Nutch 與 Hadoop 包在一起。雖然 Nutch 已經具備使用 Hadoop 的能力,但使用 Crawlzilla 可進一步簡化設定、佈署節點,以及管理搜尋服務的步驟。
- Ubuntu 11.04 EMI:前述 Crawlzilla 將安裝在雲端的 instances 上。 由於自製 EMI 可能有很多問題,為謹慎起見,直接下載 Ubuntu 提供可發布的 Cloud Image ,並做了一些必要的修改。至於使用11.04 是因為 12.04 與 11.10 都無法使服務正常運作,稍後會詳細提及。
- Sun Java 6 JDK:Crawlzilla 只能接受 Sun Java 6 JDK 。在有限時間的情況下,我無法完整修改與測試 Crawlzilla 是否能與 Open JDK 接軌。所以每台節點都必須安裝 Sun Java 6 JDK。
- 對各 instance 而言,可用記憶體非常重要。因為 Hadoop MapReduce 會佔據很多記憶體,因此最好主控 instance 有 1GB 以上的記憶體額度。測試中,在只有 512MB 的情況下,連搜尋都會出現 'OutOfMemory' 例外。
建置步驟
- 主控的 instance 所在 Security Group 除 SSH 外,必須要有 8080、50070、50060、50030 等 port 開放,以便查詢 Hadoop 與 Crawlzilla 網頁資訊
- 因為Ubuntu Cloud 官方提供的 EMI 預設根目錄空間不足,所以必須手動增加可用空間
- 將下載的 EMI 'tar.gz' 檔解開
- 根據 Eucalyptus 文件增加該 '.img' 映像檔大小[u1]
- 重新用 Tar 將映像檔與其他解開的組件包起來
- 使用 'uec-publish-tarball' 工具[2]發布該 EMI
- 使用命令列方式或 Hybridfox 啟動該 EMI 的 instance 並連入。假設這第一台作主控 Controller ,並具有 Public IP
- 若是該 Cloud 預設發的不是真的 Public IP ,而是例如 192.168.0.0/12 這種內網 IP 的位置,則要使用 Eucalyptus 類似 AWS Elastic IP 的方式去提供。
- 安裝 Sun Java 6 JDK 。為了預防使用 Script 造成額外設定與問題,我在此階段每個 instances 都使用手動安裝。注意雖然該篇指引是針對 Java 7 ,但原理相同
- 下載 Crawlzilla 安裝包,解開並按照官方指引安裝
- instance 的 '/etc/hosts' 會沒有該 instance hostname ,需先手動將 'localhost' 改成該 instance 連入時顯示的 hostname [3]。
- 預先修改節點安裝所需設定:因為 Crawlzilla 中佈署節點的 Scripts 預設使用密碼連回 Controller ,與 EMI 中預設使用私鑰連線不同,為了避免大量修改 Scripts 可能造成的問題,因此將 Controller 節點中,SSH 預設不使用密碼連線的設定改回。
- Controller 主控安裝完成,可以連線至該 instance 公開 IP 位置的 8080 port 網頁介面,也可以先至其 'Crawl' 頁籤中嘗試抓取一個簡單網頁,並深度設成 '1' 測試看看
- 根據多次嘗試,若完全不改動設定,Ubuntu 12.04 與 11.10 在這個簡單測試動作就會因 DFS 而出錯。這也就是為何後來要改用 11.04 的原因。
- 「簡單網頁」指內容不要太多,但最好能有中英文的網頁。如果沒問題,大致上 5 分鐘左右就可以建好索引提供搜尋 [4]
- Controller 安裝好後,會因為不明原因,原本應該提供子節點安裝腳本的預設目錄 '/home/crawler/crawlzilla/source/slave_deploy.sh' 中沒有該檔案,因此手動複製移至該路徑中
- 不過我是在 instance 上用 'ubuntu' 帳號安裝,可能因此路徑與 Crawlzilla 預想不同。
- 設定一台子節點:之後其他子節點都可以依樣畫葫蘆
- 如前所述進行準備工作到安裝完 JDK ,就可下命令去將該節點安裝腳本抓回此節點上:'scp crawler@[ 主控 IP ]:/home/crawler/crawlzilla/source/client_deploy.sh '
- 執行該腳本進行安裝。過程中會問是否打開 Hadoop ,可以一併開啟
- 安裝好子節點,可以在 Controller 中下命令確認:'crawlzilla'
- 進入此管理介面可以使用第一個選項確認節點確實有連上