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的設計。