讀通過的Hadoop所產生的日誌,我可以看到類似這樣的行可用的地圖插槽數..Hadoop的:基於簇大小
2013-05-06 16:32:45,118 INFO org.apache.hadoop.mapred.JobClient (main): Setting default number of map tasks based on cluster size to : 84
有誰知道這個值是如何計算的? 如何在我的程序中獲得此值?
讀通過的Hadoop所產生的日誌,我可以看到類似這樣的行可用的地圖插槽數..Hadoop的:基於簇大小
2013-05-06 16:32:45,118 INFO org.apache.hadoop.mapred.JobClient (main): Setting default number of map tasks based on cluster size to : 84
有誰知道這個值是如何計算的? 如何在我的程序中獲得此值?
所以這是根據您的輸入大小默認設置的。 http://wiki.apache.org/hadoop/HowManyMapsAndReduces。您可以指定更多的映射器,但不能少於hadoop定義的數量。
您應該可以通過獲取配置選項「mapred.map.tasks」來訪問此編號。如果你使用舊的API,你也可以從這個函數中獲取它。
conf.getNumMapTasks();
這個前面的問題,How to set the number of map tasks in hadoop 0.20?,有一些很好的答案,以及
這主要是InputFormat
的責任找到了沒有。的映射器,它是基於由您的InputFormat類的getSplits(JobContext context)
方法編寫的邏輯創建的InputSplits
完成的。指定no。通過Job或配置文件映射器或通過shell指定它只是提示框架,並不能保證你總能得到指定的no。的mappers。
我不認爲這個問題是關於否。工作需要的mappers。問題是關於一個集羣可以處理的同時映射器的數量。 – ernesto 2014-11-11 11:51:39
我grepped Hadoop的源代碼,並沒有找到字符串Setting default number of map tasks based on cluster size to
在所有(但我發現其他字符串,正在打印時運行MR作業)。此外,這個字符串不會被打印在本地安裝的任何地方。谷歌搜索它列出了AWS與EMR的問題。 如您所確認的,您實際上使用Amazon Elastic MapReduce。我相信EMR對類Hadoop有一些自己的修改,它會輸出這個特定的行。
就計算這個數字而言,我懷疑它是根據像total number of (active) nodes in cluster (N)
和number of map slots per node (M)
這樣的特徵,即N*M
來計算的。但是,也可能會考慮其他AWS特定的資源(內存)限制。您必須在EMR相關論壇中詢問確切的公式。另外,JobClient
公開了關於集羣的一組信息。使用方法JobClient#getClusterStatus()可以訪問如下信息:
通過ClusterStatus類對象,因此您可以嘗試手動計算您的程序中所需的數字。
這似乎很有用,但'JobClient'屬於舊包'org.apache.hadoop.mapred',我試圖弄清楚如何從org.apache.hadoop.mapreduce中獲得'JobClient'。工作'對象。 我也發現'org.apache.hadoop.mapred.JobTracker'類有'getClusterMetrics()'方法。它返回我需要的信息..但又沒有找到一種方法來獲取此對象的一個實例。 – Matteo 2013-05-07 11:46:08
我認爲你在這裏使用'JobClient'。或者,您可以嘗試通過JMX訪問JobTracker。不過,我不確定它是否會提供所有需要的指標。在hadoop 2.0中檢索更容易。看看[示例](https://github.com/apache/hadoop-common/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop /examples/pi/DistSum.java)附帶hadoop的源代碼(第391,405行)。它使用Cluster#getClusterStatus()來獲取一個'ClusterMetrics'實例。 'Cluster'實例是通過像JobClient這樣的URL來構造的。 – harpun 2013-05-07 20:43:54
您正在使用哪種Hadoop版本?您是否在AWS上使用Amazon Elastic MapReduce? – harpun 2013-05-06 17:59:45
是的,我在AWS上使用Amazon Elastic MapReduce。 Hadoop版本1.0.4 – Matteo 2013-05-06 18:32:25