成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

10億級數據量的系統性能優化設計,被驚艷到了

開發 架構
這篇文章,我們來聊一聊在十億級的大數據量技術挑戰下,世界上最優秀的大數據系統之一的Hadoop是如何將系統性能提升數十倍的?

首先一起來畫個圖,回顧一下Hadoop HDFS中的超大數據文件上傳的原理。

其實說出來也很簡單,比如有個十億數據量級的超大數據文件,可能都達到TB級了,此時這個文件實在是太大了。

此時,HDFS客戶端會給拆成很多block,一個block就128MB。

這個HDFS客戶端你可以理解為是云盤系統、日志采集系統之類的東西,比如有人上傳一個1TB的大文件到網盤,或者是上傳個1TB的大日志文件。

然后HDFS客戶端把一個一個的block上傳到第一個DataNode,第一個DataNode會把這個block復制一份,做一個副本發送給第二個DataNode,然后第二個DataNode發送一個block副本到第三個DataNode。

所以你會發現,一個block有3個副本,分布在三臺機器上。任何一臺機器宕機,數據是不會丟失的。

然后一個TB級大文件就被拆散成了N多個MB級的小文件存放在很多臺機器上了,這不就是分布式存儲么?

今天要討論的問題,就是那個HDFS客戶端上傳TB級大文件的時候,到底是怎么上傳呢

如果用一個比較原始的方式來上傳,我們大概能想到的是下面這個圖里的樣子。

其實很簡單,無非就是不停的從本地磁盤文件用輸入流讀取數據,然后讀到一點,就立馬通過網絡的輸出流寫到DataNode里去。

參見上圖,對文件的輸入流最多就是個FileInputStream,對DataNode的輸出流,最多就是個Socket返回的OutputStream,然后中間找一個小的內存byte[]數組,進行流對考就行了。從本地文件讀一點數據,就給DataNode發一點數據。

但是如果真是這么弄,性能真是極其的低下了,網絡通信講究的是適當頻率,每次batch批量發送,你得讀一大批數據,通過網絡通信發一批數據。不能讀一點點數據,就立馬來一次網絡通信,就發出去這一點點的數據。

如果按照上面這種原始的方式,絕對會導致網絡通信效率極其低下,大文件上傳性能很差。相當于你可能剛讀出來幾百個字節的數據,立馬就寫網絡,卡頓個比如幾百毫秒,然后再讀下一批幾百個字節的數據,再寫網絡卡頓個幾百毫秒,這個性能很差,幾乎在工業級的大規模分布式系統中,是無法容忍的。

Hadoop中的大文件上傳如何優化性能?我們來看看下面那張圖。

你需要自己創建一個針對本地TB級磁盤文件的輸入流,然后讀到數據之后立馬寫入HDFS提供的FSDataOutputStream輸出流。

這個FSDataOutputStream輸出流在干啥呢?他會天真的立馬把數據通過網絡傳輸寫給DataNode嗎?

答案當然是否定的!這么干的話,不就跟之前的那種方式一樣了!


1、Chunk緩沖機制

首先,數據會被寫入一個chunk緩沖數組,這個chunk是一個512字節大小的數據片段,你可以這么來理解。

然后這個緩沖數組可以容納多個chunk大小的數據在里面緩沖。光是這個緩沖,首先就可以讓客戶端快速的寫入數據了,不至于說幾百字節就要進行一次網絡傳輸,對吧?


2、Packet數據包機制

接著,當chunk緩沖數組都寫滿了之后,就會把這個chunk緩沖數組進行一下chunk切割,切割為一個一個的chunk,一個chunk是一個數據片段。然后多個chunk會直接一次性寫入另外一個內存緩沖數據結構,就是Packet數據包。

一個Packet數據包,設計為可以容納127個chunk,大小大致為64mb。所以說大量的chunk會不斷的寫入Packet數據包的內存緩沖中。通過這個Packet數據包機制的設計,又可以在內存中容納大量的數據,進一步避免了頻繁的網絡傳輸影響性能。


3、內存隊列異步發送機制

當一個Packet被塞滿了chunk之后,就會將這個Packet放入一個內存隊列來進行排隊,然后有一個DataStreamer線程會不斷的獲取隊列中的Packet數據包,通過網絡傳輸直接寫一個Packet數據包給DataNode。

如果一個Block默認是128mb的話,那么一個Block默認會對應兩個Packet數據包,每個Packet數據包是64MB。

也就是說傳送兩個Packet數據包DataNode之后,就會發一個通知說,一個Block的數據都傳輸完畢,那DataNode就知道自己收到了一個Block了,包含了人家發送過來的兩個Packet數據包。

總結:

ok,大家看完了上面的那個圖以及hadoop采取的大文件上傳機制,是不是感覺設計的很巧妙?

工業級的大規模分布式系統,都不會采取特別簡單的代碼和模式,那樣性能很低下。這里都有大量的并發優化、網絡IO優化、內存優化、磁盤讀寫優化的架構設計、生產方案在里面。

所以大家觀察上面那個圖,hdfs客戶端可以快速的將tb級大文件的數據讀出來,然后快速的交給hdfs的輸出流寫入內存,基于內存里的chunk緩沖機制、packet數據包機制、內存隊列異步發送機制,絕對不會有任何網絡傳輸的卡頓,導致大文件的上傳速度變慢。反而通過上述幾種機制,可以大幅度提升一個TB級大文件的上傳性能。

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-03-03 10:32:07

Mongodb億級數據量

2018-07-11 20:07:06

數據庫MySQL索引優化

2018-01-24 09:35:12

高并發數據庫設計水平切分

2021-06-29 08:12:22

MySQL數據分頁數據庫

2022-06-10 11:17:26

數據庫實踐

2024-04-18 09:00:00

數據存儲數據庫

2022-08-14 07:08:51

Hadoop契約監控機制

2018-04-19 09:10:17

數據分析列式存儲

2010-04-09 13:26:44

2019-03-05 10:16:54

數據分區表SQLserver

2021-03-16 07:41:00

數據分頁優化

2020-03-02 16:25:03

性能系統軟件

2022-10-14 17:24:35

MySQLSQL優化

2021-03-11 10:55:41

MySQL數據庫索引

2024-08-22 14:16:08

2021-08-10 08:44:13

系統性能優化

2019-05-27 09:56:00

數據庫高可用架構

2024-11-08 14:27:52

系統設計數據庫

2024-10-15 16:31:30

2018-01-29 09:50:16

數據庫設計水平切分
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色网在线观看 | 欧美一区二区三区 | 最新毛片网站 | 成人毛片视频免费 | 成人黄色av网址 | 天堂色 | 午夜免费观看 | 色综合视频 | 国产毛片av| 国产三区四区 | 亚洲精品一区久久久久久 | 久久精品欧美一区二区三区不卡 | 天天草天天干 | 午夜小电影| 黄色大片毛片 | 欧美一区二区三区久久精品 | 欧美日韩在线视频一区 | 亚洲二区在线 | 蜜桃视频在线观看免费视频网站www | 青青久在线视频 | 婷婷丁香在线视频 | 国产欧美一区二区三区久久 | 亚洲福利一区二区 | 91精品久久久久久久久中文字幕 | 欧美一级片在线观看 | 久久久久国产 | 成人午夜免费福利视频 | 妞干网视频| 国产乱码精品1区2区3区 | av特级毛片| 国产精品久久久久久久久久久免费看 | 免费观看一区二区三区毛片 | 欧美视频精品 | 亚洲永久入口 | 亚洲成人精品 | 欧美 日韩 在线播放 | www.yw193.com | 91精品国产综合久久精品 | 欧美精品国产精品 | 成人性视频免费网站 | 香蕉视频91 |