主頁 > 資料庫 > 我眼中的大資料(二)——HDFS

我眼中的大資料(二)——HDFS

2022-09-23 08:22:51 資料庫

Hadoop的第一個產品是HDFS,可以說分布式檔案存盤是分布式計算的基礎,也可見分布式檔案存盤的重要性,如果我們將大資料計算比作烹飪,那么資料就是食材,而Hadoop分布式檔案系統HDFS就是燒菜的那口大鍋,這些年來,各種計算框架、各種演算法、各種應用場景不斷推陳出新,讓人眼花繚亂,但是大資料存盤的王者依然是HDFS,

為什么HDFS的地位如此穩固呢?在整個大資料體系里面,最寶貴、最難以代替的資產就是資料,大資料所有的一切都要圍繞資料展開,HDFS作為最早的大資料存盤系統,存盤著寶貴的資料資產,各種新的演算法、框架要想得到人們的廣泛使用,必須支持HDFS才能獲取已經存盤在里面的資料,所以大資料技術越發展,新技術越多,HDFS得到的支持越多,我們越離不開HDFS,HDFS也許不是最好的大資料存盤技術,但依然最重要的大資料存盤技術

那我們就從HDFS的原理說起,今天我們來聊聊HDFS是如何實作大資料高速、可靠的存盤和訪問的,

Hadoop分布式檔案系統HDFS的設計目標是管理數以千計的服務器、數以萬計的磁盤,將這么大規模的服務器計算資源當作一個單一的存盤系統進行管理,對應用程式提供數以PB計的存盤容量,讓應用程式像使用普通檔案系統一樣存盤大規模的檔案資料,

如何設計這樣一個分布式檔案系統?其實思路很簡單,

我們想想RAID磁盤陣列存盤,RAID將資料分片后在多塊磁盤上并發進行讀寫訪問,從而提高了存盤容量、加快了訪問速度,并通過資料的冗余校驗提高了資料的可靠性,即使某塊磁盤損壞也不會丟失資料,將RAID的設計理念擴大到整個分布式服務器集群,就產生了分布式檔案系統,Hadoop分布式檔案系統的核心原理就是如此,

和RAID在多個磁盤上進行檔案存盤及并行讀寫的思路一樣,HDFS是在一個大規模分布式服務器集群上,對資料分片后進行并行讀寫及冗余存盤,因為HDFS可以部署在一個比較大的服務器集群上,集群中所有服務器的磁盤都可供HDFS使用,所以整個HDFS的存盤空間可以達到PB級容量,

上圖是HDFS的架構圖,從圖中你可以看到HDFS的關鍵組件有兩個,一個是DataNode,一個是NameNode,

DataNode負責檔案資料的存盤和讀寫操作,HDFS將檔案資料分割成若干資料塊(Block),每個DataNode存盤一部分資料塊,這樣檔案就分布存盤在整個HDFS服務器集群中,應用程式客戶端(Client)可以并行對這些資料塊進行訪問,從而使得HDFS可以在服務器集群規模上實作資料并行訪問,極大地提高了訪問速度,

在實踐中,HDFS集群的DataNode服務器會有很多臺,一般在幾百臺到幾千臺這樣的規模,每臺服務器配有數塊磁盤,整個集群的存盤容量大概在幾PB到數百PB,

NameNode負責整個分布式檔案系統的元資料(MetaData)管理,也就是檔案路徑名、資料塊的ID以及存盤位置等資訊,HDFS為了保證資料的高可用,會將一個資料塊復制為多份(預設情況為3份),并將多份相同的資料塊存盤在不同的服務器上,甚至不同的機架上,這樣當有磁盤損壞,或者某個DataNode服務器宕機,甚至某個交換機宕機,導致其存盤的資料塊不能訪問的時候,客戶端會查找其備份的資料塊進行訪問,

下面這張圖是資料塊多份復制存盤的示意,圖中對于檔案/users/sameerp/data/part-0,其復制備份數設定為2,存盤的BlockID分別為1、3,Block1的兩個備份存盤在DataNode0和DataNode2兩個服務器上,Block3的兩個備份存盤DataNode4和DataNode6兩個服務器上,上述任何一臺服務器宕機后,每個資料塊都至少還有一個備份存在,不會影響對檔案/users/sameerp/data/part-0的訪問,

和RAID一樣,資料分成若干資料塊后存盤到不同服務器上,可以實作資料大容量存盤,并且不同分片的資料可以并行進行讀/寫操作,進而實作資料的高速訪問,你可以看到,HDFS的大容量存盤和高速訪問相對比較容易實作,但是HDFS是如何保證存盤的高可用性呢?

我們嘗試從不同層面來討論一下HDFS的高可用設計,

1.資料存盤故障容錯

磁盤介質在存盤程序中受環境或者老化影響,其存盤的資料可能會出現錯亂,HDFS的應對措施是,對于存盤在DataNode上的資料塊,計算并存盤校驗和(CheckSum),在讀取資料的時候,重新計算讀取出來的資料的校驗和,如果校驗不正確就拋出例外,應用程式捕獲例外后就到其他DataNode上讀取備份資料,

2.磁盤故障容錯

如果DataNode監測到本機的某塊磁盤損壞,就將該塊磁盤上存盤的所有BlockID報告給NameNode,NameNode檢查這些資料塊還在哪些DataNode上有備份,通知相應的DataNode服務器將對應的資料塊復制到其他服務器上,以保證資料塊的備份數滿足要求,

3.DataNode故障容錯

DataNode會通過心跳和NameNode保持通信,如果DataNode超時未發送心跳,NameNode就會認為這個DataNode已經宕機失效,立即查找這個DataNode上存盤的資料塊有哪些,以及這些資料塊還存盤在哪些服務器上,隨后通知這些服務器再復制一份資料塊到其他服務器上,保證HDFS存盤的資料塊備份數符合用戶設定的數目,即使再出現服務器宕機,也不會丟失資料,

4.NameNode故障容錯

NameNode是整個HDFS的核心,記錄著HDFS檔案分配表資訊,所有的檔案路徑和資料塊存盤資訊都保存在NameNode,如果NameNode故障,整個HDFS系統集群都無法使用;如果NameNode上記錄的資料丟失,整個集群所有DataNode存盤的資料也就沒用了,

所以,NameNode高可用容錯能力非常重要,NameNode采用主從熱備的方式提供高可用服務,請看下圖,

集群部署兩臺NameNode服務器,一臺作為主服務器提供服務,一臺作為從服務器進行熱備,兩臺服務器通過ZooKeeper選舉,主要是通過爭奪znode鎖資源,決定誰是主服務器,而DataNode則會向兩個NameNode同時發送心跳資料,但是只有主NameNode才能向DataNode回傳控制資訊,

正常運行期間,主從NameNode之間通過一個共享存盤系統shared edits來同步檔案系統的元資料資訊,當主NameNode服務器宕機,從NameNode會通過ZooKeeper升級成為主服務器,并保證HDFS集群的元資料資訊,也就是檔案分配表資訊完整一致,

對于一個軟體系統而言,性能差一點,用戶也許可以接受;使用體驗差,也許也能忍受,但是如果可用性差,經常出故障導致不可用,那就比較麻煩了;如果出現重要資料丟失,那開發工程師絕對是攤上大事了,

而分布式系統可能出故障地方又非常多,記憶體、CPU、主板、磁盤會損壞,服務器會宕機,網路會中斷,機房會停電,所有這些都可能會引起軟體系統的不可用,甚至資料永久丟失,

所以在設計分布式系統的時候,軟體工程師一定要繃緊可用性這根弦,思考在各種可能的故障情況下,如何保證整個軟體系統依然是可用的,

根據我的經驗,一般說來,常用的保證系統可用性的策略有冗余備份、失效轉移和降級限流,雖然這3種策略你可能早已耳熟能詳,但還是有一些容易被忽略的地方,

比如冗余備份,任何程式、任何資料,都至少要有一個備份,也就是說程式至少要部署到兩臺服務器,資料至少要備份到另一臺服務器上,此外,稍有規模的互聯網企業都會建設多個資料中心,資料中心之間互相進行備份,用戶請求可能會被分發到任何一個資料中心,即所謂的異地多活,在遭遇地域性的重大故障和自然災害的時候,依然保證應用的高可用,

當要訪問的程式或者資料無法訪問時,需要將訪問請求轉移到備份的程式或者資料所在的服務器上,這也就是失效轉移,失效轉移你應該注意的是失效的鑒定,像NameNode這樣主從服務器管理同一份資料的場景,如果從服務器錯誤地以為主服務器宕機而接管集群管理,會出現主從服務器一起對DataNode發送指令,進而導致集群混亂,也就是所謂的“腦裂”,這也是這類場景選舉主服務器時,引入ZooKeeper的原因,ZooKeeper的作業原理,我將會在后面專門分析,

當大量的用戶請求或者資料處理請求到達的時候,由于計算資源有限,可能無法處理如此大量的請求,進而導致資源耗盡,系統崩潰,這種情況下,可以拒絕部分請求,即進行限流;也可以關閉部分功能,降低資源消耗,即進行降級,限流是互聯網應用的常備功能,因為超出負載能力的訪問流量在何時會突然到來,你根本無法預料,所以必須提前做好準備,當遇到突發高峰流量時,就可以立即啟動限流,而降級通常是為可預知的場景準備的,比如電商的“雙十一”促銷,為了保障促銷活動期間應用的核心功能能夠正常運行,比如下單功能,可以對系統進行降級處理,關閉部分非重要功能,比如商品評價功能,

我們小結一下,看看HDFS是如何通過大規模分布式服務器集群實作資料的大容量、高速、可靠存盤、訪問的,

1.檔案資料以資料塊的方式進行切分,資料塊可以存盤在集群任意DataNode服務器上,所以HDFS存盤的檔案可以非常大,一個檔案理論上可以占據整個HDFS服務器集群上的所有磁盤,實作了大容量存盤,

2.HDFS一般的訪問模式是通過MapReduce程式在計算時讀取,MapReduce對輸入資料進行分片讀取,通常一個分片就是一個資料塊,每個資料塊分配一個計算行程,這樣就可以同時啟動很多行程對一個HDFS檔案的多個資料塊進行并發訪問,從而實作資料的高速訪問,關于MapReduce的具體處理程序,我們會在專欄后面詳細討論,

3.DataNode存盤的資料塊會進行復制,使每個資料塊在集群里有多個備份,保證了資料的可靠性,并通過一系列的故障容錯手段實作HDFS系統中主要組件的高可用,進而保證資料和整個系統的高可用,

?

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

標籤:其他

上一篇:SQLite基礎語法速用大法(Flutter)

下一篇:返回列表

標籤雲
其他(145170) Python(37270) JavaScript(24901) Java(16460) C(14967) 區塊鏈(8236) C#(7957) AI(7469) 爪哇(7405) html(6776) MySQL(6722) 基礎類(6313) sql(6084) 熊猫(6051) PHP(5787) 数组(5741) R(5305) 反应(5188) Linux(5180) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4413) 数据框(4310) css(4249) 节点.js(4029) C語言(3288) json(3241) 列表(3120) C++語言(3117) 扑(3085) 安卓(2997) 打字稿(2957) VBA(2784) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2398) ASP.NET(2364) MongoDB(2317) 麻木的(2285) 正则表达式(2232) 字典(2211) 循环(2197) 迅速(2174) 擅长(2159) 镖(2150) 功能(1967) Web開發(1951) python-3.x(1918) 弹簧靴(1911) xml(1884) for循环(1841) 谷歌表格(1837) Unity3D(1824) PostgreSQL(1808) .NET技术(1800) 網絡通信(1793) .NETCore(1790) 蟒蛇-3.x(1774)

熱門瀏覽
  • 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
最新发布
  • 我眼中的大資料(二)——HDFS

    Hadoop的第一個產品是HDFS,可以說分布式檔案存盤是分布式計算的基礎,也可見分布式檔案存盤的重要性。如果我們將大資料計算比作烹飪,那么資料就是食材,而Hadoop分布式檔案系統HDFS就是燒菜的那口大鍋。這些年來,各種計算框架、各種演算法、各種應用場景不斷推陳出新,讓人眼花繚亂,但是大資料存盤的 ......

    uj5u.com 2022-09-23 08:22:51 more
  • SQLite基礎語法速用大法(Flutter)

    前記 (可跳過這段來自本up的羅里吧嗦。。。) 在做上一個專案的時候,需要用到本地資料庫,以前做公司專案用的是輕量級資料庫Realm,做自己小專案用的是greenDAO,大學學的是SQL server,但是在flutter中,相關插件用的資料庫是SQLite(sqflite插件),但本人還沒接觸過S ......

    uj5u.com 2022-09-23 08:22:44 more
  • 他來了!袋鼠云大資料基礎平臺EasyMR正式上線

    7月28日,在袋鼠云2022產品發布會上,袋鼠云技術負責人思樞正式宣布旗下產品「大資料基礎平臺EasyMR」發布。 EasyMR是袋鼠云自研的大資料基礎平臺,提供Hadoop、Hive、Spark、Trino、HBase、Kafka等組件,完全兼容Apache開源生態;支持企業級安全管控,一鍵開啟L ......

    uj5u.com 2022-09-23 08:22:27 more
  • SQLite基礎語法速用大法(Flutter)

    前記 (可跳過這段來自本up的羅里吧嗦。。。) 在做上一個專案的時候,需要用到本地資料庫,以前做公司專案用的是輕量級資料庫Realm,做自己小專案用的是greenDAO,大學學的是SQL server,但是在flutter中,相關插件用的資料庫是SQLite(sqflite插件),但本人還沒接觸過S ......

    uj5u.com 2022-09-23 08:21:57 more
  • MySQL InnoDB 鎖的二三事

    近日, 在一個小型專案中, 遇到了一個觸及我知識盲區的bug. 專案用的是MySQL 5.7.25, 其中有一張表 config_data, 包含四個欄位, id, name, value, expireAt. 其中id為主鍵, name建有唯一索引, 表的用途大概就是存放一些有時效性的配置. 以上 ......

    uj5u.com 2022-09-23 08:21:21 more
  • 我眼中的大資料(二)——HDFS

    Hadoop的第一個產品是HDFS,可以說分布式檔案存盤是分布式計算的基礎,也可見分布式檔案存盤的重要性。如果我們將大資料計算比作烹飪,那么資料就是食材,而Hadoop分布式檔案系統HDFS就是燒菜的那口大鍋。這些年來,各種計算框架、各種演算法、各種應用場景不斷推陳出新,讓人眼花繚亂,但是大資料存盤的 ......

    uj5u.com 2022-09-23 08:21:07 more
  • 他來了!袋鼠云大資料基礎平臺EasyMR正式上線

    7月28日,在袋鼠云2022產品發布會上,袋鼠云技術負責人思樞正式宣布旗下產品「大資料基礎平臺EasyMR」發布。 EasyMR是袋鼠云自研的大資料基礎平臺,提供Hadoop、Hive、Spark、Trino、HBase、Kafka等組件,完全兼容Apache開源生態;支持企業級安全管控,一鍵開啟L ......

    uj5u.com 2022-09-23 08:20:45 more
  • MySQL DDL執行方式-Online DDL介紹

    日常開發我們對一條DML陳述句較為熟悉,很多開發人員都了解sql的執行程序,比較熟悉,但是DDL是如何執行的呢,大部分開發人員可能不太關心,也認為沒必要了解,都交給DBA吧。 其實不然,了解一些能盡量避開一些ddl的坑,那么下面帶大家一起了解一下DDL執行的方式,。 ......

    uj5u.com 2022-09-22 10:08:55 more
  • MySQL DDL執行方式-Online DDL介紹

    日常開發我們對一條DML陳述句較為熟悉,很多開發人員都了解sql的執行程序,比較熟悉,但是DDL是如何執行的呢,大部分開發人員可能不太關心,也認為沒必要了解,都交給DBA吧。 其實不然,了解一些能盡量避開一些ddl的坑,那么下面帶大家一起了解一下DDL執行的方式,。 ......

    uj5u.com 2022-09-22 10:08:03 more
  • 一條sql了解MYSQL的架構設計

    對于一個服務端開發來說 MYSQL 可能是他使用最熟悉的資料庫工具,然而,大部分的Java工程師對MySQL的了解和掌握程度,大致就停留在這么一個階段:它可以建庫、建表、建索引,然后就是對里面的資料進行增刪改查,陳述句性能有點差?沒關系,在表里建幾個索引或者調整一下查詢邏輯就可以了,一條sql,MYS... ......

    uj5u.com 2022-09-21 11:42:20 more