2016-06-13 64 views
3

所以我有一個擁有7個工作節點的cloudera集羣。紗線:如何利用完整的集羣資源?

  • 30GB RAM
  • 4個vCPU

下面是我的一些配置,我在我的集​​羣的優化性能的重要發現(從谷歌)。我正在與運行:

  • yarn.nodemanager.resource.cpu-vcores => 4
  • yarn.nodemanager.resource.memory-mb => 17GB(REST保留用於OS和其他進程)
  • mapreduce.map.memory.mb => 2GB
  • mapreduce.reduce.memory.mb => 2GB
  • 運行nproc => 4(可用處理單元的數量)

現在我關心的是,何時我看看我的ResourceManager,我看到可用內存爲119 GB這很好。但是當我運行繁重的sqoop作業,並且我的集羣處於高峯時,它僅使用內存的~59 GB,而未使用內存~60 GB

我看到的一種方法,可以修復這個未使用的內存問題,將map|reduce.memory增加到4 GB,這樣我們就可以使用高達16 GB的每個節點。

其他方法是增加容器的數量,我不知道如何。

  • 4個核心×7個節點= 28個可能的容器。 3正在被其他進程使用,目前只有5個可用於sqoop作業。

什麼應該是正確的配置,以提高羣集性能在這種情況下。我可以增加容器的數量,比如說每個核心有兩個容器。這是建議?

有關羣集配置的任何幫助或建議將不勝感激。謝謝。

+0

你使用DefaultResourceCalculator嗎?還是您配置使用DominantResourceCalculator? – Nicomak

+0

你可以發佈你的'yarn-site.xml'和'mapred-site.xml'配置嗎? – Nicomak

+0

我正在使用cloudera安裝。找不到'yarn.nodemanager.container-monitor.resource-calculator.class'屬性。如果可以的話,使用FairScheduler作爲scheduler.class。我應該從'yarn-site.xml'和'mapred-site.xml'給出任何特定的配置嗎? – PratPor

回答

1

如果您的輸入數據是26分割,YARN將創建26個映射器來並行處理這些分割。

如果你有2 GB映射器7級的節點26個分割,重新分區應該是這樣的:

  • 節點1:4名映射器=> 8 GB
  • 節點2:4名映射器=> 8 GB
  • 節點3:4映射器=> 8 GB
  • 節點4:4名映射器=> 8 GB
  • 節點5:4名映射器=> 8 GB
  • Node6:3名映射器=> 6 GB
  • Node7:3名映射器=> 6 GB
  • 共有26名映射器=> 52 GB

因此,在你的地圖中使用減少的工作,如果所有的映射器在同一時間運行的總內存會是26x2 = 52 GB。也許如果你通過Reducer(s)和ApplicationMaster容器添加內存用戶,你可以在某些時候達到你的59 GB,如你所說的。

如果這是你正在見證的行爲,而工作是完成了這26個映射器之後,那麼沒有什麼不對。您只需要大約60 GB就可以通過將任務分散到所有節點上來完成工作,而無需等待容器插槽釋放自己。其他免費的60 GB只是在等待,因爲你不需要它們。爲了使用所有內存而增加堆大小不一定會提高性能。

編輯:

但是,如果你仍然有很多映射器等待調度的,那麼也許它因爲你安裝insconfigured使用vcores以及計算容器分配。這是不是在Apache的Hadoop的默認值,但可以配置:

yarn.scheduler.capacity.resource-calculator: 的ResourceCalculator實現了將使用的調度比較資源。缺省情況下,即org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator僅使用內存,而DominantResourceCalculator使用Dominant資源來比較內存,CPU等多維資源。預期會有Java ResourceCalculator類名稱。

由於您已將yarn.nodemanager.resource.cpu-vcores定義爲4,並且由於每個映射器默認使用1個vcore,因此每次只能爲每個節點運行4個映射器。

在這種情況下,您可以將yarn.nodemanager.resource.cpu-vcores的值增加8倍。它只是一個任意值,它將使映射器數量增加一倍。

+0

嘿。謝謝回覆。實際上,我正在爲大約1.7TB的數據運行sqoop作業。這很多,我爲這項工作提供了大約2000個mappers(' - m 2000')。使用當前配置完成任務需要1.5到2小時,但在整個作業中仍有60 GB內存未被使用,因爲一次只能運行26個映射器(使用2 GB)。這顯然給我一個印象,即它受到可用核心數量的限制。如果我找到比將任務內存增加到4GB更好的解決方案,我會檢查更多並在此更新。 – PratPor

+0

然後將yarn.nodemanager.resource.cpu-vcores增加到8.它只是一個任意值,你可以將它加倍,如果你的計算器因爲cpu而真的受到限制,它應該使映射器數量增加一倍 – Nicomak

+0

是的,我試過了,它實際上可以使mappers的數量增加一倍。運行一個測試工作(pi),發現它降低了工作性能,因爲現在2個映射器將按每個核心共享資源運行,並且pi作業比基於內存的計算基礎更多。所以我所理解的是,它實際上是在這裏交易。對於不需要太多內存的作業,我們可以增加映射器計數(vcores),否則只需將映射任務內存增加到4GB就更安全。感謝所有的幫助。 – PratPor