可以看到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月26日 星期一
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基本設定]
可透過 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出來
但有時會不小心忘了使用到一個"尚未存在的物件", 存取使用其物件所屬類別的函式,
就會造成
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
預設:
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年7月12日 星期四
2012年7月9日 星期一
MapReduce 各種 benchmark
SWIM (比較新)
https://github.com/SWIMProjectUCB/SWIM/wiki (官網)
( 技術paper : The Case for Evaluating MapReduce Performance Using Workload Suites)
參考: a berkeley view of big data algorithms machines and people
Gridmix (最常用)
hadoop內部有提供
http://developer.yahoo.com/blogs/hadoop/posts/2010/04/gridmix3_emulating_production/
Pigmix
https://cwiki.apache.org/confluence/display/PIG/PigMix
Hive Benchmark
https://issues.apache.org/jira/browse/hive-396
[Reference]
Big Data in the Enterprise: Network Design Considerations
https://github.com/SWIMProjectUCB/SWIM/wiki (官網)
( 技術paper : The Case for Evaluating MapReduce Performance Using Workload Suites)
參考: a berkeley view of big data algorithms machines and people
Gridmix (最常用)
hadoop內部有提供
http://developer.yahoo.com/blogs/hadoop/posts/2010/04/gridmix3_emulating_production/
Pigmix
https://cwiki.apache.org/confluence/display/PIG/PigMix
Hive Benchmark
https://issues.apache.org/jira/browse/hive-396
[Reference]
Big Data in the Enterprise: Network Design Considerations
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來便於觀測完成的%數
亦可觀察到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的視窗, 相較下操作性更為便利
但有時會當解析度太大時會造成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時總會產生以下的訊息:
此時就又必須在輸入一次" yes"才會完成連線
那假若不想輸入yes就直接連線進去可用以下方法
[Method]
在 ~/.ssh/ 中新創一份檔案叫 config
然後在config中加入
Host 192.168.1.1
儲存.
而之後若是第一次作ssh連線到192.168.1.1的host時,
就不會在出現以上的訊息, 也不用在輸入yes就可直接進入連線
[Note]
適用情況之一:
假設像是hadoop這種大規模數量的node建置時,
master必須先把authorized_keys scp給每個slave, 但手動每次的scp太花費時間,
當寫成shell script時又會卡在上述問題的詢問上,
此時就可先在master的~/.ssh/config 上利用Method加入所有slave
當每回第一次連線到一個新的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)?
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日 星期三
訂閱:
文章 (Atom)




