2013年5月28日 星期二

Hadoop 如何實現多租戶(Multi-tenancy) 架構

source:hadoopsphere

什麼是多租戶 (Muti-tenancy)


根據wiki上的所謂的多租戶( Muti-tenancy )的定義:
在多用戶的環境下共用相同的系統或程式元件,並且仍可確保各用戶間資料的隔離性
但是其實多租戶除了資料的隔離性外,還必須另外考量到運算資源的分配問題,因為就算資料已經做到有效隔離,但是因為資源被某個特定用戶使用完,而造成其他用戶的不便,這樣的狀況也不能稱之為好的多租戶環境。

下圖是常見的幾種多租戶(Multi-tenancy)架構,每種架構都有其優缺點,要選擇和種架構就必須端看應用的情境,以效率來說越左邊的越好,越右邊的越差,但是以彈性來說正好相反,越左邊彈性越低,越右邊彈性越高。


Source: erpcloudnews

同樣的Hadoop也會遇到Muti-tenancy的問題,尤其是當系統開放讓許多人在上面使用Hadoop的運算資源,Hdfs的儲存空間,或是Hbase的資料欄位。

就目前研究來看,目前在Public Cloud的世界,大多使用比較偏向右邊的方式來處理Hadoop 的處理多租戶問題,最常見的就是使用 虛擬化的方式隔開(如:Amazon EMR),因為這種方式實作上比較簡單,但是相對的Efficency就必較低 。

那如果想要像光譜的左側靠攏,那該如何實作,Hadoop 現階段又有提供怎樣的方法?

Hadoop 如何解決多租戶(Muti-tenancy) 問題


Hadoop 針對資料隔離性和資源分配分別提出了以下作法:

1. 資料隔離性(安全性)


  • Establish appropriate users and groups and plan data layout based on required privileges.
  • Enable Kerberos (aka: Yahoo's security patch set) security to ensure people are who they say that are, if that's necessary in your environment
  • Document data retention policies and attach policies to directory trees. e.g. All data under /user/ older than 180 days is pruned. 
  • Enable, study, and understand HDFS quota features.
簡單來說就是讓使用者只看到自己該看到的東西,與執行能執行的工作 (基本上跟Linux差不多)

2. 工作資源分配 (Capacity Scheduler)


Use either the Fair Scheduler or Capacity Scheduler rather than the FIFO scheduler. This allows you to provide SLAs and guaranteed resource availability to tenants appropriately.

Fair Scheduler:

1.  Fair scheduling is a method of assigning resources to jobs such that all jobs get, on average, an equal share of resources over time。簡單來說就是均分法則 (Each job gets roughly the same amount of CPU time),越少人使用大家分到資源越多,越多人使用,大家分到的資源越少 (不過還是可以調整權重)

2. 使用 first-in-first-out (FIFO)的Job Pool,但是可以設定確保足夠的資源 (Allows assigning guaranteed minimum shares to pools),如果這個Pools資源不夠分配了,則Fair Scheduler 就會去其他的Pool搶資源,以確保達到我們的最低需求

3. Can limit the number of concurrent running tasks per pool

Capacity Scheduler

不過對於Multi-tenancy來說,還是建議使用專門為了多租戶設計Capacity Scheduler,因為相對起來 Fair Scheduler是在是太過於陽春,根據官網的說法他提供以下功能:

1. Capacity Guarantees - 每一個Queue 都會偵測和接收自己可以承受的工作量
2. Security - 由嚴格的ACLs機制,每個使用者只能修改和使用自己的Task
3. Elasticity -  系統會盡力的去調配資源,把過載的Queue的工作移到比較有餘力的Queue
4. Multi-tenancy - 確保Queue與資源不會背某個工作或使用者壟斷
5. Operability -  可以隨時動態去更改設定,以達到使用者對於資源分配的需求
6. Resource-based -  允許根據特殊的工作需求去調配資源,例如說記憶體
7. Job Priorities - Queues optionally support job priorities (disabled by default)

雖然說提供這麼多功能,但是每一個參數可能都會影響另一個參數,所以要如何調配這些參數就是另一門大學問了....

延伸閱讀:

[1] HADOOP 的安全性
[2] Hadoop内置作业调度器与调度平台的集成
[3] hadoop 0.20.2 capacity scheduler 配置方法
[4] Hadoop-0.21.0公平调度器算法分析

(謎之音:文章不好好寫,花一堆時間在找有趣圖片....囧rz...)


[2013.07.14] Update:

Hadoop2.0 開始引進的的YARN用意就是在做資源管理,也是某種程度的Multi-tenancy,為了能更有效率的使用Cluster資源,另一個專案就是Apache Mesos,有興趣的可以參考這篇文章:統一管理與資源調度介紹
張貼留言