主頁 > 資料庫 > Hadoop_HDFS_02

Hadoop_HDFS_02

2020-09-15 00:45:11 資料庫

1. HDFS入門

  1.1 HDFS基本概念

    HDFS是Hadoop Distribute File System的簡稱, 意為: Hadoop分布式檔案系統. 是Hadoop三大核心組件之一, 作為最底層的分布式存盤服務而存在, 是Hadoop領域最基礎的部分. 

    分布式檔案系統解決的問題就是大資料存盤. 他們是橫跨在多臺計算機上的存盤系統. 分布式系統在大資料時代有著廣泛的應用前景, 他們為存盤和處理超大規模資料提供所需的擴展能力. 

  1.2 HDFS設計目標

    1) 硬體故障是常態. 故障的檢測和自動快速恢復是HDFS的核心架構目標. 例如集群在啟動的時候會進入到安全模式監測block塊的情況, 進行自我備份修復

    2) HDFS被設計成適合批量處理, 而不是用戶互動式的. 注重于資料訪問的高吞吐量可并行讀取一個檔案. 

    3) 支持大檔案存盤, 塊存盤 (128M) . 

    4) 大部分HDFS應用對檔案的要求是write-one-read-many訪問模型, 一次寫入多次讀取. 一個檔案一旦創建, 寫入, 關閉之后就不需要修改了. 

    5) 移動計算的代價比之移動資料的代價低. 一個應用請求的計算, 離他操作的資料越近越高效, 將計算的任務放在資料存放的位置執行. 

    6) 在異構的硬體和軟體平臺上的可移植性. 各種應用都可以通過HDFS獲取資料. 

 

2. HDFS重要特性

    首先,他是一個檔案系統, 用于存盤檔案, 通過統一的命名空間目錄樹來定位檔案. 

    其次,他是分布式的, 由很多服務器聯合起來實作功能, 集群中的服務器有各自的角色. 

  2.1 master / slave架構 (主從架構) 

    HDFS采用master / slave架構. 一般一個HDFS集群是有一個NameNode和一定數目的DataNode組成. NameNode是集群的主節點. DataNode是集群的從節點. 兩種角色各司其職, 共同協調完成分布式的檔案存盤服務. 

  2.2 分塊存盤

    HDFS中的檔案在物理上分塊存盤 (block) 的, 塊的大小可以通過配置引數來規定, 默認在Hadoop2.x中是128M.

  2.3 名字空間 (NameSpace)

    HDFS支持傳統的層次型檔案組織結構, 對外有統一的檔案路徑和命名. 用戶或者應用程式可以創建目錄, 然后將檔案保存在這些目錄里. 檔案系統名字空間的層次結構和大多數現有的檔案系統類似: 用戶可以創建, 洗掉, 移動或重命名檔案. 

    NameNode負責維護檔案系統的名字空間, 任何對檔案系統名字空間或屬性的修改都會被NameNode記錄下來. 

    HDFS會給客戶端提供一個統一的抽象目錄樹上, 客戶端通過路徑來訪問檔案, 形如hdfs://namenode:port/dir-a/dir-b/file.data. 要上傳的檔案名和要上傳的位置, 要下載的檔案名和下載的檔案路徑, 統一規范(簡單理解就是我們通過50070能夠看到的檔案架構) . 

  2.4 NameNode元資料管理

    我們把目錄結構及檔案分塊位置資訊叫做元資料. 元資料通常可以理解為修飾資料的資料. NameNode負責維護整個HDFS檔案系統的目錄樹結構, 以及每一個檔案所對應的block塊資訊 (block的id, 以及所在的DataNode服務器) .

    HDFS存盤規則是盡可能不存盤小檔案, 因為一條元資料理論150B, 例如10W個1KB的小檔案存盤的硬碟需要100M, 而存盤元資料的記憶體就需要15M. 

  2.5 DataNode資料存盤

    檔案的各個block的具體存盤管理由DataNode節點承擔. 每一個block都可以在多個DataNode上. DataNode需要定時向NameNode匯報自己持有的block資訊. 

    存盤多個副本 (副本數量可以通過引數設定dfs.replication, 默認是3) . 

  2.6 副本機制

    為了容錯, 檔案的所有block都會有副本. 每個檔案的block大小和副本系數都是可配置的. 應用程式可以指定某個檔案的副本數目. 副本系數可以在檔案創建的時候指定, 也可以在之后改變.

  2.7 一次寫入, 多次讀出

    HDFS是設計成適應一次寫入, 多次讀出的場景, 且不支持檔案的修改

    所以, HDFS適合用來做大資料分析的底層存盤服務, 并不適合用來做網盤等應用, 因為修改不方便, 延遲大, 網路開銷大, 成本高. 

  2.8 分塊存盤和副本備份圖

    

  2.9 集群的腦裂  

    在搭建hadoop的HA集群環境后, 由于兩個namenode的狀態不一, 當active的namenode由于網路等原因出現假死狀態, standby接收不到active的心跳, 因此判斷active的namenode宕機, 但實際上active并沒有死亡. 此時standby的namenode就會切換成active的狀態, 保證服務能夠正常使用. 若原來的namenode復活, 此時在整個集群中就出現2個active狀態的namenode, 該狀態成為腦裂. 腦裂現象可能導致這2個namenode爭搶資源. 從節點不知道該連接哪一臺namenode, 導致節點的資料不統一, 這在企業生產中是不可以容忍的.  

    

 

 

3. HDFS檔案限額操作

    

    HDFS檔案的限額配置允許我們以檔案大小或者檔案個數來限制在某個目錄下上傳的檔案數量或者檔案內容總量, 以便達到類似網盤等限制每個用戶允許上傳的最大的檔案的量

  3.1 數量限額

    執行以下命令進行檔案數量限額

    hadoop fs -mkdir -p /user/root/test  # 創建hdfs檔案夾

    hdfs dfsadmin -setOuota 2 test  # 給該檔案夾下面設定最多上傳兩個檔案, 上傳檔案, 發現只能上傳一個檔案

    hdfs dfsadmin -clrQuota /user/root/test  # 清除檔案數量限制

  3.2 空間大小限額

    執行以下命令進行空間大小限額

    hdfs dfsadmin -setSpaceQuota 4k /user/root/test  # 限制空間大小4KB, 上傳超過4KB的檔案提示檔案超過限額. 

    hdfs dfsadmin -clrSpaceQuota /user/root/test  # 清楚空間限額

  3.3 查看HDFS檔案限額數量

    執行以下命令進行查看HDFS檔案限額數量

    hdfs dfs -count -p -h /user/root/test

 

4. HDFS基本原理

  4.1 NameNode概述

    1) NameNode是HDFS的核心. 

    2) NameNode也稱為Master. 

    3) NameNode僅存盤HDFS的元資料: 檔案系統中所有檔案的目錄樹, 并跟蹤整個集群中的檔案. 

    4) NameNode不存盤實際資料或資料集. 資料本身實際存盤在DataNode中. 

    5) NameNode知道HDFS中任何給定檔案的塊串列及其位置. 使用此資訊NameNode知道如何從塊中構建檔案. 

    6) NameNode并不持久化存盤每個檔案中各個塊所在的DataNode的位置資訊, 這些資訊會在系統啟動時從資料節點重建. 

    7) NameNode對于HDFS至關重要, 當NameNode關閉時, HDFS / Hadoop集群無法訪問. 

    8) NameNode是Hadoop集群中的單點故障. 

    9) NameNode所在機器通常會配置有大量記憶體 (RAM) . 

     

  4.2 DataNode概述

    1) DataNode負責將實際資料存盤在HDFS中. 

    2) DataNode也稱為Slave. 

    3) DataNode和NameNode會保持不斷通信. 

    4) DataNode啟動時, 他將自己發布到NameNode并匯報自己負責持有的塊串列. 

    5) 當某個DataNode關閉時, 他不會影響資料或資料集的可用性. NameNode將安排由其他DataNode管理的塊進行副本賦值. 

    6) DataNode所在機器通常配置有大量的硬碟空間. 因為實際資料存盤在DataNode中. 

    7) DataNode會定期 (dfs.heartbeat.interval配置項配置, 默認是3秒) 向NameNode發送心跳, 如果NameNode長時間沒有接受到DataNode發送的心跳, NameNode會認為該DataNode失效. 

    8) block匯報時間間隔取引數dfs.blockreport.intervalMsec, 引數未配置的話默認6小時. 

  4.3 HDFS作業機制

    NameNode負責管理整個檔案系統元資料, DataNode負責管理具體檔案資料塊存盤. SecondaryNameNode協助NameNode進行元資料的備份. 

    HDFS的內部作業機制對客戶端保持透明, 客戶端請求訪問HDFS都是通過向NameNode申請來進行. 

    

  4.4 HDFS寫資料流程

  

    0) DataNode匯報自己的狀態資訊和塊串列

    1) 申請上傳檔案, 通過RPC與NameNode建立通訊

    2) NameNode檢驗是否有權限上傳, 父目錄是否存在, 有沒有同名的檔案

    3) 回傳是否可以上傳, 允許上傳

    4) 將檔案切割成大小為128M的block1

    5) 開始上傳第一個b1

    6) NameNode根據組態檔中指定的備份數量及副本放置策略進行檔案分配, 回傳可用的DataNode的地址, 通過機架感知, 選出DataNode的地址串列, 如node01, node03. 

    默認存盤策略由BlockPlacementPolicyDefault類支持, 也就是日常生活中提到的最經典的3副本策略. 

    HDFS集群節點非常多. 機架感知 -- 3副本機制

    判斷客戶端所在的位置

    1st replica 如果客戶端在當前HDFS集群的一臺上面, 第一個副本會放在這個客戶端所在的機器上. 

    2nd replica  第二個副本會去找另外一個機架中的一臺服務器, 也就是不同于第一個副本的所在的機架. 

    3rd replica 第三個副本會在第二個副本所在的機架, 第三個副本會再去找一個節點, 屬于不同的節點. 

    

    7) Client請求2臺DataNode中的node01上傳資料 (本質上是一個RPC呼叫, 建立pipeline) , node01收到請求會繼續呼叫node03, 將整個pipeline建立完成, 后逐級回傳客戶端. 

    8) Client開始想node01上傳第一個block (先從磁盤讀取資料放到一個本地記憶體快取) , 以packet為單位 (默認64KB) , node01收到一個packet就會傳給node03, node01每傳一個packet會放入一個應答佇列等待應答

    9) 資料被分割成一個個packet資料包在pipeline上一次傳輸, 在pipeline反方向上, 備份節點存盤成功后逐個發送ack正確碼, 最終由pipeline中第一個DataNode節點node01將pipeline ack確認碼發送給Client. 

    10) 依次上傳b2, b3 ......

  4.5 HDFS讀資料流程

 

    

    1) Client向NameNode發起RPC請求, 來確定請求檔案block所在的位置

    2) NameNode會視情況回傳檔案的部分或者全部block串列, 對于每個block, NameNode都會回傳含有該block副本的DataNode地址. 

    3) 這些回傳的DataNode地址, 會按照集群拓撲結構得出DataNode與客戶端的距離, 然后進行排序, 排序兩個規則: 網路拓撲結構中距離Client近的排靠前, 心跳機制中超時匯報的DataNode狀態為STALE, 這樣的排靠后. 

    4) Client選取排靠前的DataNode來讀取block, 如果客戶端本身就是DataNode, 那么將從本地直接獲取資料. 

    5) 底層上本質是建立Socket Stream (FSDataInputStream) , 重復的呼叫父類DataInputStream的read方法, 直到這個塊上的資料讀取完畢. 

    6) 當讀完串列的block后, 若檔案讀取還沒有結束, 客戶端會繼續向NameNode獲取下一批的block串列. 

    7) 讀取完一個block都會進行checksum驗證, 如果讀取DataNode時出現錯誤, Client會通知NameNode, 然后再從下一個擁有該block副本的DataNode繼續讀取. 

    8) read方法是并行的讀取block資訊, 不是一塊一塊的讀取. NameNode只是回傳Client請求包含塊的DataNode地址, 并不是回傳請求塊的資料. 

    9) 最終讀取來所有的block會合并成一個完整的最終檔案. 

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

標籤:大數據

上一篇:PB怎樣備份工程檔案比較好

下一篇:powerbuilder字體旋轉180度

標籤雲
其他(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)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more