Hadoop 基礎原理

Hadoop 基礎原理

  • 基本介紹
    • Hadoop 的必要性
    • Hadoop 核心組件
    • Hadoop 生態系統中的附加組件
  • HDFS
    • HDFS 集群架構
    • HDFS 讀寫流程
      • HDFS 寫流程
      • HDFS 讀流程
    • NameNode 持久化機制
  • MapReduce
    • 底層原理
    • 示例

Hadoop 是一個由 Apache 基金會開發的分布式系統基礎架構,主要解決海量數據的存儲和計算問題,廣義上 Hadoop 指的是 Hadoop 生態圈,包含 HDFS、Hive、MapReduce 多種組件

基本介紹

Hadoop 的必要性

Hadoop 主要解決了海量數據的存儲問題

  • 高可用性:底層會維護多個數據副本,所以即使 Hadoop 某個計算元素或存儲出現故障,也不會導致數據的丟失。
  • 高擴展性: 在集群間分配任務數據,可方便的擴展數以千計的節點。
  • 高效性: 在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任務處理速度。
  • 高容錯性: 能夠自動將失敗的任務重新分配。

一個 block 塊在 NameNode 中占150byte(固定),過多小文件會占用 NameNode 內存
小文件的尋址時間大于讀取時間
不支持并發寫和隨機寫
一個文件只能有一個寫,不允許多線程同時寫

Hadoop 核心組件

Hadoop 核心組件包含以下兩種

  • HDFS:高可靠、高吞吐的分布式文件系統
  • MapReduce:分布式離線并行計算框架

Hadoop 生態系統中的附加組件

我們后端開發接觸的比較多的是Hadoop 生態系統中的附加組件,Sqoop 以及 Hive,分別用來同步數據和查詢數據

  • Sqoop:Hadoop(Hive)與傳統數據庫(Mysql)之間傳輸數據的工具,支持批量導入和導出數據
    Flume 高可用、高可靠分布式的海量日志采集、聚合和傳輸系統
  • Spark:是一個通用的分布式計算框架,支持內存計算,可以顯著提高數據處理速度。它支持多種計算模式,包括批處理、流處理、機器學習等
  • HBase:HBase 是一個分布式的、面向列的 NoSQL 數據庫,建立在 HDFS 之上。它提供了實時讀寫訪問,適合處理大規模數據集
  • Hive:是基于 Hadoop 的數據倉庫工具,它提供了一種 SQL-like 的查詢語言(HiveQL),使用戶可以方便地進行數據查詢和分析。它可以將 HiveQL 轉換為 MapReduce 任務執行

HDFS

HDFS 是 Hadoop 的分布式文件系統,解決了海量數據的存儲問題

HDFS 集群架構

HDFS 使用 Master/Slave 架構,架構邏輯比較類似 Kafka、ES 等 Apache 的其他項目

一般一個集群有一個 NameNode 和一定數目 DataNode 組成,Namenode 是 HDFS 集群主節點,Datanode 是 HDFS 集群從節點,兩種角色各司其職,共同協調完成分布式的文件存儲服務

HDFS 中文件在物理上是分塊存儲,通過 dfs.blocksize 配置,2.x之后的版本默認128M

HDFS 中文件在邏輯上是連續的,提供一個文件目錄樹

HDFS 讀寫流程

HDFS 寫流程

1,客戶端向 NameNode 發送寫數據請求(包含待上傳文件名和將要上傳的路徑)
2,NameNode 檢查路徑是否存在,文件是否重名等(假設滿足上傳條件)
3,NameNode 向客戶端響應數據,可以上傳文件
4,客戶端根據文件大小進行切分成一個個 block 塊,并向 NameNode 發送提交即將上傳 block1 的請求
5,NameNode 查詢 DataNode 信息,規劃 block1 的存儲位置
6,NameNode 向客戶端返回 block1 可以存儲的數據節點 ip 列表
7,客戶端直接請求數據節點1上傳 block1,數據節點1存儲 block1 完畢并根據 ip 列表將 block1 發送給數據節點8,數據節點2存儲完畢 block1 并根據 ip 列表將 block1 發送給數據節點3,數據節點3存儲完成響應數據給數據節點2,數據節點2將響應數據給數據節點1,數據節點1將存儲結果返回給 NameNode 和客戶端
9,重復第四步上傳下一個block
在這里插入圖片描述
我知道你們想問什么,為什么 HDFS 的寫流程必須一個個的上傳塊,不能并發上傳嗎?這是設計者對于 HDFS 寫少讀多場景的這種考量。該場景如此設計的好處:

1,每個數據塊的寫入是原子操作,即要么成功寫入,要么完全不寫入。這確保了數據的一致性。如果并發寫入需要考量并發安全性問題
2,集群默認全同步,數據高可靠

HDFS 讀流程

1,客戶端向 NameNode 請求下載文件
2,NameNode 返回目標文件的元數據
3,客戶端根據元數據請求 DataNode 讀取數據 block
4,DataNode 向客戶端傳輸數據
5,重復第三步,直到所有的塊傳輸完成
6,客戶端根據元數據組裝 block 塊完成讀取數據
在這里插入圖片描述

NameNode 持久化機制

NameNode 元數據的存儲位置是在內存中,但是內存一旦斷電元數據將丟失,因此必須將內存中的元數據存儲在磁盤中用于備份,這里引入額外一個概念叫 Fsimagem

Fsimagem 為內存元數據的備份。若內存的元數據發生改變,如果同時更新 Fsimage 會降低效率,如果不更新會發生數據不一致問題

針對上述問題,最終邏輯是不更新 Fsimage 文件,為解決數據不一致問題,引入 edits 文件,該文件只記錄操作并且采用追加寫的形式,即每當內存的元數據發生改變的同時記錄本次操作記錄追加到磁盤中的 edits,這樣內存元數據等于磁盤的 Fsimage + edits

當 NameNode 啟動時先滾動 edits 并生成一個空的 edits.inprogress,會將 Fsimage 和 edits 文件加載到內存中進行合并,之后的操作(增刪)將追加到 edits.inprogress 中

其行為類似 redis 的 RDB 和 AOF 機制

MapReduce

MapReduce 是一種編程模型和分布式計算框架,是開發基于 Hadoop 的數據分析應用的核心框架。MapReduce 的主要用途包括:

  • 大數據處理:處理和分析 PB 級別的數據,如日志分析、數據挖掘、統計分析等
  • 數據轉換:將原始數據轉換為所需的格式,如 ETL(Extract, Transform, Load)任務
  • 數據索引:構建大規模數據的索引,如搜索引擎的網頁索引
  • 機器學習:處理大規模的訓練數據,進行模型訓練和預測

總之,只要是統計或者計算 Hadoop 中的數據,都會用到 MapReduce。Hive(基于 Hadoop 的數據倉庫工具,它提供了一種 SQL-like 的查詢語言,使得用戶可以方便地進行數據查詢和分析)底層對接 MapReduce 來執行查詢和數據處理任務。Hive 的查詢最終會被轉換成一個或多個 MapReduce 作業來執行

底層原理

MapReduce 實現分布式計算分成2個階段,Map(映射)和 Reduce(歸約)

第一個階段 MapTask 并發實例,完全并行運行,互不干擾。首先會將輸入數據分割成多個小塊,每個小塊稱為一個切片(split)。每個切片的大小通常與 HDFS 的塊大小(默認 128MB)一致。這么做使數據能夠并行處理,提高處理速度。

隨后我們對輸入數據進行處理,生成中間鍵值對(key-value pairs)。每個 Map 任務從輸入切片中讀取數據,對每條記錄調用用戶定義的 Map 函數,生成中間鍵值對

第二個階段 ReduceTask 完全并行運行,數據依賴上一個階段所有 MapTask 并發實例輸出。將 Map 任務生成的中間鍵值對進行分區、排序和合并

  • 分區(Partitioning):根據鍵的哈希值將中間鍵值對分配到不同的 Reduce 任務中
  • 排序(Sorting):對每個分區內的鍵值對按鍵進行排序
  • 合并(Merging):將來自不同 Map 任務的相同鍵的鍵值對合并在一起

MapReduce 編程模型只能包含一個 Map 階段一個 Reduce 階段,但可以實現多個 MapReduce 串行運行

示例

上面的描述可能有些抽象,讓大家有很多問題,比如為啥 ReduceTask 也可以并行執行?如果 MapTask 的產物是鍵值對的話,那么存放在 HDFS 的關系型表會怎么轉換成鍵值對然后暴露給我們?接下來舉個例子讓大家更加深入的了解問題:

假設我們有一個關系型表 users,其結構如下:

user_idnameagecity
1Alice25New York
2Bob30London
3Carol22New York
4Dave28Tokyo

假設我們要計算每個城市的用戶數量:

SELECT city, COUNT(*) AS user_count
FROM users
GROUP BY city;

在這個例子中,Map 階段會將每行數據轉換為鍵值對,其中鍵是城市名稱,值是用戶 ID。例如:

  • 輸入行:1, Alice, 25, New York。輸出鍵值對:(New York, 1)
  • 輸入行:2, Bob, 30, London。輸出鍵值對:(London, 2)
  • 輸入行:3, Carol, 22, Paris。輸出鍵值對:(New York, 3)
  • 輸入行:4, Dave, 28, Tokyo。輸出鍵值對:(Tokyo, 4)

Map 階段結束我們就得到很多鍵值對,在 Reduce 階段,Hive 會將 Map 任務生成的中間結果按鍵進行分組,相同城市的鍵值對會被分到一個 ReduceTask 中:

  • (New York, [1,3]) -> (New York, 2)
  • (London, [2]) -> (London, 1)
  • (Tokyo, [4]) -> (Tokyo, 1)

ReduceTask 輸出最后的處理結果。所以一個 sql 在 Hive 中的執行流程和普通 db 中是完全不一樣的。通過上面的 case 我們可以看出,先 map 后 reduce 事實上就是想利用并發的能力處理大量數據,Hadoop 的創作者們將我們所有的查詢操作都抽象成了這完全可以并行執行的兩步

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

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

相關文章

Linux編輯器

1.三種模式 2.圖例 3.wq 4.光標的使用

2.24DFS和BFS刷題

洛谷P2895&#xff1a;用BFS走出危險區域&#xff0c;危險區域存在時間&#xff0c;我們用ma記錄最快變成危險區域的時間&#xff0c; 然后每次枚舉時間1然后跟ma數組比較看能不能走&#xff0c;然后時間復雜度為O(305^2)。 #include<iostream> #include<cstring>…

TMDS視頻編解碼算法

因為使用的是DDR進行傳輸&#xff0c;即雙倍頻率采樣&#xff0c;故時鐘只用是并行數據數據的5倍&#xff0c;而不是10倍。 TMDS算法流程&#xff1a; 視頻編碼TMDS算法流程實現&#xff1a; timescale 1 ps / 1ps //DVI編碼通常用于視頻傳輸&#xff0c;將并行數據轉換為適合…

C++中tuple的用法

C中tuple的用法 在C中&#xff0c;std::tuple 是一個模板類&#xff0c;用于存儲一組不同類型的值。它類似于 Python 中的元組&#xff0c;但具有更強大的功能&#xff0c;例如支持不同類型的元素和更復雜的操作。std::tuple 是 C11 標準引入的&#xff0c;位于 <tuple>…

計算機網絡————(一)HTTP講解

基礎內容分類 從TCP/IP協議棧為依托&#xff0c;由上至下、從應用層到基礎設施介紹協議。 1.應用層&#xff1a; HTTP/1.1 Websocket HTTP/2.0 2.應用層的安全基礎設施 LTS/SSL 3.傳輸層 TCP 4.網絡層及數據鏈路層 IP層和以太網 HTTP協議 網絡頁面形成基本 流程&#xff1a…

【網絡編程】廣播和組播

數據包發送方式只有一個接受方&#xff0c;稱為單播。如果同時發給局域網中的所有主機&#xff0c;稱為廣播。只有用戶數據報(使用UDP協議)套接字才能廣播&#xff1a; 廣播地址以192.168.1.0 (255.255.255.0) 網段為例&#xff0c;最大的主機地址192.168.1.255代表該網段的廣…

小程序如何實現跨頁面通信

前言 最近有很多同學問&#xff0c;小程序里面如何進行跨頁面通信。看了下之前的老代碼&#xff0c;基本都是基于onShow或者localStorage。雖然可以實現&#xff0c;但是并不怎么優雅。 今天就來聊一聊&#xff0c;小程序的跨頁面通信的幾種實現方案。或許會有你想要的方案&a…

【工具】win-畫圖 保留圖片信息并僅改變圖片比例的工具

Windows 系統自帶的“畫圖”工具 Windows 系統自帶的“畫圖”&#xff08;Paint&#xff09;工具可以進行簡單的圖片編輯&#xff0c;包括調整圖片大小和比例。 使用方法&#xff1a; 打開“畫圖”工具&#xff08;可以通過在開始菜單中搜索“畫圖”或“Paint”&#xff09;。…

如何編輯autodl中以.bashrc結尾的隱藏文件

在nnunet的運行過程中遇到了設置環境變量的問題。之前沒有接觸過linux系統&#xff0c;但是autodl里面默認是linux系統。.bashrc 是一個在 Bash shell 啟動時執行的腳本文件&#xff0c;常用于設置環境變量、定義別名、加載函數等&#xff0c;用戶可以通過編輯這個文件來定制自…

實驗3 知識表示與推理

實驗3 知識表示與推理 一、實驗目的 &#xff08;1&#xff09;掌握知識和知識表示的基本概念&#xff0c;理解其在AI中的深刻含義與意義&#xff1b; &#xff08;2&#xff09;熟悉AI中常用的知識表示方法的優缺點及其應用場景&#xff1b; &#xff08;3&#xff09;掌握產…

在 M1 Mac 上解鎖 TensorFlow GPU 加速:從環境搭建到實戰驗證

在 M1 Mac 上解鎖 TensorFlow GPU 加速&#xff1a;從環境搭建到實戰驗證 前言&#xff1a;蘋果芯片的深度學習新紀元 隨著 Apple Silicon 芯片的普及&#xff0c;M1/M2/M3 系列 Mac 已成為移動端深度學習開發的新選擇。本文將以 TensorFlow 2.x 為例&#xff0c;手把手教你如…

Python 數據分析概述 ①

一文讀懂Python數據分析&#xff1a;從基礎到實踐全攻略 在當今數字化浪潮中&#xff0c;數據分析已然成為解鎖海量數據價值的關鍵鑰匙&#xff0c;而Python憑借其獨特優勢&#xff0c;在數據分析領域大放異彩。今天&#xff0c;咱們就結合教學PPT內容&#xff0c;深入探索Pyt…

【Gin-Web】Bluebell社區項目梳理6:限流策略-漏桶與令牌桶

本文目錄 一、限流二、漏桶三、令牌桶算法四、Gin框架中實現令牌桶限流 一、限流 限流又稱為流量控制&#xff0c;也就是流控&#xff0c;通常是指限制到達系統的并發請求數。 限流雖然會影響部分用戶的使用體驗&#xff0c;但是能一定程度上保證系統的穩定性&#xff0c;不至…

Linux高并發服務器開發 第十九天(線程 進程)

目錄 1.進程組和會話 2.守護進程 2.1守護進程daemon概念 2.2創建守護進程 3.線程 3.1線程的概念 3.2線程內核三級映射 3.3線程共享 3.4線程優缺點 4.線程控制原語 4.1獲取線程id 4.2創建線程 4.3循環創建N個子線 4.4子線程傳參地址&#xff0c;錯誤示例 4.5線程…

軟件工程和系統分析與設計

軟件工程 1、軟件危機 2、軟件過程模型 2.1 瀑布模型 2.2原型模型 2.3螺旋模型 2.4敏捷模型 2.5軟件統一過程 3、軟件能力成熟度模型 CMM 4、軟件能力成熟度模型集成 CMMI 系統分析與設計 1、結構化方法SASD 1.1結構化分析 DFD 1.2結構化設計 SD-是一種面向數據流的設計…

Qt/C++面試【速通筆記一】

Qt 信號與槽機制 什么是信號&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;&#xff1f; 在Qt中&#xff0c;信號&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;是實現對象之間通信的一種機制。信號是對象在某些事件發生時發出的通知&…

LangChain大模型應用開發:構建Agent智能體

介紹 大家好&#xff0c;博主又來給大家分享知識了。今天要給大家分享的內容是使用LangChain進行大模型應用開發中的構建Agent智能體。 在LangChain中&#xff0c;Agent智能體是一種能夠根據輸入的任務或問題&#xff0c;動態地決定使用哪些工具(如搜索引擎、數據庫查詢等)來…

微服務架構概述及創建父子項目

目錄 一&#xff0c;什么是單體架構 二&#xff0c;什么是集群和分布式架構 三&#xff0c;什么是微服務架構 四&#xff0c;解決微服務難題的方案Spring-cloud Spring Cloud Alibaba是阿里巴實現的方案&#xff0c;基于SpringCloud的規范。如果說Spring Cloud Netflix 是…

C/C++跳動的愛心

系列文章 序號直達鏈接1C/C李峋同款跳動的愛心2C/C跳動的愛心3C/C經典愛心4C/C滿屏飄字5C/C大雪紛飛6C/C炫酷煙花7C/C黑客帝國同款字母雨8C/C櫻花樹9C/C奧特曼10C/C精美圣誕樹11C/C俄羅斯方塊小游戲12C/C貪吃蛇小游戲13C/C孤單又燦爛的神14C/C閃爍的愛心15C/C哆啦A夢16C/C簡單…

量子計算的威脅,以及企業可以采取的措施

當谷歌、IBM、Honeywell和微軟等科技巨頭紛紛投身量子計算領域時&#xff0c;一場技術軍備競賽已然拉開帷幕。 量子計算雖能為全球數字經濟帶來巨大價值&#xff0c;但也有可能對相互關聯的系統、設備和數據造成損害。這一潛在影響在全球網絡安全領域引起了強烈關注。也正因如…