從0開始學人工智能測試節選:Spark -- 結構化數據領域中測試人員的萬金油技術(三)

分布式計算原理

分布式計算的原理總結一句話就是:分而治之。

  1. 把數據分片,存在不同的機器中,解決數據存儲的壓力。
  2. 客戶端和服務端之間通過相關協議來自動的完成在不同的機器之間進行數據的存取,用戶并不感知數據的物理存儲結構。 用戶面對的只有hdfs://xxx/user/xx.txt這樣的路徑地址。 其余的都由客戶端和服務端自動完成。

所有的分布式軟件都是分而治之的思路, 當數據量大到了單機無法承載的時候, 那么就利用上面的原理 ,把數據分布到不同的機器中。 這樣的架構也就可以支持橫向擴展,也就是當存儲軟件的性能或者磁盤空間不夠用時, 只要加機器就可以了。

下面是HDFS(一個分布式文件系統,屬于hadoop生態)的架構圖:

  1. DataNode:真正存儲數據的節點
  2. NameNode:元數據服務器,存儲所有數據的元信息,比如數據存儲在哪些機器中的哪些路徑。
  3. NameNode(standby):NameNode的備用節點,當主NameNode故障后,該服務會接替成為NameNode
  4. Hdfs client會負責查詢NameNode獲取數據分片信息并處理后返回給用戶,用戶不感知數據分布情況。

在HDFS中, NameNode負責存儲所有文件的元數據, 實際上所有的分布式文件存儲軟件都有一個類似NameNode的角色,畢竟數據分散在N個不同的機器中, 為了不讓用戶感知到這復雜的文件分布, 所以需要有這樣的一個角色來保存這些文件的元數據,這樣客戶端才可以跟服務端交互自動的完成文件的整合工作,用戶也可以在不感知的前提下讀寫文件, 大大降低了使用的復雜度。

需要注意的是對于HDFS來說, 可以支持的文件數量都是有限的,并且對于小文件的存儲非常的不友好。 因為HDFS是基于數據都是大數據的前提下進行設計的,所以它在文件切片并保存在不同的機器上的時候,是默認128M為一個block(塊)進行存儲,即便文件不足128M也會按128M進行保存。 也就是如果一個小文件只有28M,那么在HDFS中也會占用128的存儲空間, 這100M就是浪費的。 并且對于HDFS來說,我們可以看到它的設計里雖然可以有多個NameNode,但在同一個時間內只能有一個NameNode對外提供服務。 這是出于高可用的考慮(簡化元數據在多個namenode同步的問題,因為只有一個namenode在線, 所以剩下了很多數據一致性的問題),但它的缺點就是它沒有負載均衡的能力,當文件數量過多時,就會對NameNode產生很大的壓力, 使得集群整體的性能受到影響。所以我們在測試分布式存儲軟件本身的時候,也需要測試它能夠承載的文件數量。 所以一般在分布式存儲軟件中,或者大數據系統中, 一般測試人員都會測試海量小文件的場景 -- 構造海量的小文件并保存在存儲系統中,驗證它的各項性能指標。 后面講到造數工具的時候, 會演示如何在短時間內構造這樣大批量的數據。

分布式計算

分布式計算的原理也是一樣的,都是分而治之:

數據存儲的時候可以把數據分布在不同的機器中, 那么在計算時也可以把一個大的任務拆分成N個小任務在調度到不同的機器中來完成。 它的大概過程是這樣的:

  1. 計算任務分布在不同的節點中,各自掌握一段數據分片
  2. 每個計算任務各自計算自己掌握的數據
  3. 各個任務計算完畢后進行匯總并返回給客戶端

shuffle與數據傾斜

當我們了解到分布式計算的基本運算原理后,就可以開始了解在大數據領域中最著名的一個設計, 同樣也號稱是大數據領域中的頭號性能殺手 -- shuffle。 這是從 MapReduce 時代就開始的分布式計算獨特的設計理念。 理解好 shuffle 的原理對學習 spark 甚至是任何一門大數據技術都是至關重要的。Shuffle 中文翻譯為 “洗牌”,需要 Shuffle 的關鍵性原因是某種具有共同特征的數據需要最終匯聚到一個 partition 上進行計算。為什么要這么做呢? 因為對于一個分布式計算框架來說,網絡通信的開銷是十分昂貴的。假設我們有一千個計算節點在并發的執行一個計算任務。它們要聚合,計算,統計。數據在這一千個節點之間流動會造成相當大的網絡負擔。所以 spark 的設計者們為了減少網絡開銷而設計了 shuffle。它的原理就是盡量把一個計算任務所要處理的所有數據都聚集在一個 partition 上,這樣就節省了很多的網絡開銷。 例如我們今天學到的 groupByKey() 聚合操作,spark 一旦執行到這一步的時候,會把所有 key 相同的數據分配到同一個 partition 上以供后續操作。例如 key 為 A 的行分配到 X 節點進行計算,key 為 B 的行分配到 Y 節點進行計算,這樣在之后的計算中就免去了網絡開銷。而這個過程就是 shuffle。所謂洗牌就是這個意思了。

我們了解了 shuffle 相關的概念和原理后其實可以發現一個問題,那就是 shuffle 比較容易造成數據傾斜的情況。 例如上面我們看到的圖,在這批數據中,hello 這個單詞的行占據了絕大部分,當我們執行 groupByKey 的時候觸發了 shuffle。這時候大部分的數據 (Hello) 都匯集到了一個 partition 上。這種極端的情況就會造成著名的長尾現象,就是說由于大部分數據都匯集到了一個 partition 而造成了這個 partition 的 task 運行的十分慢。而其他的 task 早已完成,整個任務都在等這個大尾巴task 的結束。 這種現象破壞了分布式計算的設計初衷,因為最終大部分的計算任務都在一個單點上執行了。所以極端的數據分布就成為了機器學習和大數據處理這類產品的勁敵,我跟我司的研發人員聊的時候,他們也覺得數據傾斜的情況比較難處理,當然我們可以做 repartition(重新分片) 來重新整合 parition 的數量和分布等操作,以及避免或者減少 shuffle 的成本,也可以重新分配key來避免數據傾斜,各家不同的業務有不同的做法。在做這類產品的性能測試的時候,也跟我們以往的互聯網模式不同,產品的壓力不在于并發量上,而在于數據量和數據分布上(大數據產品中,批處理業務很少有極高的并發操作,只有流計算里才會有高并發,而流計算我們放到以后的章節來講)。

總而言之對于大數據產品來說,數據是否符合真實場景(包括數據的分布,分片,行數,列數等等)就決定性能測試的結果是否準確。 在很多產品中很難從線上直接拉取數據,有些場景是因為線上也沒有足夠的高質量數據,也有的是因為數據量實在過于龐大, 比如我們曾經測試過百億,千億和萬億規模的數據。 即便線上環境有這樣龐大的數據, 但要把數據從線上同步到測試環境也會長期占用極其龐大的網絡帶寬, 這為線上帶來了很大的風險。 同時對于很多做TOB類型的大數據產品來說(大數據產品大多都是TOB的,當然不一定是私有云, 也可能是公有云), 客戶數據是保密的,我們沒有辦法直接拿現成客戶數據。

所以綜上所述, 測試人員需要開發一款造數工具來在短時間內構建海量的數據, 而這部分內容,我將會在下一個章節講解。

?更多內容歡迎來到我的知識星球:
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22116.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UIKit之App界面Demo

需求 實現簡單的APP界面 功能: 實現滾動實現上層、下層橫欄滾動時穿透效果(永遠浮在表面,不跟著滾動)。暫用UIView代替,還沒學Bar。 分析: 知識點: 實現鼠標拖動的上下滾動:當…

小紅書前端2輪面試期望22K,全程問低代碼設計

一面(通過) 1、好,那我們開始把,先簡單介紹一下自己的一個經歷,以及自己有亮點的項目?balabala 2、你可以這樣介紹:在這里邊主要負責哪幾個項目,哪些項目是比較有亮點的&#xff0…

python用PyPDF2函數庫方法對pdf文件切割

煩透了那些軟件動不動就要收費,于是自己嘗試碼程序處理pdf分割。 由于PyPDF2更新到了3.0之后,之前網上的舊代碼無法使用,查了半天沒出準譜,結果百度AI生成了代碼,一試,成了! 果然,…

代碼隨想錄-算法訓練營day60【單調棧03:柱狀圖中最大的矩形】

代碼隨想錄-035期-算法訓練營【博客筆記匯總表】-CSDN博客 第十章 單調棧part03有了之前單調棧的鋪墊,這道題目就不難了。 ● 84.柱狀圖中最大的矩形https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.htm…

智享直播(三代)2024年:打造24/7實景無人直播,引領年輕資產創業新紀元!

在21世紀的數字化浪潮中,直播行業以其獨特的魅力和無限的可能性,正在全球范圍內掀起一場前所未有的( keJ0277 )創業革命。而在這場革命中,智享直播(三代)以其創新的技術理念和前瞻的戰略布局,立志于2024年打…

怎么用電腦錄制視頻?小白也能快速上手

隨著網絡技術的發展,電腦錄制視頻已經成為了許多人的日常需求,無論是游戲玩家想錄制自己的精彩操作,還是上班族需要錄制屏幕演示,一款好用的錄屏軟件變得尤為重要。可是你知道怎么用電腦錄制視頻嗎?本文將介紹兩種電腦…

I2C通信協議

I2C通信協議 項目要求是,通過通信線,是實現單片機讀寫外掛模塊寄存器的功能,至少實現,在指定位置寫寄存器和在指定位置讀寄存器,實現了讀寫寄存器,就實現對模塊的控制。 MPU6050,OLED&#xf…

【ARM】Fusa Compiler 6.16 LTS的安全認證報告獲取

【更多軟件使用問題請點擊億道電子官方網站】 1、 文檔目標 了解ARM的Arm Compiler for Embedded FuSa 6.16 LTS的安全認證證書和報告的獲取 2、 問題場景 對于使用了ARM DS Gold/Platinum、MDK pro或者Arm Compiler for Embedded FuSa 6.16 LTS產品的客戶。在對于最終的產品…

生產問題排查:springboot項目啟動時注冊nacos失敗或運行時從nacos閃退

文章目錄 一、引出問題二、解決方案1、使用actuator健康檢查2、項目啟動時判斷nacos是否正常連接3、k8s設置探針 一、引出問題 生產項目是用k8s部署的,最近經常遇到啟動時注冊不到nacos(查找nacos的host地址找不到),或者運行的好…

有文字轉語音真人發聲嗎?這5個配音工具堪比真人配音

青春是一首永不老去的歌,它鐫刻在生命的唱片上,永不退色。 每當我們聽到那些熟悉的旋律,心中總會涌起一股暖流,仿佛回到了那個充滿活力和夢想的年代。借助現代科技的力量,我們可以通過文字轉語音軟件,讓這…

.NET集成DeveloperSharp實現圖片的裁剪、縮放、與加水印

🏆作者:科技、互聯網行業優質創作者 🏆專注領域:.Net技術、軟件架構、人工智能、數字化轉型、DeveloperSharp、微服務、工業互聯網、智能制造 🏆歡迎關注我(Net數字智慧化基地),里面…

Apache Doris 基礎 -- 數據表設計(表索引)

1、索引概述 索引用于幫助快速過濾或搜索數據。目前,Doris支持兩種類型的索引:內置智能索引和用戶創建的二級索引。 內置智能索引 排序鍵和前綴索引:Apache Doris基于排序鍵以有序的方式存儲數據。它為每1024行數據創建一個前綴索引。索引中的鍵是當前1024行組的…

github搭建個人博客

準備工作 windows安裝nodejs windows安裝git windows安裝hexo 擁有gitee個人賬戶 配置信息 通過gitee創建博客倉庫 登錄gitee平臺,進入主界面,右側加號,新建倉庫,注意:倉庫名稱和gitee用戶名稱一致 生成/添加 SSH 公…

初級網絡工程師之入門到入獄(一)

本文是我在學習過程中記錄學習的點點滴滴,目的是為了學完之后鞏固一下順便也和大家分享一下,日后忘記了也可以方便快速的復習。 網絡工程師從入門到入獄 前言一、交換機二、路由器三、DHCP(動態主機配置協議)四、路由器配置 DHCP自…

【golang】go語言讀取Excel表格中的數據

導入庫基本用法封裝 在Go語言中,可以使用第三方庫來讀取Excel文件。 常用的庫是github.com/tealeg/xlsx,提供了處理Excel文件的功能。 導入庫 首先,安裝"github.com/tealeg/xlsx"庫。可以通過以下命令在終端中安裝: g…

Transformer系列:Greedy Search貪婪搜索解碼流程原理解析

解碼器預測流程簡述 Encoder-Decoder這類框架需要在解碼器中分別拿到前文已經翻譯的輸入,以及編碼器的輸出這兩個輸入,一起預測出下一個翻譯的單詞。在訓練階段,一個句子通過右移一位的方式轉化為從第二個詞到最后一個詞的逐位預測任務&…

Springboot vue elementui 前后端分離 事故災害案例管理系統

源碼鏈接 系統演示:https://pan.baidu.com/s/1hZQ25cpI-B4keFsZdlzimg?pwdgw48

【Golang】go語言寫入數據并保存Excel表格

導入包創建文件添加表格添加行添加單元格保存文件封裝 導入包 首先,安裝github.com/tealeg/xlsx庫。可以通過以下命令在終端中安裝: go get github.com/tealeg/xlsx創建文件 指定好文件的名字 fileName : "D:\\a.xlsx"再判斷文件是否存在&…

Java集合概述

分類 分為兩大類:Collection接口類和Map接口類 這兩個接口都繼承自一個共同的接口:Iterable接口,意為可迭代的 Iterable接口當中有一個Iterator迭代器接口對象,作為接口的變量(public static final修飾)…

Win10字體模糊?記好這5個方法,解決問題很簡單!

“我的電腦是win10的,不知道是什么原因,電腦字體總是很模糊,大家有什么方法可以解決這個問題嗎?” 在數字時代的浪潮中,Win10以其出色的性能和豐富的功能贏得了廣大用戶的青睞。然而,就像任何一款操作系統一…