編輯::
Spark或當通過紗線管理資源的任何其他應用程序,它變成紗線的責任,以確保資源。現在
YARN如何確保容器不受節點上其他容器的影響?
查詢here瞭解詳細的紗線內存分配說明。
紗容器是JVM進程,所以同時發動NM指定容器JVM-選擇採用限制VM存儲器中,然後還有一個在節點管理器叫做ContainersMonitor組件,其監視該過程的總的內存使用和的使用如果進程試圖消耗更多資源,則發送終止信號。
是NM的ContainerMonitor使用CGGroup監控CPU和內存嗎?
按照官方文檔:Using CGroups with YARN cgroup的是聚合/劃分,將各組任務的機制,和他們所有的未來的孩子,與專業行爲層級組。 CGroups是一個Linux內核特性,並被合併到內核版本2.6.24中。從YARN的角度來看,這允許容器的資源使用受到限制。一個很好的例子就是CPU使用率。沒有CGroups,很難限制容器的CPU使用率。 目前,CGroups僅用於限制CPU使用率。
內存,它的到來在Hadoop 3.請參考JIRA here
它是如何製成確保內存只用於此應用程序?
對於分配給JVM進程的內存,JVM確保它爲堆拋出內存異常,並且總的來說NM的容器監視器執行監視和查殺。
不能被其他應用程序使用?
管理員確保。哈哈哈,沒有人被允許登錄到工作人員節點除了少數管理員在我們的情況。
現在進入規劃階段,假設每個worker/datanode機器都有64 GB RAM,沒有人允許登錄運行任何自定義代碼,因此只有所需的服務(linux和yarn服務)正在運行。其中最大10 GB,所以你決定給紗餘下的48 GB。
現在啓動容器Yarn將告訴NM每個容器分配最大4GB(其中一個百分比將被分配爲實際JVM的堆,按照設置),這將確保最小容器數量。
然後,如果所有工作要求每個容器1 GB,YARN將能夠填充48個容器。 (謝謝@Samson Scharfrichter)
呵呵......你暗示Linux進程可以訪問分配給任何其他Linux進程的內存,並潛入別人的數據?! –
或者你是否暗示在過程結束時RAM沒有被清理,另一個進程可以分配一些內存並檢查這些位以猜測對象是如何在那裏被序列化的? –
原因是由於2014年發佈的DRAM泄露,[鏈接](https://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf)。這種泄漏的想法是,你可以在相鄰的行中導致位翻轉,從而可能損壞別人的數據。由於使用YARN確保它們獨立運行,我很好奇它是如何實現的以及如何防止這種情況發生。在https://googleprojectzero.blogspot.de/2015/03/exploiting-dram-rowhammer-bug-to-gain.html上可以找到更容易閱讀的信息。所以我想知道如果能夠訪問Spark或YARN的內存,何時使用它。 –