萬(wàn)億數(shù)據(jù)下 Hadoop 的核心競(jìng)爭(zhēng)力
1. 前言
在大數(shù)據(jù)時(shí)代,Hadoop 有著得天獨(dú)厚的優(yōu)勢(shì)。然而,每個(gè)企業(yè)的技術(shù)儲(chǔ)備和需求特點(diǎn)不同,他們希望從海量的客戶數(shù)據(jù)中挖掘真正的商業(yè)價(jià)值,像 Google 、Facebook 、Twitter 等這樣的企業(yè)更是 Hadoop 的最早獲益者。那么,今天我們就來聊一聊,萬(wàn)億數(shù)據(jù)下 Hadoop 的核心競(jìng)爭(zhēng)力。
2. 什么是 Hadoop ?
在了解 Hadoop 之前,不得不說的一個(gè)名詞—— “ 大數(shù)據(jù) ” 。大數(shù)據(jù)是時(shí)代發(fā)展和技術(shù)進(jìn)步的產(chǎn)物,大數(shù)據(jù)的特征如下:
- 龐大的數(shù)據(jù)容量
- 結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化的數(shù)據(jù)類型
- 高效的處理速度
- 高質(zhì)量的數(shù)據(jù)

Hadoop 由 Apache 基金會(huì)孵化并開源的分布式系統(tǒng),用戶可以在不了解分布式底層設(shè)計(jì)的情況下,開發(fā)分布式應(yīng)用程序,充分利用集群的優(yōu)勢(shì)來進(jìn)行高速的運(yùn)算和存儲(chǔ)。自從 Hadoop 作為 Apache 基金會(huì)開源項(xiàng)目發(fā)布以來,它一直備受青睞,這得益于 Hadoop 的可擴(kuò)展性、低成本、靈活的處理模式等特點(diǎn)。
3. 萬(wàn)億數(shù)據(jù)下的難點(diǎn)?
數(shù)據(jù)量達(dá)到萬(wàn)億規(guī)模,這已經(jīng)是一個(gè)很龐大的數(shù)據(jù)量了。這里難點(diǎn)我們可以分為兩種情況,一種是原理上不知道怎么處理,沒有具體的實(shí)施方案,這個(gè)屬于技術(shù)難題。另一種,雖然有具體的實(shí)施方案,也明白其中的原理,但是數(shù)據(jù)規(guī)模太過龐大,這個(gè)屬于工程上的難點(diǎn)。
數(shù)據(jù)規(guī)模龐大帶來的難點(diǎn)主要體現(xiàn)在分布式的要求,因?yàn)閱蝹€(gè)節(jié)點(diǎn)不足以在有效的成本和規(guī)定的時(shí)間內(nèi)處理完所有的數(shù)據(jù)。簡(jiǎn)而言之:
- 并行化問題:處理數(shù)據(jù)的應(yīng)用程序要改造成適合并行的方式;
- 資源分配管理問題:如何有效的管理提交任務(wù)的資源,內(nèi)存、網(wǎng)絡(luò)、磁盤等;
- 容錯(cuò)問題:隨著機(jī)器數(shù)量的增加,可靠性如何保證,例如部分機(jī)器硬件出錯(cuò)導(dǎo)致不可用,最終結(jié)果的完整性和正確性如何保證。
4. Hadoop 的組成部分有哪些?能做什么?
截止至本篇文章,Hadoop 社區(qū)發(fā)布了 Hadoop-3.2.0 版本,其核心組成部分包含:基礎(chǔ)公共庫(kù) ( Common ) 、分布式文件存儲(chǔ)系統(tǒng) ( HDFS ) 、分布式計(jì)算框架 ( MapReduce ) 、分布式資源調(diào)度與管理系統(tǒng) ( YARN ) 、分布式對(duì)象存儲(chǔ)框架 ( OZone ) 、機(jī)器學(xué)習(xí)引擎 ( Submarine ) 。

4.1 Hadoop Common
Hadoop Common 屬于基礎(chǔ)公共庫(kù),它是 Hadoop ***層的一個(gè)模塊,為 Hadoop 各個(gè)子項(xiàng)目提供各種工具,例如配置文件、操作日志等。
4.2 Hadoop Distributed File System
Hadoop Distributed File System 簡(jiǎn)稱 HDFS,它是 Hadoop 的一個(gè)分布式文件系統(tǒng),類似于 Amazon 的 S3 系統(tǒng),Google 的 GFS 系統(tǒng)。
HDFS 可以處理分布在集群中的大文件,它通過將文件分成數(shù)據(jù)塊來完成此操作。同時(shí),我們可以并行訪問分布式數(shù)據(jù) ( 例如,在進(jìn)行數(shù)據(jù)處理時(shí) ) ,各個(gè)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互形成數(shù)據(jù)塊的副本。

4.3 Hadoop YARN
YARN 是 Hadoop 的一個(gè)分布式資源管理框架,可以為上層應(yīng)用提供統(tǒng)一的資源管理與調(diào)度。通過引入 YARN,Hadoop 集群在資源利用率、資源統(tǒng)一管理、數(shù)據(jù)共享等方面帶來了巨大的好處。

Client 應(yīng)用提交任務(wù)到 YARN ,流程如下:
- Client 發(fā)送請(qǐng)求給 RM
- ResourceManager ( 簡(jiǎn)稱 RM ) 返回 ApplicationId 給 Client
- Client 發(fā)送 ApplicationId 、QueueName 、用戶等信息給 RM
- RM 尋找合適的 Container ,并將 Client 提交的信息給 NodeManager ( 簡(jiǎn)稱 NM )
- 然后在 NM 中啟動(dòng) AM ,RM 給 AM 分配***最小資源
- AM 從 RM 那里獲取的可使用資源來申請(qǐng)一些 Container
- Job 在 Container 中執(zhí)行,由 AM 返回任務(wù)進(jìn)度,任務(wù)執(zhí)行完成后,AM 向 RM 發(fā)送結(jié)束任務(wù)信息然后退出
4.4 Hadoop MapReduce
MapReduce 是 Hadoop 的一個(gè)分布式計(jì)算框架,用來處理海量數(shù)據(jù)。同時(shí),還可以使用 MapReduce 框架來實(shí)現(xiàn)一些算法,例如統(tǒng)計(jì)單詞頻率、數(shù)據(jù)去重、排序、分組等。
4.5 Hadoop OZone
Ozone 是 Hadoop 的可擴(kuò)展、冗余和分布式對(duì)象存儲(chǔ)。除了擴(kuò)展到數(shù)十億不同大小的對(duì)象外,OZone 還能在 Kubernetes 和 YARN 等容器環(huán)境中有效發(fā)揮作用。
- 可擴(kuò)展性:OZone設(shè)計(jì)之初能夠擴(kuò)展到數(shù)百億個(gè)文件和數(shù)據(jù)塊,并且在將來會(huì)擴(kuò)展到更多;
- 一致性:OZone是一個(gè)強(qiáng)一致性對(duì)象存儲(chǔ),它所使用的協(xié)議是類似于RAFT來實(shí)現(xiàn)的;
- 云集成:OZone設(shè)計(jì)之初能夠與YARN和Kubernetes集成使用;
- 安全性:OZone能夠與Kerberos集成,用于控制訪問權(quán)限,并支持TDE和線上加密;
- 多協(xié)議支持:OZone能夠支持不同的協(xié)議,例如S3、HDFS;
- 高可用:OZone是一個(gè)多副本系統(tǒng),用于保證數(shù)據(jù)高可用性。
4.6 Hadoop Submarine
Submarine 是一個(gè)允許基礎(chǔ)設(shè)施工程師 / 數(shù)據(jù)科學(xué)家在資源管理平臺(tái) ( 如 YARN ) 上運(yùn)行深度學(xué)習(xí)應(yīng)用程序 ( Tensorflow ,Pytorch 等 ) 的項(xiàng)目。
- 在已有集群運(yùn)行:Submarine 支持在 YARN 、Kubernetes 或者其他類似的調(diào)度框架中使用;
- 支持多種框架:Submarine 支持多種機(jī)器學(xué)習(xí)框架,例如 TensorFlow 、Pytorch 、MxNet 等;
- 覆蓋整個(gè)ML:Submarine 不僅僅是一個(gè)機(jī)器學(xué)習(xí)引擎,它涵蓋了整個(gè)機(jī)器學(xué)習(xí)過程,例如算法開發(fā)、模型批量訓(xùn)練、模型增量訓(xùn)練、模型在線服務(wù)和模型管理。
5. Hadoop 的核心競(jìng)爭(zhēng)力在哪?
Hadoop 如此受人喜歡,很大程度上取決于用戶對(duì)大數(shù)據(jù)存儲(chǔ)、管理和分析需求的迫切。大數(shù)據(jù)是目前很多企業(yè)面臨的一個(gè)挑戰(zhàn),由于數(shù)據(jù)量的龐大、數(shù)據(jù)類型的復(fù)雜 ,特別是非結(jié)構(gòu)化或者半結(jié)構(gòu)化的數(shù)據(jù)遠(yuǎn)遠(yuǎn)多于結(jié)構(gòu)化的數(shù)據(jù),一些傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)和分析難以滿足時(shí),且關(guān)系型數(shù)據(jù)庫(kù)巨大成本壓力也是很多企業(yè)考慮的問題,而 Hadoop 給人們提供了解決大數(shù)據(jù)問題的技術(shù)手段。
大數(shù)據(jù)時(shí)代需要 Hadoop ,那么 Hadoop 的核心競(jìng)爭(zhēng)力在哪呢?
5.1 降低大數(shù)據(jù)成本
Hadoop 使企業(yè)可以高效的管理數(shù)據(jù),以降低數(shù)據(jù)成本,其中包含業(yè)務(wù)成本、硬件成本、人工成本、存儲(chǔ)成本等。通過易用性、權(quán)威性、時(shí)效性等特性,Hadoop 還可以幫助用戶增加數(shù)據(jù)價(jià)值。目前 Hadoop 社區(qū)的支持,以及各大 Hadoop 廠商的支持,使得 Hadoop 從一個(gè)單獨(dú)的開源軟件逐步演變成一個(gè)具有一定規(guī)模的生態(tài)系統(tǒng),這些廠商包含 Cloudera 、MapR 、Hortonworks 等,他們?cè)谶@一生態(tài)系統(tǒng)中扮演著不同的角色,例如有系統(tǒng)廠商、監(jiān)控服務(wù)商、數(shù)據(jù)分析商等。
而使用者可以從這些廠商中提供的系統(tǒng)來簡(jiǎn)化 Hadoop 的學(xué)習(xí)成本,快速構(gòu)建符合自身要求的大數(shù)據(jù)平臺(tái),同時(shí)合理利用廠商提供的附屬組件來開發(fā)出高效、易用的的大數(shù)據(jù)應(yīng)用。
5.2 成熟的 Hadoop 生態(tài)圈
Hadoop 不是一個(gè) “ 孤島 ” 系統(tǒng),它擁有成熟的 Hadoop 生態(tài)圈。

利用 Hadoop 生態(tài)圈設(shè)計(jì)滿足自身需求的方案,需要考慮一些關(guān)鍵要素:
- 從需求的最終結(jié)果開始分析,而不是從可用的工具開始。例如,可用性、一致性等;
- 對(duì)數(shù)據(jù)處理時(shí)效性的評(píng)估,例如離線任務(wù) ( MapReduce 、Hive ) 、實(shí)時(shí)任務(wù) ( Flink、Spark Streaming );
- 盡可能使用成熟的方案。
案例一:獲取***一小時(shí)的熱門鏈接
將熱門鏈接集中收集,使用 Flume 將鏈接發(fā)送到 Kafka ,然后使用 Flink 或者 Spark Streaming 計(jì)算引擎在1小時(shí)的窗口內(nèi)分析數(shù)據(jù),***將計(jì)算后的結(jié)果寫入到 HBase 進(jìn)行存儲(chǔ)。

案例二:為用戶推薦電影
這是一個(gè)實(shí)時(shí)場(chǎng)景,用戶喜歡電影,那么用戶應(yīng)立即看到相關(guān)電影。
解決思路:每次用戶給出評(píng)級(jí)時(shí),計(jì)算建議都是包含權(quán)重的,因此我們應(yīng)該定期根據(jù)現(xiàn)有用戶行為計(jì)算建議。根據(jù)對(duì)用戶行為的理解,可以為給定用戶預(yù)測(cè)所有電影的推薦,然后對(duì)其進(jìn)行排序,并過濾用戶已經(jīng)開過的內(nèi)容。
組件選取:數(shù)據(jù)庫(kù)可以使用 NoSQL 數(shù)據(jù)庫(kù),例如 HBase 。來存儲(chǔ)用戶評(píng)級(jí)。計(jì)算引擎方面可以選擇 Flink 或者 Spark ML 通過 Oozie 定時(shí)調(diào)度來重新計(jì)算用戶電影推薦。然后,使用 Flume 和 Spark Streaming 用于流式傳輸和處理實(shí)時(shí)用戶行為。
工作流程:Web 服務(wù)器將用戶評(píng)級(jí)發(fā)送給 Flume ,后者將其傳遞給 Spark Streaming ,然后將結(jié)果保存到 HBase 中。接著,使用 Oozie 定時(shí)調(diào)度執(zhí)行 Spark ML 應(yīng)用來重新計(jì)算電影推薦并將結(jié)果保存到 HBase 中。

6. 是否一定要選擇 Hadoop ?
與傳統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)相比較,開源的 Hadoop 有自己的優(yōu)勢(shì)。尤其是 Hadoop 既能處理關(guān)系型數(shù)據(jù)庫(kù)中的結(jié)構(gòu)化數(shù)據(jù),也能處理視頻、音頻、圖片等非結(jié)構(gòu)化數(shù)據(jù)。并且 Hadoop 還能夠根據(jù)數(shù)據(jù)的規(guī)模和問題的復(fù)雜度輕松的擴(kuò)展。那是不是一定要用 Hadoop ?
每個(gè)企業(yè)都有自己的特殊需求,都有自己的技能棧,如果已經(jīng)購(gòu)買了成熟的數(shù)據(jù)庫(kù)產(chǎn)品,沒有必要舍棄這些產(chǎn)品,要確保對(duì) Hadoop 足夠的了解,不要盲目的 “ 跟風(fēng) ” 。
然而,Hadoop 是解決大數(shù)據(jù)的一種技術(shù)手段,這個(gè)是一個(gè)趨勢(shì),例如 Hadoop 與 AI 、IoT 等領(lǐng)域的結(jié)合使用。了解和掌握 Hadoop 是有所必要的,可以從一些小的項(xiàng)目嘗試積累更多經(jīng)驗(yàn)。

7. 結(jié)束語(yǔ)
這篇文章就和大家分享到這里,如果大家在研究學(xué)習(xí)的過程當(dāng)中有什么問題,可以發(fā)送郵件給我,我會(huì)盡我所能為您解答,與君共勉!
作者介紹:
哥不是小蘿莉,知名博主,著有《 Kafka 并不難學(xué) 》和《 Hadoop 大數(shù)據(jù)挖掘從入門到進(jìn)階實(shí)戰(zhàn) 》。