之前我們提到大數據的時候就會提到Hadoop
,Hadoop
是大數據的基礎框架,是大數據技術的代表。提到HDFS
、MapReduce
、Yarn
,提到HBase
、Hive
、TEZ
等Hadoop
生態圈中的一個又一個開源組件。但是最近好像有點不一樣了。
Hadoop三巨頭
曾經的三巨頭之一MapR
向加州就業發展局提交文件,稱如果找不到新的投資人,公司將裁員 122 人,並關閉位於硅谷的總部公司。這曾經可是估值10億美元的Hadoop
發行版廠商啊,說跪就要跪了,而另外兩巨頭則是抱團取暖,當然這也不能完全說明Hadoop
面臨着一些問題。
2003年,依據Google發表的三篇論文將Google的三駕馬車從幕后搬到台前,奠定了后面十幾年大數據的框架基礎,形成了Hadoop
生態圈的第一圈:分布式文件系統HDFS
、分布式計算MapReduce
、HBase
NoSQL
數據庫(BigTable
)和Yarn
資源調度服務。一時之間如日中天,Hadoop
生態蓬勃發展,Hortonworks
、Cloudera
和 MapR
一直在進行技術更新,開發了一款又一款的基於Hadoop
的工具。Hive
的出現實現了類SQL
的支持,迅速占領了市場,后面基於SQL On Hadoop
的組件更是層出不窮,Presto
、Impala
、Drill
、Spark
、Tez
、Sqoop
等等。Hadoop
的生態圈越來越大,后面興起的新型計算框架和查詢框架都圍繞着Hadoop
進行兼容,如Presto
兼容Hive
、Spark
兼容HDFS
存儲和Yarn
調度,一切看起來都是美好的樣子。
但是,從之前的Hadoop
是大數據的基礎框架到現在Hadoop
已經不能完全代表大數據了,Hadoop
只是大數據技術領域的一個分支,而其他分支正在努力的演化為新的大數據實現方式。
大數據技術棧
大數據的技術棧我們通常認為分為:資源調度層、分布式存儲層、統一計算引擎層和統一接口層。
- 資源調度層:為了更好的對資源進行管理,解決上層應用的問題,現在出現了很多新的技術,很多企業都開始利用容器編排技術來代替
YARN
進行資源管理。當然,Hadoop3
之后Yarn
也支持調度Docker
應用了,算是Hadoop
的一個改進。 - 分布式存儲層:誠然
HDFS
是一個較為通用的存儲服務,但是它原生的痛點就是不支持小文件存儲,而且由於存儲特性無法實現高性能的隨機讀寫。 - 統一計算引擎:現在
MapReduce
已經基本要被Spark
和Flink
所取代了,當然Spark
和Flink
也算Hadoop
生態中的一員,但是不要忘了,當Spark
底層存儲基於S3
,調度基於K8S
就可以完全拋開Hadoop
了。畢竟誰還不是一個通用性的產品呢~ - 統一接口層:通過統一的
SQL
接口層來降低大數據技術的使用門檻是我們的共識,目前SQL on Hadoop
技術也在蓬勃發展,SQL
的支持度也在不斷的提升,但是如果不依賴HDFS
存儲可就不見得SQL On Hadoop
了。
上面說了這么多也不是在唱衰Hadoop
,只是Hadoop
目前看來確實好像遇到了瓶頸。但是Hadoop3
也增加了大量的功能,Yarn
支持Docker
容器、支持TensorFlow
的GPU
調度,提供了對S3
的支持。Hive
的LLAP
(低延時分析處理)、聯邦數據查詢和完全支持ACID
事務也讓Hive
朝着更好的方向發展。不得不說現在所有的技術都在朝着雲原生的方向前進,如果不能成功上雲,可能終將被遺忘。
雲原生下開源的YuniKorn
而Hortonworks
和Cloudera
的合並可能是Hadoop
發展的又一轉折點,畢竟合並的戰略目標是專注於雲。就在昨天,19年7月17日,Cloudera
官方博客發文開源了一個幕后工作很久的大數據存儲和通用計算平台交叉的新項目——YuniKorn
。據介紹,YuniKorn
是一種輕量級的通用資源調度程序,適用於容器編排系統,負責為大數據工作負載分配 / 管理資源,包括批處理作業和常駐運行的服務。有興趣的可以關注一下Github
地址:https://github.com/cloudera/yunikorn-core
YuniKorn[‘ju:nikɔ:n]
是一個虛構的詞,“Y”代表 YARN
,“K”代表 K8s
,“Uni”代表統一,其發音與“Unicorn”相同。創建它是為了最初支持這兩個系統,但最終目的是創建一個可以支持任何容器協調器系統的統一調度程序。一方面在大規模,多租戶環境中有效地實現各種工作負載的細粒度資源共享,另一方面可以動態地創建雲原生環境。YuniKorn
為混合工作負載提供統一的跨平台調度體驗,包括無狀態批處理工作負載和狀態服務,支持但不限於 YARN
和 Kubernetes
。
YuniKorn 的主要模塊

YuniKorn -scheduler-interface
:調度程序接口是資源管理平台(如 YARN / K8s
)將通過諸如 GRPC
/ 編程語言綁定之類的 API
與之交談的抽象層。
YuniKorn Core
:YuniKorn Core
封裝了所有調度算法,它從資源管理平台(如 YARN / K8s
)下面收集資源,並負責資源分配請求。它決定每個請求的最佳部署位置,然后將響應分配發送到資源管理平台。調度程序核心與下層平台無關,所有通信都通過調度程序接口。
Scheduler Shim Layers
:調度程序 Shim
在主機系統內運行(如 YARN / K8s
),它負責通過調度程序接口轉換主機系統資源和資源請求,並將它們發送到調度程序核心。在做出調度程序決策時,它負責實際的 pod / 容器綁定。
Scheduler UI
:調度程序 UI 為已托管的節點,計算資源,應用程序和隊列提供簡單視圖。
YuniKorn 的一些特性
- 調度功能支持批處理作業和長期運行 / 有狀態服務
- 具有最小 / 最大資源配額的分層池 / 隊列
- 隊列,用戶和應用程序之間的資源公平性
- 基於公平性的跨隊列搶占
- 自定義資源類型(如
GPU
)調度支持 - 豐富的編排約束支持
- 根據策略自動將傳入的容器請求映射到隊列
- 對節點使用專用配額 /
ACL
管理將大的集群拆分成若干子群集 - 支持
K8s
謂詞。如 pod 親和 / 反親和,節點選擇器 - 支持持久化存儲,配額申請等
- 從
configmap
動態加載調度程序配置(熱刷新) - 可以在
Kubernetes
之上部署 YuniKorn
Web 支持監視調度程序隊列,資源使用,應用程序等
我們不止一次聽說過XX不是銀彈,沒有一種技術可以解決所有的問題,技術一直在發展。哪怕是在Hadoop
生態圈內,隨着實時數據的處理能力提高,構建實時數倉,打造實時數據處理與計算平台已經比離線任務模式要吃香了。上雲總歸來說是一個大的趨勢,對於大小公司都是如此,畢竟可以節省非常多的成本。但是也不排除雲+本地的混合模式,畢竟數據現在可是金子~。不管怎么說,一直受Hortonworks
和Cloudera
的影響推動着Hadoop
相關組件的進步,基於他們的技術棧學到了很多招式,希望他們可以更好的走下去。
參考資料:
被“圍攻”的 Hadoop 沒有對手
2019 年,Hadoop 還是數據處理的可選方案嗎?
Cloudera 開源新項目:輕量級通用資源調度程序 YuniKorn
歡迎關注我:叄金大數據