2012年11月26日 星期一

TaskTracker send heartbeat cases

 可以看到TaskTracker中對於 heartbeat傳送時機有兩種


TaskTracker.java
...
private long getHeartbeatInterval(int numFinishedTasks) {
    return (heartbeatInterval / (numFinishedTasks * oobHeartbeatDamper + 1));
  }

...

heartbeatInterval預設是 HEARTBEAT_INTERVAL_MIN 為 3*1000 ms = 3sec
numFinishedTasks是此TaskTracker目前完成的Task數量
oobHeartbeatDamper是預設1000,000

也就是說getHeartbeatInterval(int numFinishedTasks)回傳的值是:
1. 當TaskTracker尚未完成任何task >>> 3000/(0*1000,000+1) = 3000ms = 3sec
    即3sec才傳一次heartbeat

2. 當TaskTracker完成一個以上task時 >>> 3000/(1*1000,000+1) = 0.00299 = 0sec
    即馬上傳一次heartbeat告知JobTracker有task完成

2012年11月12日 星期一

Ubuntu 網路速度限制

當需要去限制Ubuntu的網路其 上傳/下載 的速度時
可透過 Wondershaper 這個工具


安裝:
  sudo apt-get install wondershaper

使用:
  sudo wondershaper  [link type]   [download speed(kbps)]  [upload speed(kbps)]
  ex:
    sudo wondershaper eth0 512 64

    這樣 eth0的網路連線  下載速度上限就為512Kbps  上傳速度上限為 64 Kbps


[Reference]
Wondershaper流量監控工具
[分享] 在面板顯示上傳下載流量 [論壇 - Ubuntu基本設定]

2012年10月31日 星期三

java.lang.NullPointerException 問題

在開發大型程式時, 經常會用到物件導向的概念,
但有時會不小心忘了使用到一個"尚未存在的物件",  存取使用其物件所屬類別的函式,
就會造成
java.lang.NullPointerException 的問題

ex:
...
Job job;
job.setconf(); //setconf() 為Job class中的一個函式
...

就會有問題
因為實際上 Job job; 只是宣告了一個是宣告了一個Job type的變數

應該要宣告出一個實際的物件, 才能去使用其函式

...
Job job = new Job();
job.setconf();
...


[Note] 所以當發生java.lang.NullPointerException此問題時, 可以去檢查一下是否有物件尚未被new出來

2012年9月30日 星期日

Reduce Task assign 時機

在Hadoop中, Reduce task 並非等到所有 Map task 做完才被assign下去做,
預設:

JobInProgress.java
...
public synchronized Task obtainNewReduceTask(TaskTrackerStatus tts, int clusterSize,
int numUniqueHosts) throws IOException {
...
if (!scheduleReduces()) {
      return null;
    }
...
}
...
public synchronized boolean scheduleReduces() {
    return finishedMapTasks >= completedMapsForReduceSlowstart;
  }

completedMapsForReduceSlowstart
=(預設DEFAULT_COMPLETED_MAPS_PERCENT_FOR_REDUCE_SLOWSTART)*numMapTasks
= 0.05*這個job的map task 數量

目的:Ensure we have sufficient map outputs ready to shuffle before scheduling reduces

...............................................................................................................
舉例來說, 假設此Job有 40 map tasks, 1 reduce task
則此Job的completedMapsForReduceSlowstart = 0.05*40=2

及表示這個Job至少必須完成 2 個map tasks, 才可以assign reduce task

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 網頁管理介面樣板修改的可能性?