測試開發進階:一文教你從0到1搞懂大資料測試!

狂師發表於2021-07-09

1.什麼是大資料

大資料是一個大的資料集合,通過傳統的計算技術無法進行處理。這些資料集的測試需要使用各種工具、技術和框架進行處理。大資料涉及資料建立、儲存、檢索、分析,而且它在數量、多樣性、速度方法都很出色,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的資訊資產。

2.大資料測試型別

測試大資料應用程式更多的是驗證其資料處理,而不是測試軟體產品的個別功能。當涉及到大資料測試時,效能和功能測試是關鍵。
處理可以是三種型別

  • 批量
  • 實時
  • 互動
    在測試應用程式之前,有必要檢查資料的質量,並將其視為資料庫測試的一部分。它涉及檢查各種欄位,如一致性,準確性,重複,一致性,有效性,資料完整性等。

3.測試步驟

3.1 步驟一、資料預處理驗證

在進行大資料測試時,首先要預hadoop前驗證資料的準確性等等。
我們資料來源可能是關聯式資料庫、日誌系統、社交網路等等,所有我們應該確保資料能正確的載入到系統中,我們要驗證:
載入的資料和源資料是一致的
確保正確的提取和載入資料至hdfs中

3.2 步驟二、Map Reduce驗證

在進行大資料測試時,第二個關鍵步驟是Map Reduce驗證。在本階段,我們主要驗證每一個處理節點的業務邏輯是否正確,並驗證在多個執行後,確保:

  • Map Reduce過程工作正常
  • 資料聚合、分離規則已經實現
  • 資料key-value關係已正確生成
  • 驗證經過map reduce後資料的準確性等特性

3.3 步驟三、結果驗證

在本階段主要驗證在經過大資料工具/框架處理後,生成的最終資料的成果。
檢查轉換(Transformation)規則被正確應用
檢查資料完整性和成功的資料載入到目標系統中

4.效能測試

效能測試是評估一個大資料分析系統的最為關鍵的維度,大資料系統效能主要包括吞吐量,任務完工時間,記憶體利用率等多個指標,可反應大資料分析平臺的處理能力,資源利用能力等效能。可通過hadoop效能監控器來監測執行狀態效能指標和瓶頸問題,效能測試採用自動化化方式進行,測試系統在不同負載情況下的效能。

5.容錯性測試

可從部分失效中自動恢復,而且不會驗證的影響整體效能,特別地,當故障發生時,大資料分析系統應該在進行恢復的同時繼續以可接受的方式進行操作,在發生錯誤時某種程度上可以繼續操作,需根據應用場景來設計解決方案和具體部署,然後手動測試。

6.可用性測試

高可用性已是大資料分析不可或缺的特性之一,從而保證資料應用業務的連續性.大資料高可用性對很多應用非常關鍵,需要嚴格進行測試和驗證,以手動測試為主。

7.擴充套件性測試

彈性擴充套件能力對於大資料時代的檔案系統尤其重要,檔案系統擴充套件性測試主要包括測試系統彈性擴充套件能力(擴充套件/回縮)及擴充套件系統帶來的效能影響,驗證是否具有線性擴充套件能力,以手動測試為主。

8.穩定性測試

大資料分析系統通常是不間斷長期執行,穩定性的重要性不言而喻,穩定測試主要驗證系統在長時間(7/30/180/365*24)允許下,系統是否仍然能夠正常執行,功能是否正常.穩定性測試通常採用自動化方式進行,LTP,10ZONE,POSTMARK,FIO等工具對測試系統產生負載,同時需要驗證功能。

9.部署方式測試

大資料具備scale-out的特點,能夠構建大規模,高效能的檔案系統叢集。針對不同應用和解決方案,檔案系統部署方式會有顯著不同;部署方式測試需要測試不同場景下的系統部署方式,包括自動安裝配置,叢集規模,硬體配置(伺服器,儲存,網路),自動負載均衡等,這部分測試不大可能進行自動化測試,需要根據應用場景來設計解決方案和具體部署,再進行手動測試。

10.資料一致性測試

這裡的資料一致性是指檔案系統中的資料與從外部寫入前的資料保持一致,即寫入資料與讀出資料始終是一致的。資料一致效能夠表明檔案系統可保證資料的完整性,不會導致資料丟失或資料錯誤,這是檔案系統最基本的功能,測試可用diff,md5sum編寫指令碼自動化測試,LTP也提供了資料一致性的測試工具。

11.壓力測試

大資料分析系統的負載能力是存在上限的,系統過載時,系統就可能存在效能下降,功能異常,拒絕訪問等問題。壓力測試是驗證系統造大壓力下,包括資料多客戶端,高OPS壓力,高IOPS/吞吐量壓力,系統是否仍然能夠正常執行,功能是否正常,系統資源消耗情況,從而為大資料運營提供依。

12.大資料技術板塊劃分

  • 資料採集:flume kafka logstash filebeat …
  • 資料儲存:mysql redis hbase hdfs …

雖然mysql不屬於大資料範疇 但是我在這也列出來了,因為你在工作中離不開它

  • 資料查詢:hive impala elasticsearch kylin …
  • 資料計算
  • 實時計算:storm sparkstreaming flink …
  • 離線計算:hadoop spark …
  • 其他框架: zookeeper …

13.大資料學習步驟

1)linux基礎和javase基礎【包含mysql】

這些是基本功,剛開始也不可能學的很精通,最起碼要對linux中的一些基本的命令混個臉熟,後面學習各種框架的時候都會用到,用多了就熟悉了。javase的話建議主要看物件導向,集合,io,多執行緒,以及jdbc操作即可

2)zookeeper

zookeeper是很多大資料框架的基礎,中文名稱是動物園的意思,因為目前的大資料框架的圖示很多都是動物的形狀,所以zookeeper其實就是可以管理很多大資料框架的。針對這個框架,主要掌握如何搭建單節點和叢集,以及掌握如何在zkcli客戶端下對zookeeper的節點進行增刪改查操作即可。

3)hadoop

目前企業中一般都是用hadoop2.x的版本了,所以就沒有必要再去學hadoop1.x版本了,hadoop2.x主要包含三大塊hdfs 前期,主要學習hdfs的一些命令即可,上傳,下載,刪除,移動,檢視等命令…mapreduce 這個需要重點學習下,要理解mr的原理以及程式碼實現,雖然現在工作中真正寫mr的程式碼次數很少了,但是原理還是要理解的。

yarn 前期瞭解即可,只需要知道yarn是一個資源排程平臺,主要負責給任務分配資源即可,yarn不僅可以給mapreduce任務排程資源,還可以為 spark任務排程資源…yarn是一個公共的資源排程平臺,所有滿足條件的框架都可以使用yarn來進行資源排程。

4)hive

hive是一個資料倉儲,所有的資料都是儲存在hdfs上的,具體【資料倉儲和資料庫】的區別大家可以去網上搜尋一下,有很多介紹。其實如果對 mysql的使用比較熟悉的話,使用hive也就簡單很多了,使用hive主要是寫hql,hql是hive的sql語言,非常類似於mysql資料庫的 sql,後續學習hive的時候主要理解一些hive的語法特性即可。其實hive在執行hql,底層在執行的時候還是執行的mapredce程式。
注意:其實hive本身是很強大的,資料倉儲的設計在工作中也是很重要的,但是前期學習的時候,主要先學會如何使用就好了。後期可以好好研究一下hive。

5)hbase

hbase是一個nosql 資料庫,是一個key-value型別的資料庫,底層的資料儲存在hdfs上。在學習hbase的時候主要掌握 row-key的設計,以及列簇的設計。要注意一個特點就是,hbase基於rowkey查詢效率很快,可以達到秒級查詢,但是基於列簇中的列進行查詢, 特別是組合查詢的時候,如果資料量很大的話,查詢效能會很差。

6)redis

redis也是一個nosql(非關係型資料庫) 資料庫和key-value型別的資料庫,但是這個資料庫是純基於記憶體的,也就是redis資料庫中的資料都是儲存在記憶體中的,所以它的一個特點就是適用 於快速讀寫的應用場景,讀寫可以達到10W次/秒,但是不適合儲存海量資料,畢竟機器的記憶體是有限的,當然,redis也支援叢集,也可以儲存大量資料。在學習redis的時候主要掌握string,list,set,sortedset,hashmap這幾種資料型別的區別以及使用,還有 pipeline管道,這個在批量入庫資料的時候是非常有用的,以及transaction事務功能。

7)flume

flume是一個日誌採集工具,這個還是比較常用的,最常見的就是採集應用產生的日誌檔案中的資料。一般有兩個流程,一個是flume採集資料存 儲到kafka中,為了後面使用storm或者sparkstreaming進行實時處理。另一個流程是flume採集的資料落盤到hdfs上,為了後期 使用hadoop或者spark進行離線處理。在學習flume的時候其實主要就是學會看flume官網的文件,學習各種組建的配置引數,因為使用 flume就是寫各種的配置。

8)kafka

kafka 是一個訊息佇列,在工作中常用於實時處理的場景中,作為一箇中間緩衝層,例如,flume->kafka->storm/sparkstreaming。學習kafka主要掌握topic,partition,replicate等的概念和原理。

9)storm

storm是一個實時計算框架,和hadoop的區別就是,hadoop是對離線的海量資料進行處理,而storm是對實時新增的每一條資料進行處理,是一條一條的處理,可以保證資料處理的時效性。學習storm主要學習topology的編寫,storm並行度的調整,以及storm如何整合 kafka實時消費資料。

10)spark

spark 現在發展的也很不錯,也發展成了一個生態圈,spark裡面包含很多技術,spark core,spark steaming,spark mlib,spark graphx
spark生態圈裡麵包含的有離線處理spark core,和實時處理spark streaming,在這裡需要注意一下,storm和spark streaming ,兩個都是實時處理框架,但是主要區別是:storm是真正的一條一條的處理,而spark streaming 是一批一批的處理。

spark中包含很多框架,在剛開始學習的時候主要學習spark core和spark streaming即可。這個一般搞大資料的都會用到。spark mlib和spark graphx 可以等後期工作需要或者有時間了在研究即可。

11)elasticsearch

elasticsearch是一個適合海量資料實時查詢的全文搜尋引擎,支援分散式叢集,其實底層是基於lucene的。在查詢的時候支援快速模 糊查詢,求count,distinct,sum,avg等操作,但是不支援join操作。elasticsearch目前也有一個生態 圈,elk(elasticsearch logstash kibana)是一個典型的日誌收集,儲存,快速查詢出圖表的一整套解決方案。在學習elasticsearch的時候,前期主要學習如何使用es進行增 刪改查,es中的index,type,document的概念,以及es中的mapping的設計。

相關文章