大數據面試之Hadoop

目錄

介紹下Hadoop

Hadoop的特點

說下Hadoop生態圈組件及其作用

Hadoop主要分哪幾個部分?他們有什么作用?

Hadoop 1.x,2x,3.x的區別

Hadoop集群工作時啟動哪些進程?它們有什么作用?

在集群計算的時候,什么是集群的主要瓶頸

搭建Hadoop集群的xml文件有哪些?

Hadoop的checkpoint流程

Hadoop的默認塊大小是多少?為什么要設置這么大?

Block劃分的原因

Hadoop常見的壓縮算法?

Hadoop作業提交到YARN的流程?

Hadoop的Combiner的作用

Hadoop序列化和反序列化

Hadoop的運行模式

Hadoop小文件處理問題

Hadoop為什么要從2.x升級到3.x?

Hadoop的優缺點

介紹下Hadoop

Hadoop是一個開源的分布式計算框架,最初由Doug Cutting和Mike Cafarella開發,其名稱來源Cutting兒子的一個玩具大象。
Hadoop的核心設計目的是處理和存儲海量數據,特別適用于大數據處理場景,如互聯網搜索、數據挖掘、機器學習等領域。Hadoop項目是Apache軟件基金會旗下的頂級項目之一,它主要由以下幾個核心組件構成:1、Hadoop Distributed File System (HDFS): HDFS是一個高容錯性的分布式文件系統,設計用來在低成本的硬件上運行。它能夠提
供高吞吐量的數據訪問,適合大規模數據集的應用場景。HDFS通過將數據分割成塊,并將這些塊復制到不同的節點上,實現了數據的分布式存
儲,從而提高了數據的可靠性和訪問速度。2、MapReduce: MapReduce是Hadoop的核心計算模型,用于處理和生成大型數據集。它將復雜的運算分解為兩個主要步驟:Map(映射)
和Reduce(歸約)。在Map階段,輸入數據被拆分成多個部分,并對每個部分應用一個映射函數;在Reduce階段,通過歸納和匯總Map階段的
結果,產生最終的輸出。這種分而治之的策略非常適合于大規模并行處理。3、YARN (Yet Another Resource Negotiator): YARN是Hadoop 2.x版本引入的資源管理器,它負責集群資源的管理和調度。YARN
將資源管理與作業調度/監控功能分離,使得Hadoop集群能夠支持多種計算框架,而不僅僅是MapReduce,比如Spark、Flink等,大大增
強了Hadoop生態的靈活性和擴展性。Hadoop的優勢包括高可靠性、高擴展性、高效性以及成本效益,它允許用戶在廉價的硬件設備上構建大型數據中心,處理PB級別的數據。由
于其開源特性,Hadoop吸引了大量的開發者和組織參與貢獻,形成了豐富的生態系統,包括數據倉庫工具(如Hive)、實時處理框架(如
Spark Streaming)、數據集成工具(如Sqoop)等,這些工具進一步增強了Hadoop在大數據處理領域的應用能力。

Hadoop的特點

Hadoop作為一款流行的分布式存儲和處理框架,其特點主要包括以下幾點:1、高可靠性(High Reliability):Hadoop通過在集群內的多個節點上復制數據塊,確保了數據的高可用性。即使某個節點發生故障,系
統也能自動從其他節點恢復數據,保證了數據處理的連續性和完整性。2、高擴展性(High Scalability):Hadoop設計用于在成百上千乃至數萬個節點上運行,能夠輕松地橫向擴展以處理大規模數據集。企業
可以根據需求增加或減少計算節點,實現計算資源的彈性伸縮。3、高效性(High Efficiency):利用MapReduce編程模型,Hadoop可以并行處理大量數據,將計算任務分解到各個節點上,實現數據處
理的高速度。數據本地化策略減少了網絡傳輸的開銷,進一步提升了效率。4、高容錯性(High Fault Tolerance):Hadoop能夠檢測并處理系統中的錯誤,自動重新分配失敗的任務,確保了即使在部分節點失效
的情況下,整體任務仍能順利完成。5、低成本(Low Cost):Hadoop可以在普通硬件上運行,不需要昂貴的專業設備,大大降低了大數據處理的總成本。這對于預算有限的企
業尤其有吸引力。6、多樣化數據處理(Diverse Data Processing):Hadoop支持處理各種類型的數據,包括結構化、半結構化和非結構化數據,適應不
同業務場景的需求。7、開源生態系統(Open-source Ecosystem):圍繞Hadoop形成了一個龐大的開源社區,提供了眾多的工具和框架,如Hive、Pig、
Spark、HBase等,這些工具豐富了Hadoop的應用范圍,促進了技術的持續創新和發展。8、分布式架構(Distributed Architecture):Hadoop的核心是其分布式的存儲和處理架構,能夠有效處理大數據量,實現數據處理性
能的線性擴展。9、多租戶環境(Multi-tenant Environment):Hadoop支持多用戶共享集群資源,每個用戶或應用可以在同一系統中獨立進行數據處
理,而不會相互干擾。這些特點使Hadoop成為大數據處理、數據分析、機器學習等領域的關鍵技術平臺,廣泛應用于互聯網、金融、電信、醫療等多個行業。

說下Hadoop生態圈組件及其作用

Hadoop 生態圈包含了眾多組件,以下是一些常見的組件及其作用:
HDFS(Hadoop 分布式文件系統):用于大規模數據的分布式存儲,具有高容錯性和可擴展性。
MapReduce:一種分布式計算框架,用于大規模數據的并行處理。
YARN(Yet Another Resource Negotiator):資源管理和調度框架,負責管理集群中的資源分配和任務調度。
Hive:基于 Hadoop 的數據倉庫工具,將類 SQL 語句轉換為 MapReduce 任務進行執行。
HBase:分布式、面向列的 NoSQL 數據庫,適用于海量數據的實時讀寫。
Sqoop:用于在 Hadoop 與傳統關系型數據庫之間進行數據遷移。
Flume:分布式的海量日志采集、聚合和傳輸系統。
Kafka:高吞吐量的分布式發布訂閱消息系統,常用于數據緩存和流式處理。
Spark:快速、通用的大數據處理框架,支持內存計算和多種數據源。
Zookeeper:分布式協調服務,用于維護配置信息、命名、提供分布式同步等。
Oozie:工作流調度引擎,用于管理 Hadoop 任務的執行順序和依賴關系。
這些組件相互協作,共同構建了一個強大的大數據處理和存儲生態系統,滿足不同的業務需求和數據處理場景。

Hadoop主要分哪幾個部分?他們有什么作用?

Hadoop 主要分為以下兩個核心部分:Hadoop 分布式文件系統(HDFS):作用:HDFS 用于大規模數據的分布式存儲。它將大文件分割成多個數據塊,并在集群中的多個節點上進行存儲,以實現數據的冗余備份和高
可靠性。HDFS 支持高吞吐量的數據訪問,適用于處理海量數據的存儲需求。MapReduce 計算框架:作用:MapReduce 是一種分布式計算模型,用于處理大規模數據的并行計算。它將計算任務分為 Map 階段和 Reduce 階段。在 Map 階
段,將輸入數據進行并行處理,生成中間結果;在 Reduce 階段,對中間結果進行匯總和合并,得到最終的計算結果。MapReduce 框架能
夠自動處理任務的分配、調度和容錯,使得開發者可以專注于編寫計算邏輯,而無需關心底層的分布式細節。這兩個部分相互配合,HDFS 提供數據存儲支持,MapReduce 提供數據處理能力,共同構成了 Hadoop 處理大數據的基礎架構。

Hadoop 1.x,2x,3.x的區別

Hadoop 1.x:架構相對簡單,主要由 HDFS 和 MapReduce 組成。資源管理和任務調度功能有限。Hadoop 2.x:引入了 YARN(Yet Another Resource Negotiator)框架,實現了資源管理和任務調度的分離。YARN 可以支持多種計算框架,如 
MapReduce、Spark 等在同一個集群上運行。增強了高可用性(HA)機制,提高了系統的穩定性。Hadoop 3.x:對 HDFS 進行了優化,包括糾刪碼(Erasure Coding)的改進,提高了存儲效率。支持更高的擴展性,能夠管理更多的節點和更大的數據
量。性能優化,例如在網絡和 I/O 方面的改進。總體而言,從 1.x 到 3.x 版本,Hadoop 在資源管理、擴展性、性能和存儲效率等方面不斷改進和優化,以適應日益增長的大數據處理需
求。

Hadoop集群工作時啟動哪些進程?它們有什么作用?

Hadoop集群在工作時,會啟動多個關鍵進程來確保其正常運行。以下是主要進程及其作用:NameNode:
作用: NameNode是Hadoop Distributed File System (HDFS)的核心組件,負責管理文件系統的命名空間(namespace)和元數
據。它記錄了文件系統中每個文件的位置信息以及文件的元數據,如文件名、文件大小、文件的權限信息、文件的塊列表等,但并不存儲實際
的數據內容。NameNode還負責協調客戶端對文件的訪問操作。DataNode:
作用: DataNode在HDFS中負責存儲實際的數據塊(blocks)。每個參與HDFS的節點上都會運行一個DataNode守護進程,它根據
NameNode的指令執行數據塊的存儲、檢索以及復制等工作,以確保數據的可靠性和高可用性。Secondary NameNode:
作用: Secondary NameNode并非NameNode的實時備份,而是輔助NameNode進行元數據的管理和維護。它定期與NameNode通信,獲取編
輯日志(edits log)并合并到文件系統鏡像文件中,以此減少NameNode在重啟時的恢復時間,提高系統的穩定性。但請注意,在Hadoop 
2.x及以后版本中,這個角色已經被更先進的Checkpointing機制和Federation特性所改進或替代。ResourceManager (ResourceManager):
作用: 在YARN(Yet Another Resource Negotiator)架構中,ResourceManager負責整個集群的資源管理和調度。它接收來自各個
應用的資源請求,然后基于一定的策略分配集群資源(如CPU、內存)給各個應用的任務。NodeManager:
作用: 每個Hadoop集群的節點上運行著NodeManager,它是YARN架構中的每個節點上的資源和任務管理器。NodeManager負責容器
(Container)的生命周期管理,監控資源使用情況(如CPU、內存),并報告給ResourceManager,同時執行ResourceManager指派的
具體任務。這些進程協同工作,共同支撐起Hadoop集群的大數據存儲與處理能力。隨著Hadoop生態系統的演進,還有更多高級服務和組件(如Hive、
HBase、Spark等)可能在集群中運行,但上述提到的是構成Hadoop基礎架構的核心進程。

在集群計算的時候,什么是集群的主要瓶頸

在集群計算時,確定主要瓶頸可能因具體應用場景、集群配置和工作負載的不同而有所變化。然而,根據常見的觀察和分析,以下幾點經常被
提及為潛在的集群瓶頸:1、磁盤I/O (Input/Output): 磁盤I/O往往是大數據處理場景下的主要瓶頸。當處理大量數據時,數據的讀寫速度直接影響到處理效率。如果磁盤I/O性能不足,即便集群擁有強大的計算能力,也可能因為等待數據讀寫而無法充分發揮效能。2、網絡:在分布式計算環境中,節點間的通信頻繁,網絡帶寬和延遲對數據交換的速度有直接影響。如果網絡成為瓶頸,會導致任務調度、數據傳輸等操作變慢,降低整體計算效率。3、計算資源(CPU、內存):雖然不如磁盤I/O常見,但在高度計算密集型應用中,CPU或內存資源的限制也可能成為瓶頸。當集群處理復雜算法或大規模并行計算任務時,若資源分配不當或總量不足,會限制任務的執行速度。4、存儲容量和速度:存儲不僅是關于I/O速度,還包括存儲容量的問題。數據量的增長可能超出存儲系統的承載能力,導致無法存儲更多的數據或影響數據處理的效率。綜上所述,盡管磁盤I/O通常被視為最常見的瓶頸,但實際上,集群的性能受限因素是多方面的,優化集群性能往往需要綜合考慮以上所有因
素,并根據實際情況調整和優化資源分配、系統架構和應用程序設計。

搭建Hadoop集群的xml文件有哪些?

搭建Hadoop集群時,需要配置幾個關鍵的XML配置文件來定義系統的行為和組件設置。以下是搭建過程中涉及到的主要XML配置文件:core-site.xml: 此文件包含了Hadoop核心配置,如HDFS的默認文件系統URI(fs.defaultFS)、I/O設置、安全配置等。它還可能包括
Hadoop代理用戶設置、日志目錄等。hdfs-site.xml: 專門針對Hadoop Distributed File System (HDFS)的配置文件,包含NameNode和DataNode的配置、副本策略
(如副本數量dfs.replication)、存儲策略、權限控制等。mapred-site.xml: 配置MapReduce作業執行相關的參數,比如指定MapReduce作業的執行框架(通常是YARN)、任務調度器、作業歷史
服務器的地址、任務槽位(slot)的數量、內存和CPU的限制等。yarn-site.xml: 針對YARN(資源管理器)的配置,包括ResourceManager和NodeManager的地址、資源調度策略、容器資源限制、日
志聚合設置等。此外,還有一些其他可能需要配置的文件,盡管它們不是搭建基本集群所必需的,但在特定場景下很重要:hadoop-env.sh: 這是一個環境變量配置腳本,用于設置Hadoop運行所需的環境變量,如JAVA_HOME路徑。yarn-env.sh 和 mapred-env.sh: 分別為YARN和MapReduce設置環境變量的腳本。slaves: 這個文件列出了集群中所有的DataNode或工作節點,便于在執行某些命令(如啟動或停止集群)時指定操作的目標節點。在實際操作中,還需根據具體版本和需求調整這些配置文件,以滿足集群的性能和安全性要求。

Hadoop的checkpoint流程

Hadoop的checkpoint流程主要是為了確保Hadoop分布式文件系統(HDFS)中NameNode的元數據安全性與持久化。以下是簡要的
checkpoint流程說明:元數據管理: NameNode負責存儲文件系統的元數據,包括文件目錄結構、文件屬性等,這些信息默認存儲在內存中,并通過兩種文件形式持
久化到磁盤:fsimage(文件系統鏡像)和edits(編輯日志)。fsimage: 是文件系統元數據的一個永久性檢查點,包含了文件系統中的所有目錄和文件inode的序列化信息。它代表了某個時間點
NameNode內存中元數據的快照狀態。edits: 記錄了自上一次fsimage生成以來,對文件系統所做的所有修改操作(如創建、刪除、重命名文件或目錄)。每當有文件系統操作發
生,這些更改首先被記錄在edits日志中。Secondary NameNode或Checkpoint節點: 在早期版本中,Secondary NameNode負責周期性地幫助NameNode做checkpoint。它從NameNode獲取edits日志和當前的fsimage文件,然后在本地合并這兩個文件:
合并過程: 將fsimage加載到內存,然后應用edits日志中的所有操作,從而生成一個新的、更新的fsimage文件。
回傳fsimage: 完成合并后,新的fsimage會被送回給NameNode,同時舊的edits日志會被清空或歸檔,開始記錄新的變更。
Hadoop 2.x及之后的HA模式: 在引入高可用(HA)模式后,checkpoint過程變得更加自動化且分布。Hadoop使用Checkpointer服務或
者QuorumJournalManager(QJM)等機制來管理元數據的同步與備份,確保NameNode故障時可以快速切換至備用NameNode,且元數據保
持最新。
Checkpoint觸發: Checkpoint的觸發可以是定時的,也可以是當edits日志達到一定大小時自動觸發,以防止edits文件過大導致恢復時
間過長。安全模式: 在checkpoint過程中,NameNode可能會進入安全模式,以避免在元數據更新期間數據不一致的情況。
通過checkpoint流程,Hadoop確保了即使在NameNode發生故障的情況下,也能通過fsimage和edits日志快速恢復元數據,保證數據的
完整性和系統的高可用性。

Hadoop的默認塊大小是多少?為什么要設置這么大?

Hadoop的默認塊大小在Hadoop 2.x及更高版本中通常是128MB,而在Hadoop 1.x版本中則是64MB。這個大小的設定基于以下幾個關鍵因
素:提高磁盤I/O效率:較大的塊大小可以減少磁盤尋址的開銷。在處理大文件時,大塊減少了文件被分割的次數,這意味著系統尋找文件塊起始
位置的時間減少,從而提高了整體的I/O效率。
減少元數據開銷:HDFS的NameNode需要存儲每個文件的元數據,包括其塊信息。更大的塊大小意味著相同數據量下,需要存儲的塊元數據數
量減少,降低了NameNode的內存需求,這對于維護大量小文件的系統尤為重要。
適應大數據處理需求:Hadoop設計初衷是為了高效處理大規模數據集。較大的塊大小能夠更好地匹配大數據處理場景,確保數據讀寫操作的
高效執行。
平衡尋址時間和傳輸時間:理論計算表明,為了使磁盤尋址時間(一般約為10毫秒)僅占數據傳輸時間的1%,基于當時的磁盤傳輸速率(約
100MB/s),理想的塊大小應該約為100MB左右,因此選擇了接近該值的128MB(一個易于計算且對硬件優化友好的2的冪次方數)。綜上所述,128MB的塊大小是在磁盤性能、元數據管理效率以及整體系統吞吐量之間的一個平衡選擇,旨在優化Hadoop在大數據處理任務中
的表現。

Block劃分的原因

Hadoop中Block(數據塊)劃分的主要原因包括以下幾點:1、減少單個文件的大小限制:傳統文件系統中,文件大小受單個磁盤容量限制。Hadoop通過將文件分割成塊,并在多個磁盤和節點上存儲這
些塊,從而突破了單個文件大小的物理限制。這允許Hadoop處理遠超單一磁盤容量的大規模數據集。2、靈活管理資源:Block劃分讓Hadoop能更靈活地管理存儲資源。系統可以根據需要動態地增加或減少某個文件塊的副本數,以應對不同的
存儲需求和處理能力要求,提高了系統的可擴展性和可靠性。3、優化數據分布和并行處理:將文件劃分為Block后,這些Block可以在集群的多個節點上并行處理,充分利用集群的計算資源。
MapReduce作業可以針對每個Block獨立進行計算,從而加速整個數據處理過程。4、容錯與恢復:每個Block存儲多個副本(默認為3份),分布在不同的節點上。這樣即使個別節點出現故障,數據也不會丟失,系統可以從
其他副本快速恢復數據,保證了數據的高可用性。5、提升數據讀寫性能:較大的Block大小可以減少尋址開銷,提高I/O效率。在大數據處理場景下,較大的Block有助于減少磁盤尋道時間的
比例,使得數據傳輸成為主要的時間消耗,從而整體上提高了處理速度。綜上,Block劃分機制是Hadoop分布式文件系統(HDFS)設計的核心之一,它不僅解決了大數據存儲和處理的技術挑戰,還確保了系統的高
效性、可擴展性和可靠性。

Hadoop常見的壓縮算法?

Hadoop中常見的壓縮算法包括以下幾種,這些算法在優化存儲空間和提升數據傳輸效率方面發揮著重要作用:Gzip: 提供了一個相對平衡的壓縮比率和壓縮/解壓速度。Gzip是Hadoop本身支持的,可以有效壓縮大文件,但壓縮率相比其他一些算法較
低。Gzip格式的文件可以直接在Hadoop中使用,無需額外安裝。Bzip2: 相對于Gzip,Bzip2提供了更高的壓縮率,特別適合需要高壓縮率的應用場景。然而,它的壓縮和解壓速度較慢,并且需要更多的
CPU資源。Bzip2支持數據塊分割(split),在Linux系統中使用廣泛,操作便捷。Lzo: Lzo是一種快速壓縮算法,壓縮/解壓速度快,壓縮率適中,并且支持數據塊分割,非常適合Hadoop的讀寫操作。需要注意的是,
Hadoop本身并不直接支持Lzo,需要單獨安裝Lzo庫和Hadoop-Lzo庫。Snappy: 設計用于實現高速壓縮和解壓,特別強調壓縮速度而非高壓縮率。Snappy非常適合用在需要頻繁讀寫的場景,比如作為
MapReduce任務的中間結果壓縮。同樣,Hadoop本身不直接支持Snappy,需要額外安裝相關庫。Deflate: Deflate是一種結合了LZ77編碼和霍夫曼編碼的無損壓縮算法,提供了較好的壓縮率,同時保持較快的壓縮速度。Hadoop支持
Deflate壓縮,通過org.apache.hadoop.io.compress.DeflateCodec實現。LZ4: 雖然在上述信息中未直接提及,但LZ4是一種新興的高速壓縮算法,以其極高的解壓速度和不錯的壓縮率而受到關注,適用于對解壓速
度有嚴格要求的場景。在較新的Hadoop版本和應用中,LZ4逐漸成為一種受歡迎的選擇。選擇合適的壓縮算法需根據具體的應用場景、對壓縮率的需求、以及對處理速度的考量來決定。

Hadoop作業提交到YARN的流程?

Hadoop作業提交到YARN的流程大致可以分為以下幾個步驟:1、作業提交:
客戶端程序(如MapReduce作業)調用API(如job.waitForCompletion(true))向YARN集群提交作業。
YARN客戶端會與ResourceManager(RM)通信,請求提交作業。2、資源申請:
ResourceManager驗證作業請求,并分配一個唯一的作業ID。
RM返回給客戶端一個資源提交路徑和作業ID。
客戶端將作業相關的資源(包括jar包、配置文件、切片信息等)上傳到HDFS的指定目錄。3、Application Master啟動:
客戶端使用作業ID和資源路徑向ResourceManager申請啟動Application Master(AM)。
ResourceManager為AM分配容器(Container),并通過NodeManager(NM)在特定節點上啟動AM。4、任務調度與執行:
AM向ResourceManager注冊,然后開始與ResourceManager和NodeManagers交互,以獲取作業執行所需的資源。
AM向ResourceManager申請容器以運行Map和Reduce任務。5、Scheduler根據資源情況將任務分配給NodeManagers。
NodeManagers接收任務請求,在各自的容器中啟動YARN Child進程,執行Map或Reduce任務。
Map任務從HDFS讀取數據,進行處理后,輸出中間結果到本地磁盤,然后通知AM。
Reduce任務從Map任務的輸出中讀取數據,進行匯總處理,并將最終結果寫回到HDFS。6、作業監控與完成:
Application Master持續監控任務的執行狀態,如果發現失敗的任務,會重新請求資源執行失敗任務。
當所有任務完成,AM向ResourceManager報告作業完成,并清理資源。7、ResourceManager標記作業完成,并釋放所有關聯資源。8、結果收集:
客戶端可以通過查詢ResourceManager或直接與Application Master通信來獲取作業的狀態和結果。這個流程概括了從客戶端作業提交到YARN,到作業執行完畢的全過程,涉及到了ResourceManager、NodeManager、Application 
Master等關鍵組件之間的協作。

Hadoop的Combiner的作用

Hadoop中Combiner的作用主要體現在以下幾個方面:1、減少網絡傳輸量:Combiner在Map階段輸出結果傳給Reducer之前,對具有相同鍵的鍵值對進行局部聚合。通過這種預處理,可以顯著減
少從各個Map任務傳輸到Reducer的數據量,從而減輕網絡帶寬壓力,提高整體作業的執行效率。2、優化性能:由于減少了數據傳輸,Combiner有助于降低網絡延遲,加快處理速度,尤其是在處理大型數據集時效果更為明顯。它作為一種
本地的“mini-reduce”操作,可以在數據到達Reducer之前對其進行部分減少操作。3、減少Reducer負擔:通過在Map端先進行聚合,Combiner能夠減少Reducer處理的數據量,從而減少Reducer端的計算負擔,使得作業
能夠更快完成。4、可選性和靈活性:Combiner是MapReduce框架中的一個可選組件,是否使用Combiner取決于具體的應用場景。只有當聚合操作符合“結
合律”和“交換律”(即操作順序不影響結果)時,才應考慮使用Combiner。5、提高資源利用率:通過減少數據傳輸和處理時間,Combiner有助于提升集群內資源的使用效率,使得更多資源可用于處理其他任務,提高
了整體集群的吞吐量。盡管Combiner帶來諸多好處,但在設計時需謹慎,確保其不會影響最終的計算結果正確性,且不會因在Map端過早聚合而導致數據丟失或錯
誤計算。正確的使用場景通常涉及到可疊加或可聚合的操作,如求和、平均值計算、計數等。

Hadoop序列化和反序列化

Hadoop序列化和反序列化是Hadoop框架中處理數據存儲和傳輸的關鍵機制,它們在分布式計算環境中扮演著至關重要的角色。以下是關于
Hadoop序列化和反序列化的概要說明:Hadoop序列化序列化是將內存中的Java對象轉換為字節流的過程,這樣做的目的是便于數據的存儲(如存入HDFS)和網絡傳輸(例如,MapReduce作業間
的通信)。Hadoop提供了一套自己的序列化機制,稱為Writable接口,它比Java原生的Serializable接口更加高效和輕量級。實現
Writable接口的類需要自定義序列化和反序列化的方法:write(DataOutput out)用于序列化,readFields(DataInput in)用于反
序列化。Hadoop的序列化機制避免了Java序列化中包含的額外元數據(如校驗信息、頭信息和繼承結構),從而減少了傳輸的數據量,提高
了網絡傳輸效率和存儲效率。Hadoop反序列化反序列化是序列化的逆過程,即將接收到的字節流或從存儲介質(如HDFS)讀取的數據轉換回原來的Java對象。這一過程發生在數據被讀取
出來準備在內存中使用的時候,例如,MapReduce任務讀取輸入數據時。通過調用實現了Writable接口的對象的readFields(DataInput 
in)方法,Hadoop能夠從字節流中重建原始的Java對象,確保數據的正確性和完整性。為什么使用Hadoop序列化機制效率:Hadoop的序列化機制設計得更加緊湊、快速,適合大數據環境下的高效數據處理。
可控性:開發者可以精確控制哪些屬性需要序列化,避免不必要的數據傳輸。
資源節約:減少網絡帶寬占用,降低存儲開銷,特別是在大規模數據處理場景中尤為重要。
兼容性與擴展性:自定義序列化方式提供了更好的靈活性,適應Hadoop生態系統中多樣化的數據處理需求。總之,Hadoop序列化和反序列化機制是其處理大數據時不可或缺的一部分,通過高效地處理對象的轉化,支撐起整個分布式計算框架的高效
數據流轉。

Hadoop的運行模式

Hadoop提供了三種主要的運行模式,以適應不同規模和復雜度的計算需求。這三種模式分別是:本地模式(Standalone/Local Mode):在本地模式下,Hadoop的所有進程(如MapReduce任務)都運行在單個JVM上,不涉及分布式計算和存儲。此模式不啟動任何守護進程,通
常用于開發、測試和學習目的,因為它便于調試和快速迭代。它不使用HDFS,而是直接操作本地文件系統。偽分布式模式(Pseudo-Distributed Mode):偽分布式模式模擬了一個分布式環境,雖然實際上仍在單臺機器上運行,但Hadoop的各個守護進程(如NameNode、DataNode、
ResourceManager、NodeManager等)分別作為獨立的Java進程運行。數據存儲在本地的HDFS實例上,這樣可以測試和驗證Hadoop的分
布式特性,而不需要一個完整的集群。它是開發和測試分布式程序的理想環境。完全分布式模式(Fully-Distributed Mode):在完全分布式模式下,Hadoop運行在一個由多臺機器組成的集群上。每個節點可能運行著Hadoop的不同守護進程,如一部分節點作為
NameNode和ResourceManager(有時會有備用節點),其他節點作為DataNode和NodeManager。這種模式為大規模數據處理提供了高度
的可擴展性和容錯性,是企業級應用的標準部署方式。數據被分散存儲在集群中各節點的HDFS上,而計算任務則被分配到各個節點上并行執
行。每種模式各有其應用場景,用戶可根據實際需求和資源條件選擇合適的運行模式。

Hadoop小文件處理問題

Hadoop在處理大量小文件時面臨一些挑戰,這些問題主要源于其設計初衷是面向大規模數據集的批處理,對于小文件的處理效率不高。具體
來說,小文件問題主要體現在以下幾個方面:名稱節點(NameNode)內存壓力:
Hadoop的HDFS架構中,名稱節點存儲著文件系統的元數據,包括文件的名稱、位置、權限等信息。每一個文件和目錄都會占用一定的元數據
空間。當系統中存在大量小文件時,名稱節點需要管理的元數據數量激增,可能導致其內存壓力增大,甚至超出其承受能力。文件尋址開銷增加:
大量小文件意味著文件索引和尋址操作變得更加頻繁,這會增加查找文件所需的時間,降低系統整體的I/O效率。MapReduce任務啟動開銷:
對于MapReduce作業而言,每個任務啟動時都有固定的初始化開銷。如果每個小文件都需要觸發一個單獨的Map任務,這些開銷相加起來會變
得非常顯著,導致處理效率低下。資源分配不均:
小文件過多可能會導致任務調度不均衡,因為Hadoop傾向于將數據分布到各個節點上以實現負載均衡,小文件過多可能導致數據分布不均
勻,有的節點任務繁重,而有的節點空閑。為解決小文件問題,可以采取以下策略:文件合并:將多個小文件合并成大文件,減少文件總數,降低名稱節點的元數據管理壓力。
使用Har(Hadoop Archive)工具:Har工具可以將多個小文件打包成一個HAR文件,對外仍表現為單個文件,從而減少名稱節點的元數據
條目。Har文件內部仍然是可分割的,支持MapReduce直接處理。
SequenceFile或MapFile:使用Hadoop的SequenceFile或MapFile格式存儲小文件,這兩種格式都是將多個鍵值對存儲在一起,減少文
件數量的同時還支持高效的隨機訪問。
Block Size調整:適當增加HDFS的Block Size,使得每個Block能容納更多小文件,減少文件塊的數量。
使用Hadoop的CombinedInputFormat:這個類可以將多個小文件作為單個輸入分片(split)處理,減少Map任務的數量,進而減少任務
調度開銷。通過上述策略的綜合應用,可以在一定程度上緩解Hadoop在處理大量小文件時遇到的性能瓶頸。

Hadoop為什么要從2.x升級到3.x?

Hadoop 從 2.x 升級到 3.x 主要有以下幾個原因:1、性能優化:
改進了網絡 I/O 和磁盤 I/O 的性能,提高了數據處理的效率。
優化了內存使用和任務調度,提升了整個系統的運行性能。2、存儲效率提升:
增強了糾刪碼(Erasure Coding)的支持,相比傳統的副本機制,能夠在保證數據可靠性的同時節省更多的存儲空間。3、擴展性增強:
支持更多的節點和更大規模的集群,能夠處理更海量的數據。4、兼容性和安全性改進:
修復了一些已知的漏洞,提高了系統的安全性。
增強了與其他新技術和工具的兼容性。5、功能增強:
增加了一些新的特性和功能,以滿足不斷變化的大數據處理需求。綜上所述,升級到 Hadoop 3.x 版本可以使 Hadoop 系統更高效、更可靠、更具擴展性,并能更好地適應大數據領域的發展和變化。

Hadoop的優缺點

Hadoop的優點:1、高可靠性:Hadoop設計了分布式文件系統HDFS,能夠自動維護數據的多個副本,即使個別節點發生故障,也能保證數據不丟失,繼續提
供服務。
2、高擴展性:Hadoop能夠在由普通硬件組成的集群上運行,可以輕松擴展到數千甚至上萬個節點,隨著硬件的增加,系統的整體處理能力呈
線性增長。
3、高效性:基于MapReduce編程模型,Hadoop能夠并行處理大量數據,加速數據處理任務,提高處理效率。
4、高容錯性:Hadoop具有自動故障檢測和恢復機制,當任務或節點失敗時,系統能夠自動重新分配任務,確保任務完成。
5、低成本:作為開源軟件,Hadoop免除了昂貴的許可費用,且能夠運行在低成本的通用硬件上,大幅降低了大數據處理的總成本。生態豐富:Hadoop不僅僅是一個存儲或計算框架,它形成了一個龐大的生態系統,包括Hive、HBase、Pig、Spark等多個組件,提供了從
數據存儲、處理到分析的一整套解決方案。Hadoop的缺點:1、延遲問題:Hadoop設計為批量處理框架,對于實時數據處理和低延遲查詢需求支持不足,不適合實時數據分析應用。
2、資源管理單一:早期的Hadoop版本中,資源管理與作業調度耦合在一塊,導致資源利用效率不高,雖然YARN的引入改善了這一狀況,但
與專為實時處理設計的系統相比仍有差距。
3、復雜性:Hadoop的配置和管理較為復雜,需要一定的技術知識,對初學者不夠友好。
4、磁盤IO瓶頸:由于Hadoop大量依賴磁盤進行數據讀寫,當處理大量小文件時,磁盤I/O可能成為性能瓶頸。
5、單點故障:雖然數據存儲層面設計了高容錯性,但NameNode的單點故障問題(雖然可通過設置備NameNode緩解)一直是Hadoop的一個
潛在風險點。綜上所述,Hadoop作為大數據處理領域的基石,其強大的數據處理能力得到了廣泛認可,但同時也面臨著一些挑戰,特別是對于實時性和易
用性的要求日益增長的今天。

引用:https://www.nowcoder.com/discuss/353159520220291072

通義千問、文心一言、豆包

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36972.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用英文介紹美國總統Trump: Donald J. Trump Twice Impeached (2017 – 2021)

Donald J. Trump: Twice Impeached (2017 – 2021) Link: https://www.youtube.com/watch?vJ7RC2DKf6rs&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index45 Summary Summary of Donald Trump’s Rise and Presidency Donald John Trump, originally from Queens, Ne…

網頁中如何接入高德地圖【靜態地圖篇】

接入高德地圖 登錄高德開放平臺創建應用添加key創建靜態地圖文檔說明markers 網頁應用總結 登錄高德開放平臺 高德開放平臺 創建應用 點擊我的應用 -> 創建應用 添加key 調相關接口都需要用到這個key! 創建靜態地圖 靜態地圖API文檔 文檔說明 服務地址…

基于上一篇博客,用阻塞隊列實現異步下單

在上一篇博客中,我們介紹了如何利用 Redis 和 Lua 腳本來高效處理秒殺活動中的高并發請求,保證用戶體驗。本文將進一步優化秒殺系統,通過引入阻塞隊列實現異步下單,從而提高系統的整體性能和穩定性。 引言 秒殺活動往往伴隨著極…

ArmSoM-Sige7/5/1 和樹莓派5規格比較

引言 在當今快速發展的嵌入式系統領域,選擇一款性能強大、功能豐富的開發板對于項目的成功至關重要。本文將介紹并比較 Sige7、Sige5、Raspberry Pi 5 和 Sige1 這四款開發板的關鍵規格和特性,幫助開發者和愛好者選擇最適合其需求的平臺。 ArmSoM-Sige…

使用模板方法設計模式封裝 socket 套接字并實現Tcp服務器和客戶端 簡單工廠模式設計

文章目錄 使用模板方法設計模式封裝套接字使用封裝后的套接字實現Tcp服務器和客戶端實現Tcp服務器實現Tcp客戶端 工廠模式 使用模板方法設計模式封裝套接字 可以使用模塊方法設計模式來設計套接字 socket 的封裝 模板方法(Template Method)設計模式是一…

【深度學習】深度學習基礎

李宏毅深度學習筆記 局部極小值與鞍點 鞍點其實就是梯度是零且區別于局部極小值和局部極大值的點。 鞍點的叫法是因為其形狀像馬鞍。鞍點的梯度為零,但它不是局部極小值。我們把梯度為零的點統稱為臨界點(critical point)。損失沒有辦法再下…

使用Flink CDC實現 Oracle數據庫數據同步(非SQL)

文章目錄 前言一、開啟歸檔日志二、創建flinkcdc專屬用戶2.1 對于Oracle 非CDB數據庫,執行如下sql2.2 對于Oracle CDB數據庫,執行如下sql 三、指定oracle表、庫級啟用四、使用flink-connector-oracle-cdc實現數據庫同步4.1 引入pom依賴4.1 Java主代碼4.1…

Docker Desktop 簡易操作指南 (Windows, macOS, Linux)

1. 下載最新版本 Docker Desktop https://www.docker.com/products/docker-desktop/ 2.啟動 Docker Desktop 3.常用命令(在 cmd 或 Terminal 中執行) #列出所有鏡像(Images) docker images #列出所有容器(Containers&…

OpenSSL/3.3.0: error:0A00018A:SSL routines::dh key too small

php curl解決辦法: curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ‘DEFAULTSECLEVEL1’); python 解決辦法: from twisted.internet.ssl import AcceptableCiphers from scrapy.core.downloader import contextfactory contextfactory.DEFAULT_CIPHERS AcceptableCiphers.from…

CSS 核心知識點 - grid

思維導圖 參考網址: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_grid_layout 一、什么是 grid? CSS Grid布局是在CSS3規范中引入的一種新的布局方式,旨在解決傳統布局方法(如浮動、定位、表格布局)存在的許多問題。C…

Spring Boot 集成 MyBatis-Plus 總結

Spring Boot 集成 MyBatis-Plus 總結 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在Java開發中,Spring Boot以其簡潔和高效的特點,…

Oh My Zsh Git 插件

以下是一些常見的別名和它們對應的 Git 命令: g: gitga: git addgaa: git add --allgapa: git add --patchgau: git add --updategb: git branchgba: git branch -agbd: git branch -dgbda: git branch --no-color --merged | command grep -vE “^(||*|\s*(main|m…

第十九站:Java鈦藍——區塊鏈技術的新探索

在區塊鏈技術的新探索中,Java作為一門成熟的編程語言,正在通過Hyperledger Fabric和Web3j等技術實現其在區塊鏈領域的應用。以下是對這些技術的簡要介紹和如何使用Java源代碼與它們進行交互的講解。 Hyperledger Fabric Hyperledger Fabric是一個由Lin…

React.js 全面解析:從基礎到實戰案例

引言: React.js,由Facebook推出并維護的開源JavaScript庫,以其組件化思想、虛擬DOM技術和聲明式編程風格,成為構建用戶界面的首選工具之一。本文將系統性地介紹React的基礎概念、核心特性,并通過實際案例展示基礎屬性…

DataWhale-吃瓜教程學習筆記(四)

學習視頻:第3章-二分類線性判別分析_嗶哩嗶哩_bilibili 西瓜書對應章節: 3.4 文章目錄 - 算法原理- 損失函數推導-- 異類樣本中心盡可能遠-- 同類樣本方差盡可能小-- 綜合 知識點補充 - 二范數二范數(2-norm)詳解定義幾何意義性質…

vue3中省市區聯動在同一個el-form-item中咋么設置rules驗證都不為空的效果

在開發中出現如下情況&#xff0c;在同一個el-form-item設置了省市區三級聯動的效果 <el-form-item label"地區" prop"extraProperties.Province"><el-row :gutter"20"><el-col :span"12"><el-select v-model&qu…

OpenHarmony開發實戰:HDF驅動開發流程

概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驅動框架&#xff0c;為驅動開發者提供驅動框架能力&#xff0c;包括驅動加載、驅動服務管理、驅動消息機制和配置管理。并以組件化驅動模型作為核心設計思路&#xff0c;讓驅動開發和部署更加規范&#xff0c;旨在…

Unity3D Excel表格數據處理模塊詳解

一、引言 在Unity3D開發中&#xff0c;我們經常需要處理大量的數據&#xff0c;這些數據可能是游戲配置、角色屬性、道具信息等。Excel表格作為一種常見的數據存儲方式&#xff0c;具有結構清晰、易于編輯的特點&#xff0c;因此被廣泛應用于游戲開發中。本文將詳細介紹如何在…

四川赤橙宏海商務信息咨詢有限公司抖音開店靠譜嗎?

在數字化浪潮席卷全球的今天&#xff0c;電商行業正以前所未有的速度發展。而在這個大潮中&#xff0c;四川赤橙宏海商務信息咨詢有限公司憑借其專業的團隊和前瞻性的戰略眼光&#xff0c;專注于抖音電商服務&#xff0c;為廣大商家提供了一站式解決方案&#xff0c;成為了行業…

面經-常用框架

1.Spring 1.1什么是Spring框架&#xff1f; Spring 是?種輕量級開發框架&#xff0c;旨在提?開發?員的開發效率以及系統的可維護性。 Spring 的 6 個特征:核?技術&#xff0c;測試&#xff0c;數據訪問&#xff0c;Web?持&#xff0c;集成&#xff0c;語? 1.2列舉?些重…