hadoop基礎知識分享(一)

来源:https://www.cnblogs.com/cjybigdatablog/p/18403603
-Advertisement-
Play Games

寫在前面 今天學習hadoop部分的知識。 Hadoop 概述 Hadoop 是一個適合海量數據的分散式存儲和分散式計算的平臺。Hadoop 的處理思想是“分而治之”。它起源於 Google 的三篇文章:Google FS(GFS),MapReduce,BigTable。Hadoop 主要包含三個核 ...


寫在前面

今天學習hadoop部分的知識。

Hadoop 概述

Hadoop 是一個適合海量數據的分散式存儲和分散式計算的平臺。Hadoop 的處理思想是“分而治之”。它起源於 Google 的三篇文章:Google FS(GFS),MapReduce,BigTable。Hadoop 主要包含三個核心組件:

  • HDFS(Hadoop Distributed File System):一個分散式存儲框架,適合海量數據存儲。
  • MapReduce:一個分散式計算框架,適合海量數據計算。
  • YARN(Yet Another Resource Negotiator):一個資源調度平臺,負責給計算框架分配計算資源。

Hadoop 分散式搭建

  1. 關閉防火牆並設置所有節點名稱和相關映射。
  2. 設置免密鑰。
  3. 上傳 Hadoop 安裝包並解壓。
  4. 配置環境變數。
  5. 修改配置文件。
  6. 同步文件。
  7. 格式化並啟動(僅第一次需要格式化)。

分散式存儲

HDFS 主從結構

HDFS 具有主從架構。HDFS 集群由單個名稱節點(NameNode)和許多數據節點(DataNode)組成:

  • NameNode:主節點,管理文件系統名稱空間並控制客戶端對文件的訪問。
  • DataNode:從節點,管理實際的數據存儲。

介紹

在分散式存儲系統中,分散在不同節點中的數據可能屬於同一個文件。為了組織眾多的文件,可以將文件放到不同的文件夾中,文件夾可以一級一級地包含。這種組織形式稱為命名空間(namespace)。命名空間管理整個伺服器集群中的所有文件。

主從結構

  • 主節點(NameNode):負責命名空間和文件的元數據管理。
  • 從節點(DataNode):負責存儲實際的數據,數據以塊(block)的形式進行存儲。

用戶操作時,客戶端首先與主節點交互,查詢數據存儲位置,然後從相應的從節點讀取數據。主節點將整個命名空間信息保存在記憶體中,因此需要更多記憶體來處理更多的文件。

塊(Block)

  • 塊(Block):為了管理不同大小的文件,HDFS 將文件分成塊(預設大小為128MB),每個塊存儲在不同的 DataNode 上。
  • 副本(Replication):為了數據的安全性,HDFS 會將數據塊備份到多個節點上,減少數據丟失或訪問失敗的概率。

分散式計算

YARN(Yet Another Resource Negotiator)

YARN 負責資源調度和管理,採用主從結構:

  • 主節點(ResourceManager):負責集群資源的分配與調度。
  • 從節點(NodeManager):負責單節點資源的管理(CPU 和記憶體)。

資源管理

  • ResourceManager:負責全局資源調度和管理。
  • NodeManager:管理節點資源,並執行容器中的任務。

Container

  • 定義:Container 是 YARN 中資源的抽象,封裝了某個節點上一定量的資源(CPU 和記憶體)。
  • 作用:由 ApplicationMaster 向 ResourceManager 申請,併在 NodeManager 上運行。

MR(MapReduce)

MapReduce 是一個依賴磁碟 I/O 的批處理計算模型,也具有主從結構:

  • 主節點(MRAppMaster):負責接收客戶端提交的計算任務,並將任務分配給 NodeManager 的 Container 中執行。
  • 從節點(Task):具體的計算任務。

Hadoop 命令

集群管理

  • 啟動所有進程:
    start-all.sh
    
  • 停止所有進程:
    stop-all.sh
    
  • 啟動 HDFS 和 YARN 相關進程:
    start-dfs.sh
    start-yarn.sh
    
  • 停止 HDFS 和 YARN 相關進程:
    stop-dfs.sh
    stop-yarn.sh
    

單獨啟動和停止進程

  • 啟動 HDFS:
    hadoop-daemon.sh start (namenode | datanode)
    
  • 停止 HDFS:
    hadoop-daemon.sh stop (namenode | datanode)
    
  • 啟動 YARN:
    yarn-daemon.sh start (resourcemanager | nodemanager)
    
  • 停止 YARN:
    yarn-daemon.sh stop (resourcemanager | nodemanager)
    

文件操作

  • 上傳文件:
    hdfs dfs -put 本地路徑 HDFS路徑
    hdfs dfs -copyFromLocal 本地路徑 HDFS路徑
    
  • 下載文件:
    hdfs dfs -get HDFS路徑 本地路徑
    hdfs dfs -copyToLocal HDFS路徑 本地路徑
    
  • 創建目錄:
    hdfs dfs -mkdir HDFS路徑
    
  • 查看文件內容:
    hdfs dfs -cat HDFS路徑
    hdfs dfs -tail HDFS路徑
    hdfs dfs -tail -f HDFS路徑  # 監聽 HDFS 中的文件內容
    hdfs dfs -text HDFS路徑
    

文件管理

  • 追加內容:
    hdfs dfs -appendToFile 本地路徑 HDFS路徑
    
  • 刪除文件:
    hdfs dfs -rm -r -f HDFS路徑
    
  • 複製文件:
    hdfs dfs -cp 源路徑 目標路徑
    
  • 重命名文件:
    hdfs dfs -mv 源路徑 目標路徑
    
  • 修改文件許可權:
    hdfs dfs -chmod 735 目標路徑
    hdfs dfs -chmod -R 735 目標路徑
    
  • 查看存儲空間:
    hdfs dfs -df
    hdfs dfs -du -h /
    

HDFS 相關概念

HDFS 架構 - 元數據

  • fsimage:元數據鏡像文件,存儲 NameNode 記憶體中的元數據信息。
  • edits:操作日誌文件,記錄新增的元數據日誌。
  • fstime:保存最近一次 checkpoint 的時間。

這些文件保存在 Linux 文件系統中,路徑由 hdfs-site.xmldfs.namenode.name.dir 屬性指定。

SecondaryNameNode 的作用

  • 功能:幫助 NameNode 完成元數據信息的合併。
  • 工作流程
    1. SecondaryNameNode 向 NameNode 發起 Checkpoint 請求。
    2. 從 NameNode 獲取 fsimage 和 edits。
    3. 合併 edits。
    4. 將新的 fsimage 發回給 NameNode。
    5. NameNode 用新的 fsimage 替換舊的 fsimage。

Checkpoint 發起時機

  • fs.checkpoint.period:指定兩次 checkpoint 的最大時間間隔,預設 3600 秒。
  • fs.checkpoint.size:規定 edits 文件的最大值,一旦超過此值則強制 checkpoint,預設大小為 64MB。

HDFS 架構 - Block 存儲

  • Block 大小:HDFS 1.0 版本的預設塊大小為 64MB,2.0 版本及以後為 128MB。可以在 hdfs-site.xml 中通過 dfs.blocksize 屬性配置塊大小。

HDFS API 使用

  • 文件操作

    • create:寫文件
    • open:讀取文件
    • delete:刪除文件
  • 目錄操作

    • mkdirs:創建目錄
    • delete:刪除文件或目錄
    • listStatus:列出目錄的內容
    • getFileStatus:顯示文件系統的目錄和文件的元數據信息
    • getFileBlockLocations:顯示文件存儲位置

RPC 協議

  • 定義:RPC(Remote Procedure Call)是一種通過網路從遠程電腦程式上請求服務的協議,無需瞭解底層網路技術。RPC 採用客戶端/伺服器模式,客戶端發送請求,伺服器處理請求並返回結果。

Hadoop是什麼,有哪些組件,分別介紹一下?

Hadoop 是一個處理海量數據的分散式存儲和分散式計算平臺,主要包括三個核心組件:HDFS、YARN 和 MapReduce。它們起源於谷歌發佈的三篇文章:GFS 對應 HDFS,BigTable 對應 HBase,MapReduce 對應 Hadoop 中的 MapReduce。

HDFS架構?HDFS原理?

HDFS(Hadoop Distributed File System)

HDFS 是 Hadoop 中的分散式文件存儲系統,它會將每個文件以“分而治之”的思想來放到不同的數據節點中。HDFS 採用主從結構:

  • 主節點(NameNode):負責存儲數據的元數據信息,例如文件的大小、文件的路徑、文件的名字和時間等。
  • 從節點(DataNode):負責真實數據的存儲,這個存儲是基於塊(Block)來進行的。在 Hadoop 2.0 版本之後,一個塊的預設大小是 128MB,這樣也就意味著一個文件可能會被拆成多個塊,分別放到不同的從節點上,實現分散式存儲。

如果需要讀取這些數據,需要通過主節點來獲取這些塊的具體位置,組裝好文件才能完整地讀到 HDFS 中的文件。主節點也是用戶進行讀寫數據請求的橋梁。當客戶端有讀寫請求的時候,客戶端會首先通過 RPC 協調來遠程調用 NameNode 來獲取一個數據列表,這個列表中存儲了每個 DataNode 中每個塊的具體信息。

DataNode 的信息由 NameNode 管理,NameNode 也可以存在多個。如果 HDFS 中的 NameNode 掉線,只有一個主節點會使整個數據都不能用。創建第二個 NameNode 可以減少數據不能用的可能。Hadoop 中的機制會在 NameNode 掉線之後,找一個空閑的 DataNode 來充當 NameNode 繼續運作,當然,這樣做如果沒有多副本,這個空閑的 DataNode 中的數據就無法讀取了。

HDFS 初始化命令?

hdfs namenode -format

Yarn啟動後有什麼進程?Yarn的架構?

YARN(Yet Another Resource Negotiator)

YARN 是用來進行資源的管理和任務調度的一個框架,主要用於協調每個組件之間的資源調度,使每個進程都可以順利運作。YARN 啟動後,主節點會有一個 ResourceManager,從節點上會有 NodeManager。

YARN 架構

  • 主節點(ResourceManager):負責整個 Hadoop 集群中的資源分配和任務的調度。
  • 從節點(NodeManager):負責自己節點上的資源任務調度。

Container是什麼?

YARN 中的 Container 是資源的抽象,它封裝了某個節點上一定量的資源(CPU 和記憶體)。Container 由 ApplicationMaster 向 ResourceManager 申請,由 ResourceManager 中的資源調度器非同步分配給 ApplicationMaster。Container 的運行是由 ApplicationMaster 向資源所在的 NodeManager 發起的。

Block大小為什麼是128M?

Block 大小

塊的預設大小為 128MB。這樣做是為了優化分散式存儲和計算框架的性能,減少元數據開銷,並提高數據本地性,從而提升整體系統的效率和吞吐量。如果塊的大小設置為 1MB,會存在多個塊,計算時讀寫效率會降低。如果塊的大小設置為 1GB,但有多個 100MB 的文件,會生成多個存儲容量為 1GB 的塊,這樣塊文件的空間利用率會很低。若塊的大小小於 1MB,一個 1MB 的文件也會分配一個 1GB 的塊,導致空間浪費。

SecondaryNameNode的作用?

SecondaryNameNode 的作用是幫助 NameNode 完成元數據信息合併,從角色上看,屬於 NameNode 的“秘書”。它的工作流程如下:

  1. SecondaryNameNode 向 NameNode 發起 Checkpoint 請求。
  2. SecondaryNameNode 從 NameNode 獲得 fsimage 和 edits 文件。
  3. SecondaryNameNode 將 fsimage 載入記憶體,然後開始合併 edits。
  4. SecondaryNameNode 將新的 fsimage 發回給 NameNode。
  5. NameNode 用新的 fsimage 替換舊的 fsimage。

文件說明

  • fsimage:元數據鏡像文件,存儲某一時段 NameNode 記憶體中的元數據信息。
  • edits:操作日誌文件,記錄 NameNode 啟動後新增的元信息日誌。
  • fstime:保存最近一次 Checkpoint 的時間。

MapReduce的架構?如何提交MR任務?

MapReduce 是一個依賴磁碟 I/O 的批處理計算模型,也具有主從結構:

  • 主節點(MRAppMaster):負責接收客戶端提交的計算任務,把計算任務分給 NodeManager 的 Container 中執行,即任務調度,監控 Container 中 Task 的執行情況。
  • 從節點(Task):處理數據。這裡的 MRAppMaster 並不在主節點上,因為計算是由 DataNode 來執行的,NameNode 只是管理這些 DataNode。

提交 MR 任務的步驟

  1. 編寫 MapReduce 程式:編寫 Java、Python 或其他支持的語言的 MapReduce 程式,定義 Mapper 和 Reducer 類。
  2. 編譯程式:如果使用 Java,編譯你的代碼生成 .jar 文件。
  3. 上傳數據到 HDFS:將輸入數據上傳到 HDFS。
  4. 提交任務:
    hadoop jar jar包名 主類名 -input /hdfs/input/path -output /hdfs/output/path
    
    這裡的 your-program.jar 是你的程式的 JAR 文件,YourMainClass 是包含 main 方法的類,-input-output 分別是 HDFS 中的輸入和輸出路徑。
  5. 查看任務狀態:
    yarn application -status <applicationId>
    

hdfs讀寫過程是怎麼樣的?

讀取數據

  1. 客戶端創建讀請求給 DFS,DFS 接到該請求後遠程調用 NameNode。
  2. NameNode 會通過元數據信息來找到用戶要讀的數據對應的 DataNode 中的塊。
  3. NameNode 校驗文件是否存在等情況,只有校驗通過才會讀取塊,否則會拋出異常。
  4. 所有準備工作完成後,開始進行數據的讀取。
  5. 讀取數據是通過一個一個的塊來進行的,只有當一個文件的所有塊都被讀取到之後才會中斷讀連接。
  6. 如果在讀取過程中出現了異常,比如某個塊對應的 DataNode 掉線,則會去其他 DataNode 中重新讀該塊的副本,讀取完畢後繼續讀下一個塊。
  7. DFS 會將 DataNode 掉線的信息傳遞給 NameNode,以便下次讀取數據時選擇其他的 DataNode,跳過掉線的 DataNode。
  8. 所有塊都成功讀取後,客戶端會收到寫完的消息,最後關閉讀連接。

寫入數據

  1. 客戶端創建寫請求給 DFS,DFS 接到該請求後遠程調用 NameNode。
  2. NameNode 校驗文件狀態,並創建新的塊來寫數據。
  3. 寫入的數據首先會被分成塊,每個塊還會分成一個個 packet(實現斷點重連)。一個個 packet 會組成一個 ack 隊列,寫入數據會按照隊列先進先寫。
  4. 只有當一個完整的塊都寫入到 DataNode 的塊中才會進行各個 DataNode 的數據同步。
  5. 只有在有多副本的情況下才會同步。如果只有一個副本,數據只會存在一個 DataNode 上。如果在寫入塊的過程中出現錯誤,比如在寫入某個塊時 DataNode 掉線,會跳過該 DataNode 繼續寫入到其他 DataNode 的新塊中,重新寫入塊,只有掉線的 DataNode 重新正常工作後才會進行數據同步恢復正常。未寫入的舊塊會被刪除。
  6. 所有塊都成功寫入後,客戶端會收到寫完的消息,最後通知 NameNode 去記錄這些 DataNode 中的塊的信息。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Haproxy與Keepalived VRRP 介紹 軟體:haproxy 主要是做負載均衡的7層,也可以做4層負載均衡 apache也可以做7層負載均衡,但是很麻煩。實際工作中沒有人用。 nginx可以做7層的負載,性能強大,多在實際工作中使用。 負載均衡是通過OSI協議對應的【1】 7層負載 ...
  • Scoop 安裝 環境需求 PowerShell 5 + .NET Framework 4.5 + 安裝 指定安裝位置(配置環境變數) 以管理員身份打開PowerShell $env:SCOOP='D:\Applications\Scoop' [Environment]::SetEnvironmen ...
  • tcp mem 相關 net.ipv4.tcp_rmem = 4096 131072 6291456 讀取緩衝區,單位位元組 net.ipv4.tcp_wmem = 4096 16384 4194304 發送緩衝區,單位位元組 net.ipv4.tcp_mem = 760707 1014278 1521 ...
  • 導讀:數據同步方式的重要性對於數據集成領域的興從業者不言而喻,選擇正確的數據同步方式能讓數據同步工作的成果事半功倍。目市面上的數據同步工具很多,提供的數據同步方式也有多種,不同的數據同步方式有什麼區別?如何選擇適合自己業務需求的數據同步方式呢?本文將對此進行深入分析,並深入剖析WhaleTunnel ...
  • 《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,全書共分10章,第1章主要讓讀者認識數據資產,瞭解數據資產相關的基礎概念,以及數據資產的發展情況。第2~8章主要介紹大數據時代數據資產管理所涉及的核心技術,內容包括元數據的採集與存儲、數據血緣、數據質量、數據監控與告警、數據服務、數據許可權 ...
  • 介紹: MyBatis-Plus 是基於 MyBatis 框架的一個增強工具,主要目的是簡化 MyBatis 的開發過程,提供更加簡潔、方便的 CRUD 操作。它是在保留 MyBatis 強大功能的基礎上,通過封裝和優化一些常見操作來提高開發效率。 MyBatis-Plus 提供了許多開箱即用的功能 ...
  • 時空人工智慧 時空人工智慧是AI領域的新型創新應用技術,定義為以時空為‘索引’對多源異構數據進行時空化治理和融合,並借力知識工程和AI演算法進行智能化分析,從而挖掘知識和輔助決策。時空AI是地理空間智能、城市空間智能和時空大數據智能等的統一表示,包括從時空感知、認知到決策預知的多項核心技術。其應用生態 ...
  • 在用鍵值對RDD進行操作時,經常會遇到不知道如何篩選出想要數據的情況,這裡提供了一些解決方法 目錄1、對固定的Key數據進行查詢2、對不固定的Key數據進行模糊查詢 1、對固定的Key數據進行查詢 代碼說明: SparkConf:配置 Spark 應用程式的一些基本信息。 SparkContext: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...