2012年6月18日 星期一

task complete percent

在執行hadoop job時, 可以從管理的網頁觀察到 job 運行的狀態,
亦可觀察到job中的 task 運作的情況,
如下圖
好奇的是, 每個 task 的"Complete"的%數是怎麼來的

簡單去查看了一下jobtasks.jsp source code,
發現他是用到 Hadoop API 中的 TaskReports 這個class裡面的 getProgress()

getProgress() 是以 0~1 表現task完成度
所以 jobtasks.jsp 中在

--------
...
for (int i = start_index ; i < end_index; i++) {
          TaskReport report = reports[i];
          out.print("<tr><td><a href=\"taskdetails.jsp?tipid=" +
            report.getTaskID() + "\">"  + report.getTaskID() + "</a></td>");
         out.print("<td>" + StringUtils.formatPercent(report.getProgress(),2) +
                   ServletUtil.percentageGraph(report.getProgress() * 100f, 80) + "</td>");
...
----------

乘上100來便於觀測完成的%數

2012年6月17日 星期日

VirtualBox Screen Size adjusting

VirtualBox的VM視窗大小可拖拉視窗邊緣來調整,
但有時會當解析度太大時會造成VM視窗無法涵蓋整個VM裡頭原有的螢幕大小,
導致操作不便, 如下

此時可透過去調整VM OS的解析度來解決VMS1
找到顯示器的選項
解析度調整為800X600
保留組態並關閉顯示器的設定
完成後的VM視窗比例,含括了整個VM內部OS的視窗, 相較下操作性更為便利

2012年6月10日 星期日

ignore the yes/no checking while ssh connect first time

[Problem]
當每回第一次連線到一個新的ip/host時總會產生以下的訊息:

user@host:$ ssh 192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ECDSA key fingerprint is c7:16:8b:55:c8:39:24:5a:db:cd:e9:79:8c:24:59:39.
Are you sure you want to continue connecting (yes/no)?

此時就又必須在輸入一次" yes"才會完成連線

那假若不想輸入yes就直接連線進去可用以下方法

[Method]
在 ~/.ssh/ 中新創一份檔案叫 config
然後在config中加入

    Host 192.168.1.1
        StrictHostKeyChecking no
        UserKnownHostsFile=/dev/null

儲存.

而之後若是第一次作ssh連線到192.168.1.1的host時,
就不會在出現以上的訊息, 也不用在輸入yes就可直接進入連線


[Note]
適用情況之一:
假設像是hadoop這種大規模數量的node建置時,
master必須先把authorized_keys scp給每個slave, 但手動每次的scp太花費時間,
當寫成shell script時又會卡在上述問題的詢問上,
此時就可先在master的~/.ssh/config 上利用Method加入所有slave

2012年6月6日 星期三

hadoop管理網頁的修改

有時單純輸出log檔然後再去收集觀察不一定方便
有空再來研究一下如何去修改監測jobtracker及namenode兩個網頁

[Reference]
Hadoop 網頁管理介面樣板修改的可能性?

VirtualBox install on ubuntu

VirualBox 要安裝在 ubuntu上非常簡單

[Version]
Ubuntu 12.04
VirtualBox

[Steps]
1. Download VirtualBox package
2. sudo apt-get install dkms
3. sudo dpkg -i VirtualBox-3.2_4.1.16_Ubuntu_karmic_i386.deb
4. 要開啟virtualbox也很簡單, 只要在terminal上執行 virtualbox
    就會開啟圖形介面

[Reference]
https://www.virtualbox.org/manual/ch02.html#idp12629648

Virtualbox-Build multiple VMs cross mutiple physical servers

[Motivation]
當想模擬數十台甚至數百台VM所組成的cluster時, 單一實體server會受限於cpu數量以及memory大小, 而無法建立如此多台VM, 所以必須跨連到其他實體的servers, 此時VM又該如何佈署及設置網路?

[Virtual Machine]
本篇使用的是VirtualBox4.1

[Physical Machine]
HP ProLiant DL380 G6 (2core, 20G mem, 500G hd ) X 3
各自OS為 Ubuntu 12.04

[Method]
1. Install virtualbox at each physical servers   在各個server上安裝virtualbox
    參考:http://lifenote332.blogspot.tw/2012/06/virtualbox-install-on-ubuntu.html

2. Start Virtualbox and Create a new VM   新增一個新VM
    a. 設定[名稱], 選擇[作業系統]及[版本]
        (在此的名稱與VM內的OS完全沒關, 只是Virtualbox辨識用)
    b. 設定[記憶體大小] (在這設1G)
    c. 啟動硬碟-->選擇[新建硬碟]
    d. 檔案類型-->選擇[VDI]
    e. 存放裝置選擇詳細資料-->選擇[動態配置]
    f. 虛擬磁碟檔案位置-->選擇(即將創造的vdi檔的存放位置), 大小-->選擇(在此設成50G)
    g. 完成建立

3. Set two network interface cards for the VM   給予此VM兩張網卡
    a. NAT(Network Address Translation):
        概念:模擬自身就是本台實體server(Host OS), 以便對外連線, 但會使得實體server無法偵測到自己(此VM即Guest OS), 也因此無法連線到其他實體server上的VM
        功用:便利此VM上網作些更新或下載的動作
       
    b. Bridge
        概念:模擬自身與本台實體server(Host OS)存在於同一個Hob or Router底下,使得實體server能偵測得到自己, 因此在其他實體server上的VM也同樣的設定下, 可偵測到彼此
        功用:讓VM不僅可在本台實體server上互連, 也可與其他台實體server上的VM互連
       

4. Install OS and set network configuration on the VM   安裝OS及設定網路
     a. 在此安裝linux OS(Ubuntu 11.10)
     b. 網路設定的部份, 選擇[編輯連線], 因為先前給予了兩張網卡所以會有兩個連線, 而連線對映的設置應為:
         I.  裝置的MAC Address : (eth0) 即為給予的NAT網卡 --> IPv4設定 :自動(DHCP)
         II. 裝置的MAC Address : (eth1) 即為給予的Bridge網卡 --> IPv4設定 :手動(manual)
             address : 192.168.X.X(X表示自行設置, 在此設成192.168.123.1)
             mask:      255.255.X.X(在此設成255.255.255.0)
             gateway:  192.168.X.254(在此設成192.168.123.254, 網路上似乎常用254)
             DNS server: (同gateway)

5. Clone VDI   複製vdi
    當一個VM建好時, 他所有的設定都包成了一個vdi檔, 當然也可以複製此vdi來開啟另一個新的VM, 使其具備與原始的VM有同樣的設定, 但無法直接複製, 必須透過VirtualBox上的指令
    a. 執行:vboxmanage clonvdi old.vdi new.vdi
        便會產生新的vdi來開啟新的VM
    b. 執行:vboxmanage internalcommands sethduuid new.vdi
        因為有可能新舊兩個VM的uuid重複導致Virtualbox無法去開啟, 所以需在給new.vdi一個隨機的新uuid

6. Deploy new VM    開始佈署VM
    複製好的vdi, 可在本機開啟成新的VM, 亦可透過scp傳給其他台實體server 來開啟新的VM
    a. 再次實行2. , 只是到2. c.時, 選擇[使用現有硬碟], 然後選取要使用的vdi檔
        (因為在"啟動硬碟"此步驟時, virtualbox會建立一個新VM的資料夾, 我習慣先把要開啟的vdi檔先移到此然後在選取開啟, 這樣新VM的資料夾就對應新vdi, 比較方便管理)
    b. 執行3.
    c. 執行4. , 但不用在裝OS(因為已經有了), 只需調整網卡的部份及IP
        (IP一樣設成192.168.X.X)
    d. 修改hostname, 執行:sudo gedit /etc/hostname  修改完要重開VM
        (不要跟其他VM重複, 自己容易辨識的就行)

    重複5., 6. 即可佈署大量的VM

[Recommendation]
A. 假設想要所有VM都裝一些相同套件(ex. hadoop and Java)或設定, 可在一開始建第一個VM就都先下載安裝好, 如此複製此VM所產生的vdi也會具有相同的套件安裝

B. 想建立ssh免密碼連線, 可以先在第一台VM做好自己連自己的免密碼

C. 若想建立一個大型互連的cluster, 在host設定上為了減少麻煩, 可在第一台VM先設置好
    /etc/hosts, 將想要互連的host全部設進去, 之後的VM建立就不用在一個個去修改hosts

D. 當每次新建好一個VM時(就是網卡及hostname等全部設好),
    1. 先ssh 到先前已經建好的VM, 若OK則表示Bridge設置沒問題
    2. 然後開啟網頁瀏覽器, 若能正常開啟連外網頁, 則表示NAT沒問題

[延伸]
X. 曾經想過, 若VMs分佈在很多台physical machines上時, 控管每個VM要不斷轉換去使用各個physical machine, 這樣顯得很麻煩, 後來有找到一套軟體可以在單一一台server上就可去連到各個physical machine上的VM,  叫做"RemoteBox",  不過在嘗試使用下, 雖確實可以連到各台的VMs, 但卻無法開啟該VM的視窗畫面, 這點尚未突破

RemoteBox官網:
remotebox.knobgoblin.org.uk/downloads.cgi

[Reference]
多台實體machine建VM hadoop cluster
http://changyy.pixnet.net/blog/post/25612440-%5Blinux%5D-%E5%AE%89%E8%A3%9D-hadoop-0.20.1-multi-node-cluster-@-ubuntu-9.1

remotebox相關介紹
http://www.openfoundry.org/index.php?option=com_content&task=view&id=8319&Itemid=40

vboxmanage 指令doc
http://www.virtualbox.org/manual/ch08.html#vboxmanage-clonevm

vboxmanage clonevdi指令介紹
http://lbt95.pixnet.net/blog/post/30970746-%5Bvirtualbox%5D-%E4%BD%BF%E7%94%A8vboxmanage-%E8%A4%87%E8%A3%BD%E5%87%BA%E7%AC%AC%E4%BA%8C%E5%80%8B%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1

virtualbox 網卡type介紹
http://www.wretch.cc/blog/mk99/22949462