Hadoop 在全球資訊網的早期階段就奠定了起點。隨著網頁從數百萬頁增加到數十億頁,不斷成長,搜尋與傳回搜尋結果的任務成為其中一項最重大的挑戰。Google、Yahoo 和 AltaVista 等新創公司紛紛開始建立架構,讓系統自動顯示搜尋結果。名為 Nutch 的專案,是由電腦科學家 Doug Cutting 和 Mike Cafarella 根據 Google 在 MapReduce (稍後會說明) 和 Google 檔案系統中的早期工作所建立。Nutch 最終轉移為 Apache 開放原始碼軟體的基礎,並分成 Nutch 和 Hadoop。Cutting 於 2006 年開始在 Yahoo 工作,開放原始碼的 Hadoop 則是從 2008 年開始。
雖然 Hadoop 有時被稱為是「高可用性分散式物件導向平台」的縮寫,但其實它原本是以 Cutting 的兒子的玩具大象命名。
Hadoop 是以 Java 為基礎的開放原始碼架構,用於管理應用程式的大量資料儲存和處理作業。Hadoop 使用分散式儲存空間和平行處理功能來處理大數據和分析工作,將工作負載細分為可同時執行的小型工作負載。
Hadoop 的主要架構由四個模組組成,這些模組可在 Hadoop 生態系統中發揮相得益彰的效果:
Hadoop 分散式檔案系統 (HDFS):HDFS 是 Hadoop 生態系統的主要元件,用來處理個別 Hadoop 節點在本機儲存空間中的資料。這會解決網路延遲的問題,讓應用程式能以高處理量存取資料。此外,系統管理員不需要事先定義結構定義。
Yet Another Resource Negotiator (YARN):YARN 是資源管理平台,負責管理叢集中的運算資源,並使用這些資源為使用者的應用程式排程。這個平台會在整個 Hadoop 系統中執行排程和資源分配。
MapReduce:MapReduce 是用於大規模資料處理的程式設計模型。在 MapReduce 模型中,大型資料集的子集以及子集的處理指示會分派到多個不同的節點,其中每個子集都會由節點與其他處理工作同時並行處理。處理結果後,系統會將個別子集合併為一個較小、更方便管理的資料集。
Hadoop Common:Hadoop Common 包括其他 Hadoop 模組使用和共享的程式庫和公用程式。
除了 HDFS、YARN 和 MapReduce,整個 Hadoop 開放原始碼生態系統會持續擴充,不斷納入許多工具和應用程式,以協助收集、儲存、處理、分析和管理大數據,其中包括 Apache Pig、Apache Hive、Apache HBase、Apache Spark、Presto 和 Apache Zeppelin。
Hadoop 允許在商用硬體叢集內分配資料集。處理作業會同時在多個伺服器上並行執行。
軟體用戶端將資料輸入至 Hadoop。HDFS 會處理中繼資料和分散式檔案系統,然後 MapReduce 會處理並轉換資料。最後,YARN 會將工作分配給各個運算叢集。
所有 Hadoop 模組在設計時都有以下基本假設:個別機器或整個機架的機器發生硬體故障在所難免,因此應由架構用軟體自動處理這些故障。
擴充性
Hadoop 是快速儲存及處理大量資料的主要工具之一。其方法是使用分散式運算模型,加快資料處理速度,並藉由增加運算節點來快速調度資源。
成本低廉
做為一種可在商用硬體上運作的開放原始碼架構,Hadoop 具備龐大的工具生態系統,對於大數據的儲存和管理而言,是個成本低廉的選擇。
彈性
Hadoop 提供彈性的資料儲存空間,因為在儲存資料前不需要預先處理,也就是說,機構可以隨意儲存大量資料,以供日後使用。
營運韌性
Hadoop 做為分散式運算模型,提供容錯和系統彈性,也就是說,如果其中一個硬體節點故障,工作會重新導向至其他節點。儲存在 Hadoop 叢集的資料會在系統內其他節點之間複製,以抵禦硬體或軟體故障的可能性。
MapReduce 是檔案密集型的系統,因此難以在處理互動式分析工作等複雜工作時使用。MapReduce 的函式也必須以 Java 編寫,而且學習起來可能很不容易。MapReduce 生態系統相當龐大,包含不同函式的眾多元件,可能會導致難以判斷該用哪個工具。
在 Hadoop 處理這類大型資料集時,資料的敏感性與保護可能會成為問題。我們已打造出一套驗證、加密、稽核及佈建工具的生態系統,協助開發人員保護 Hadoop 中的資料。
Hadoop 並不具備許多強大的資料管理與統轄工具,也沒有用於資料品質和標準化的完善工具。
如同許多程式設計領域,Hadoop 存在有公認的人才缺口。要尋找合併了 Java 方面之必要技能的開發人員來設計 MapReduce、作業系統和硬體,並不容易。此外,MapReduce 不易學習的特性讓新的程式設計師難以快速掌握其最佳做法和生態系統。
研究公司 IDC 估計,2020 年創造或複製了 62.4 ZB 的資料,而這些是來自物聯網、社群媒體、邊緣運算和建立於雲端的資料。該公司預測,從 2020 年到 2025 年的資料成長幅度預計為每年 23%。雖然並非所有資料都會儲存下來 (有些在使用後被刪除或覆寫),但全球的資料需求仍在持續增長。
Hadoop 具有龐大的開放原始碼工具生態系統,可增強及擴充核心模組的功能。與 Hadoop 搭配使用的主要軟體工具包括:
Apache Hive: 這個資料倉儲可讓程式設計師使用名為 HiveQL 的查詢語言 (與 SQL 類似) 處理 HDFS 中的資料
Apache HBase:經常與 Hadoop 搭配的開放原始碼非關聯分散式資料庫
Apache Pig:這是個可在 MapReduce 上做為抽象層使用的工具,可用來分析大型資料集,並支援篩選、排序、載入和彙整等功能
Apache Impala:為開放原始碼、大量平行處理的 SQL 查詢引擎,經常與 Hadoop 搭配使用
Apache Sqoop:一款指令列介面應用程式,可在關聯資料庫和 Hadoop 之間有效率地轉移大量資料
Apache ZooKeeper:在 Hadoop 中提供可靠的分散式協調的開放原始碼伺服器;提供「維護設定資訊、命名、提供分散式同步處理及提供群組服務」的服務
Apache Oozie:Hadoop 工作的工作流程排程器
以下是一些常見的 Apache Hadoop 用途:
數據分析與大數據
各種不同類型的公司和機構將 Hadoop 運用於研究、處理實際工作環境中的資料和分析數據,這些應用需要處理從 TB 到 PB 不等的龐大資料量、儲存各式各樣的資料集,還有平行處理資料能力。
資料儲存與封存
Hadoop 可以在商用硬體上大量儲存,因此這個工具適合做為低成本的儲存選擇,用來儲存如交易、點擊流,或感應器與機器資料等各種資料。
資料湖泊
由於 Hadoop 不必預先處理就能儲存資料,因此可以與儲存了大量未經修正之資料的資料湖泊相輔相成。
行銷數據分析
行銷部門經常使用 Hadoop 來儲存及分析客戶關係管理 (CRM) 資料。
風險管理
銀行、保險公司和其他金融服務公司都使用 Hadoop 建立風險分析和管理模型。
AI 與機器學習
Hadoop 生態系統有助於處理機器學習應用程式的資料和模型訓練作業。