主頁 > 軟體設計 > Hadoop入門系列(6)-HDFS詳解及操作命令

Hadoop入門系列(6)-HDFS詳解及操作命令

2020-12-25 11:10:44 軟體設計

簡介

Hadoop分布式檔案系統(HDFS)是一種旨在在商品硬體上運行的分布式檔案系統,它與現有的分布式檔案系統有許多相似之處,但是,與其他分布式檔案系統的區別很明顯,HDFS具有高度的容錯能力,旨在部署在低成本硬體上,HDFS提供對應用程式資料的高吞吐量訪問,并且適用于具有大資料集的應用程式,HDFS放寬了一些POSIX要求,以實作對檔案系統資料的流式訪問,HDFS最初是作為Apache Nutch Web搜索引擎專案的基礎結構而構建的,HDFS是Apache Hadoop Core專案的一部分,

優點

  1. 高容錯性:資料自動保存多個副本,它通過增加副本的形式,提高容錯性,某一個副本丟失以后,它可以自動恢復,這是由 HDFS 內部機制實作的,我們不必關心,

  2. 適合批處理:它是通過移動計算而不是移動資料, 它會把資料位置暴露給計算框架,

  3. 適合大資料處理: 能夠處理資料規模達到 GB、TB、甚至PB級別的資料,能夠處理百萬規模以上的檔案數量,數量相當之大,

  4. 可構建在廉價機器上,通過多副本機制,提高可靠性,

缺點

  1. 不適合低延時資料訪問:比如毫秒級的來存盤資料,這是不行的,它做不到,適合高吞吐率的場景,就是在某一時間內寫入大量的資料,但是它在低延時的情況 下是不行的,比如毫秒級以內讀取資料,這樣它是很難做到的,

  2. 無法高效的對大量小檔案進行存盤:存盤大量小檔案的話,它會占用 NameNode大量的記憶體來存盤檔案、目錄和塊資訊,這樣是不可取的,因為NameNode的記憶體總是有限的,小檔案存盤的尋道時間會超過讀取時間,它違反了HDFS的設計目標,

  3. 不支持并發寫入、檔案隨機修改:一個檔案只能有一個寫,不允許多個執行緒同時寫,僅支持資料 append(追加),不支持檔案的隨機修改,

組成架構

在這里插入圖片描述

  1. NameNode:就是Master,它是一個管理者,管理HDFS的名稱空間;配置副本策略;管理資料塊(Block)映射資訊;處理客戶端讀寫請求,
  2. Secondary NameNode:并非NameNode的熱備,當NameNode掛掉的時候,它并不能馬上替換NameNode并提供服務,輔助NameNode,分擔其作業量,比如定期合并Fsimage和Edits,并推送給NameNode ;在緊急情況下,可輔助恢復NameNode,
  3. DataNode:就是Slave,NameNode下達命令,DataNode執行實際的操作,存盤實際的資料塊;執行資料塊的讀/寫操作,
  4. Client:(客戶端)代表用戶通過與nameNode和datanode互動來訪問整個檔案系統,HDFS對外開放檔案命名空間并允許用戶資料以檔案形式存盤,用戶通過客戶端(Client)與HDFS進行通訊互動,檔案上傳HDFS的時候,Client將檔案切分成一個一個的Block,然后進行上傳;與NameNode互動,獲取檔案的位置資訊;與DataNode互動,讀取或者寫入資料;Client提供一些命令來管理HDFS,比如NameNode格式化;Client可以通過一些命令來訪問HDFS,比如對HDFS增刪查改操作;

檔案塊

與一般檔案系統一樣,HDFS也有塊(block)的概念,HDFS上的檔案也被劃分為塊大小的多個分塊作為獨立的存盤單元,在組態檔hdfs-default.xml中,默認配置為134217728K,Hadoop2.x版本中是128M,老版本中是64M,

HDFS檔案塊的大小不能設定太大,也不能設定太小,尋址時間若為10ms,即查找到目標block的時間為10ms,尋址時間為傳輸時間的1%時,為最佳狀態,那么傳輸時間=10ms/1%=1000ms=1s,目前市面上磁盤普通傳輸速率100MB/s,那block設定為128MB,

常用命令

/opt/soft/hadoop-2.9.2/bin
# 語法
Usage: hdfs dfs -appendToFile <localsrc> ... <dst>
# 查看某個命令幫助
hadoop fs -help put
# 1. HDFS上查看目錄
hdfs dfs -ls /
# 2. HDFS上創建目錄
hdfs dfs -mkdir -p /data/mysql
# 3. 從本地移動到HDFS
hdfs dfs -moveFromLocal ./aaa.txt  /data/mysql
# 4. 追加一個檔案到已經存在的檔案末尾
echo "zhangsan" > bbb.txt
hdfs dfs -appendToFile ./bbb.txt /data/mysql/aaa.txt
# 5. 顯示檔案內容
hdfs dfs -cat /data/mysql/aaa.txt
# 6. 修改檔案所屬權限(-chgrp 、-chmod、-chown)
hdfs dfs -chmod 777  /data/mysql/aaa.tx
# 7. 從本地檔案系統中拷貝檔案到HDFS
hdfs dfs -copyFromLocal ./bbb.txt /data/mysql
hdfs dfs -put a.txt /data
# 8. 從HDFS拷貝到本地
hdfs dfs -copyToLocal /data/mysql/aaa.txt ./
hdfs dfs -get /data/aaa.txt ./
# 9. 從HDFS的一個路徑拷貝到HDFS的另一個路徑
hdfs dfs -cp /data/mysql/aaa.txt /
# 10. 在HDFS目錄中移動檔案
hdfs dfs -mv /data/mysql/aaa.txt /data
# 11. 合并下載多個檔案
hdfs dfs -getmerge /include/* a.txt
# 12. 顯示一個檔案的末尾
hdfs dfs -tail /data/mysql/bbb.txt
# 13. 洗掉檔案或檔案夾
hdfs dfs -rm /data/mysql/bbb.txt
# 14. 洗掉空目錄
hdfs dfs -rmdir  /data/mysql/
# 15. 統計檔案夾的大小資訊
hdfs dfs -du /data
# 16. 設定HDFS中檔案的副本數量,因為目前只有3臺設備,最多也就3個副本,只有節點數的增加到4臺時,副本數才能達到4
hdfs dfs -setrep 4 /data/

寫入資料流程

在這里插入圖片描述

  1. 客戶端通過fs模塊向NameNode申請檔案上傳,NameNode檢查請求是否合法,如用戶權限,目標檔案是否已存在,父目錄是否存在等等

  2. NameNode回傳是否可以上傳,如果是的話,建立連接通道

  3. 客戶端通過FSDataOutputStream模塊請求上傳block,NameNode根據網路拓撲距離計算回傳的節點,dn1,dn2,dn3

  4. 客戶端與dn1建立連接通道,dn1收到請求后會向dn2發起連接請求,dn2收到請求后會向dn3發起請求.請求通道全部打通后,會從后逐次向前應答,最后應答到客戶端,通道建立成功

  5. 客戶端開始上傳block,block以packet為單位進行傳輸,大小為64k,dn1接收到packet后,將packet放入buffer緩沖中,一邊往本地磁盤寫,一邊發送給dn2,dn2接收到后,以同樣的方式進行處理和傳輸給dn3,dn3也進行同樣的處理

  6. 等到block發送完畢后,本次傳輸結束

讀取資料流程

在這里插入圖片描述

  1. 客戶端向NameNode申請檔案下載,NameNode檢查請求的合法性.如果請求合法,回傳可以下載的相應,建立連接通道

  2. 客戶端請求下載檔案,NameNode查詢元資料,回傳DataNode節點,DataNode節點以拓撲距離排序

  3. 客戶端請求連接第一個DataNode,應答成功后,DataNode開始以Packet傳輸資料.

  4. 客戶端接收Packet,邊接收邊寫入磁盤.

  5. 檔案傳輸完成,關閉連接.

網路拓撲-節點距離計算

在HDFS寫資料的程序中,NameNode會選擇距離待上傳資料最近距離的DataNode接收資料,

節點距離:兩個節點到達最近的路由器節點的距離總和

機架感知(副本存盤節點選擇)

為了最大程度地減少全域帶寬消耗和讀取延遲,HDFS嘗試滿足最接近讀取器的副本的讀取請求,如果在與讀取器節點相同的機架上存在一個副本,則首選該副本來滿足讀取請求,如果angg / HDFS群集跨越多個資料中心,則駐留在本地資料中心的副本優先于任何遠程副本,

NameNode和SecondaryNameNode

NameNode是如何存盤元資料:元資料存盤在fsiamge檔案(元資料的快照檔案)+edits(記錄所有寫操作的日志檔案)檔案中,SecondaryNamenode專門用于FsImage和Edits的合并,通常情況下,SecondaryNameNode每隔一小時執行一次CheckPoint,
NameNode作業機制
在這里插入圖片描述

集群安全模式

當啟動Namenode時,它不會立即開始向DataNode復制資料,NameNode首先自動進入稱為安全模式的特殊只讀操作狀態,在此模式下,NameNode不接受任何更改其命名空間的請求,因此,直到它離開安全模式之前,它避免復制甚至洗掉任何資料塊,

# 查看
bin/hdfs dfsadmin -safemode get	

NameNode多目錄配置

NameNode的本地目錄可以配置成多個,且每個目錄存放內容相同,增加了可靠性,

# hdfs-site.xml
<property>
    <name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>

DataNode

  1. DataNode作業機制:
    在這里插入圖片描述
    (1) 一個資料塊在 datanode 上以檔案形式存盤在磁盤上,包括兩個檔案,一個是資料本身,一個是元資料包括資料塊的長度,塊資料的校驗和,以及時間戳,
    (2) DataNode 啟動后向 namenode 注冊, 通過后,周期性(1 小時) 的向 namenode 上報所有的塊資訊,
    (3) 心跳是每 3 秒一次,心跳回傳結果帶有 namenode 給該 datanode 的命令如復制塊資料到另一臺機器,或洗掉某個資料塊, 如果超過 10 分鐘30秒沒有收到某個 datanode 的心跳,則認為該節點不可用,
    (4) 集群運行中可以安全加入和退出一些機器,
  2. 資料完整性:
    在這里插入圖片描述
    (1)當 DataNode 讀取 block 的時候,它會計算 checksum,
    (2)如果計算后的 checksum,與 block 創建時值不一樣,說明 block 已經損壞,
    (3)client 讀取其他 DataNode 上的 block,
    (4)datanode 在其檔案創建后周期驗證 checksum,
  3. 掉線時限引數設定
    datanode 行程死亡或者網路故障造成 datanode 無法與 namenode 通信, namenode 不會立即把該節點判定為死亡,要經過一段時間,這段時間暫稱作超時時長, HDFS 默認的超時時長為 10 分鐘+30 秒,如果定義超時時間為 timeout,則超時時長的計算公式為:
    timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
    而默認的 dfs.namenode.heartbeat.recheck-interval 大小為 5 分鐘,dfs.heartbeat.interval 默認為 3 秒,需要注意的是 hdfs-site.xml 組態檔中的 heartbeat.recheck.interval 的單位為毫秒,dfs.heartbeat.interval 的單位為秒,

HDFS 2.X新特性

  1. 采用distcp命令實作兩個Hadoop集群之間的遞回資料復制
  2. 小檔案存檔:HAR是一個更高效的檔案存檔工具,它將檔案存入HDFS塊,在減少NameNode記憶體使用的同時,允許對檔案進行透明的訪問,
  3. 回收站:開啟回收站功能,可以將洗掉的檔案在不超時的情況下,恢復原資料,起到防止誤洗掉、備份等作用,
  4. 快照管理:快照相當于對目錄做一個備份,并不會立即復制所有檔案,而是記錄檔案變化,

Hadoop 3.x 新特性

  1. 最低Java版本要求從Java7變為Java8

  2. HDFS支持糾刪碼(erasure coding)

  3. YARN時間線服務 v.2(YARN Timeline Service v.2)

  4. 重寫Shell腳本

  5. 覆寫客戶端的jar(Shaded client jars)

  6. 支持Opportunistic Containers和Distributed Scheduling

  7. MapReduce任務級本地優化

  8. 支持多余2個以上的NameNodes

  9. 修改了多重服務的默認埠

  10. 提供檔案系統連接器(filesystem connnector),支持Microsoft Azure Data Lake和Aliyun物件存盤系統

  11. 資料節點內置平衡器(Intra-datanode balancer)

  12. 重寫了守護行程和任務的堆管理機制

  13. HDFS的基于路由器互聯(HDFS Router-Based Federation)

  14. 基于API配置的Capacity Scheduler queue configuration

  15. Yarn資源模型已經被一般化,可以支持用戶自定義的可計算資源型別,而不僅僅是CPU和記憶體,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/240044.html

標籤:其他

上一篇:HR開到40k搶著要,這種技術人才這么香?

下一篇:好隊友paas--如何上傳excel到好隊友中生成資料表

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more