什么是大數據測試?
- 大數據是一個大的數據集合,通過傳統的計算技術無法進行處理。這些數據集的測試需要使用各種工具、技術和框架進行處理
- 大數據涉及數據創建、存儲、檢索、分析,而且它在數量、多樣性、速度方法都很出色
- 是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產
大數據測試類型
- 測試大數據應用程序更多的是驗證其數據處理,而不是測試軟件產品的個別功能。當涉及到大數據測試時,性能和功能測試是關鍵。
- 批量 -- 實時 -- 交互
- 在測試應用程序之前,有必要檢查數據的質量,並將其視為數據庫測試的一部分
- 涉及檢查各種字段:
- 准確性 -- 是否重復 -- 一致性 -- 有效性 -- 數據完整性
- 這里的數據一致性是指文件系統中的數據與從外部寫入前的數據保持一致,即寫入數據與讀出數據始終是一致的
- 數據一致性能夠表明文件系統可保證數據的完整性,不會導致數據丟失或數據錯誤,這是文件系統最基本的功能,測試可用diff,md5sum編寫腳本自動化測試
- 准確性 -- 是否重復 -- 一致性 -- 有效性 -- 數據完整性
測試步驟:
- 步驟一:數據預處理驗證(說白了,就是確保數據源數據合理性,可信度)
- 在進行大數據測試時,首先要預hadoop前驗證數據的准確性等等
- 我們數據來源可能是關系數據庫、日志系統、社交網絡等等,所有我們應該確保數據能正確的加載到系統中
- 我們要驗證:加載的數據和源數據是一致的 確保正確的提取和加載數據至hdfs中
- 步驟二:MapReduce驗證
- 在本階段,我們主要驗證每一個處理節點的業務邏輯是否正確,並驗證在多個運行后
- 確保:
- Map Reduce過程工作正常
- 數據聚合、分離規則已經實現
- 數據key-value關系已正確生成
- 驗證經過map reduce后數據的准確性等特性
- 步驟三:結果驗證
- 主要驗證在經過大數據工具/框架處理后,生成的最終數據的成果。檢查轉換(Transformation)規則被正確應用 檢查數據完整性和成功的數據加載到目標系統中(mysql)
大數據技術板塊划分
- 數據采集:flume kafka logstash filebeat …
- 數據存儲:mysql redis hbase hdfs …
- mysql雖不屬於但目前公司項目接觸最多,需要掌握相關知識和技能
- 數據查詢: hive impala elasticsearch kylin …
- 數據計算:
- 實時計算: storm sparkstreaming flink …
- 離線計算: mapReduce spark flink …
- 其他框架: zookeeper …
其他相關測試類型(暫不做過多介紹,可后續逐步了解)
- 性能測試
- 容錯性測試
- 可用性測試
- 擴展性測試
- 穩定性測試
- 部署方式測試
- 壓力測試
數據操作類型:
- 操作內存中的數據
- 操作硬盤中的數據
- 操作實時數據流
大數據測試基礎
- HDFS簡介
- hadoop生態 - 相關組件介紹
- hadoop常用命令,及linux相關輔助測試驗證的命令使用
- 數據測試&整體業務流程分析
- 數據映射和數據簡化思維(Map/Reduce)
- 測試腳本開發&運行
前言介紹
* 在介紹大數據之前,先要了解他解決了什么問題,能給我們帶來什么價值
* 一方面,以前IT行業發展沒有那么快,系統的應用也不完善,數據庫足夠支撐業務系統。
* 但是隨着行業的發展,系統運行的時間越來越長,搜集到的數據也越來越多,傳統的數據庫已經不能支撐全量數據的存儲工作
* 另一方面,數據越來越多,單機的計算已經成為瓶頸。因此,基於分布式的*數據系統嶄露頭角
* 在存儲上,hdfs的分布式存儲可以任意水平擴展,可以解決海量數據存儲的難題。
* 在計算上,從最初的MapReduce,把任務水平拆分,多台機器並行計算,再匯總結果,到基於Spark的內存計算,改造Mapreduce每次數據落盤以及編程方式的痛點
* 有了存儲和計算框架,周邊就衍生出了很多管理、緩存相關的技術
HDFS設計思想
什么是分布式系統?
* 分布式系統會划分成多個子系統或模塊,各自運行在不同的機器上,子系統或模塊之間通過網絡通信進行協作,實現最終的整體功能。
* 比如分布式操作系統、分布式程序設計語言及其編譯(解釋)系統、分布式文件系統和分布式數據庫系統等
* 利用多個節點共同協作完成一項或多項具體業務功能的系統就是分布式系統
海量數據存儲
Hadoop生態系統
* 目前企業中一般都是用hadoop2.x的版本了,所以就沒有必要再去學hadoop1.x版本了,hadoop2.x主要包含三大塊hdfs。
* 主要學習hdfs的一些命令即可,上傳,下載,刪除,移動,查看等命令…mapreduce 這個需要重點學習下,要理解和掌握mr的原理以及代碼實現
相關組件簡介
* Yarn: 解決多租戶資源調度的難題
* Flume: 解決數據傳輸的難題
* Sqoop: 解決分布式存儲數據與傳統DB數據之間的轉換
* Oozie: 解決了*數據計算任務的調度
* Kafka: 提供了發布訂閱機制的消息隊列
* Zookeeper: 可以幫助用戶完成主備的選舉(master->slave)
* Hive: 在hdfs的基礎上提供了數倉的功能
* Hbase: 則基於hdfs實現列式數據庫…
* Redis:基於內存的,實現快速讀寫的一個nosql(非關系型數據庫) 數據庫
-
YARN:
- yarn是一個資源調度平台,主要負責給任務分配資源即可,yarn不僅可以給mapreduce任務調度資源
- 還可以為spark任務調度資源,是一個公共的資源調度平台,所有滿足條件的框架都可以使用yarn來進行資源調度
-
Flume:
- Flume是一個日志采集工具:比較常用的,最常見的就是采集應用產生的日志文件中的數據
- 一般分兩個流程:
- Flume采集數據存儲到kafka中,為后面使用storm或者sparkstreaming進行實時處理
- Flume采集的數據落盤到hdfs上,為了后期 使用hadoop或者spark進行離線處理
-
sqoop:
- sqoop支持基於sql或者表名把數據庫中的數據存儲到分布式環境中
- 數據庫支持oracle\mysql等等,分布式環境可以是hdfs,hive,hbase等等
- 數據的導入時雙向的,比如你可以把oracle中的數據讀取存儲到hdfs,也可以把hdfs的數據導入到oracle
-
Oozie:
- Oozie 提供了大數據場景下各種任務的調度
- 比如shell腳本、spark任務、mapreduce任務、sqoop任務、hive查詢以及普通的java程序
- 一個基於工作流引擎的服務器,可以在上面運行Hadoop的Map Reduce和Pig(數據流處理)任務
-
kafka:
*。。。。。。這是一個大東東,留着后面慢慢介紹吧 -
Zookeeper:
- zookeeper是很多大數據框架的基礎,中文名稱是動物園的意思,因為目前的大數據框架的圖標很多都是動物的形狀,所以zookeeper其實就是可以管理很多大數據框架的。
- 針對這個框架,主要掌握如何搭建單節點和集群,以及掌握如何在zkcli客戶端下對zookeeper的節點進行增刪改查操作即可
-
Hive:
- hive基於hdfs構建了數據倉庫系統
- 它以hdfs作為存儲,依賴於數據庫(嵌入式的數據庫derby或者獨立的數據mysql或oracle)存儲表schema信息,並完成基於sql自動解析創建mapreduce任務
- (由於mapreduce計算效率比較差,目前官方推薦的是底層計算模型采用tez或者spark)。
- 所以hive可以理解為:hdfs原始存儲+DB Schema信息存儲+SQL解析引擎+底層計算框架組成的數據倉庫
- 其實hive在執行hql,底層在執行的時候還是執行的mapredce程序
- 簡單理解:就是將hdfs中結構化的數據映射成一張數據庫表,並提供基本的hive sql增刪改查等功能
-
Hbase:
- HBase是基於Hdfs之上的面向列的分布式數據庫(NoSQL),基於文件分割以及rowkey的順序存儲,能快速索引查詢數據。
- 是一個nosql 數據庫,是一個key-value類型的數據庫
- hbase基於rowkey查詢效率很快,可以達到秒級查詢,但是基於列簇中的列進行查詢, 特別是組合查詢的時候,如果數據量很大的話,查詢性能會很差
- HBase以表的形式存儲數據。表有行和列組成。列划分為若干個列族/列簇(column family),每個列族/列簇下面可以有多個普通列
- Hbase表組成:行鍵,時間戳,列族,行等組成
- Hbase表邏輯視圖
- HBase是基於Hdfs之上的面向列的分布式數據庫(NoSQL),基於文件分割以及rowkey的順序存儲,能快速索引查詢數據。
-
Hbase Shell
-
Redis:
- redis也是一個nosql(非關系型數據庫) 數據庫和key-value類型的數據庫
- 這個數據庫是純基於內存的,也就是redis數據庫中的數據都是存儲在內存中的,所以它的一個特點就是適用於快速讀寫的應用場景,讀寫可以達到10W次/秒
- 但是不適合存儲海量數據,畢竟機器的內存是有限的,當然,redis也支持集群,也可以存儲大量數據
- 數據類型:
- string,list,set,sortedset,hashmap
- pipeline管道
- 在批量入庫數據的時候是非常有用的,以及transaction事務功能
-
Storm:
- storm是一個實時計算框架,和hadoop的區別就是,hadoop是對離線的海量數據進行處理
- 而storm是對實時新增的每一條數據進行處理,是一條一條的處理,可以保證數據處理的時效性可整合kafka實時消費數據
-
Spark:
- 分類:spark core,spark steaming,spark mlib,spark graphx
- spark生態圈里面包含的有:以下主要掌握
- 離線處理:spark core
- 實時處理:spark streaming
- storm和spark streaming (兩個都是實時處理框架)
- 但是主要區別是:storm是真正的一條一條的處理,而spark streaming 是一批一批的處理
-
Sqoop:
- sqoop支持基於sql或者表名把數據庫中的數據存儲到分布式環境中
- 數據庫支持oracle\mysql等等,分布式環境可以是hdfs,hive,hbase等等
- 數據的導入時雙向的,比如你可以把oracle中的數據讀取存儲到hdfs,也可以把hdfs的數據導入到oracle
-
Elasticsearch:
- lasticsearch是一個適合海量數據實時查詢的全文搜索引擎,支持分布式集群,其實底層是基於lucene的
- 在查詢的時候支持快速模 糊查詢,求count,distinct,sum,avg等操作,但是不支持join操作
- ELK:
- 是一個典型的日志收集,存儲,快速查詢出圖表的一整套解決方案
- 主要掌握:
- 使用es進行增 刪改查,es中的index,type,document的概念,以及es中的mapping的設計
Hadoop 核心組件介紹
- HDFS: Hadoop Distributed File System
- 分布式文件系統(解決海量數據存儲)
- YARN: Yet Another Resource Negotiator
- 運算資源管理調度系統(解決資源任務調度)
- MR: MapReduce (解決海量數據計算)
- 一個運行在YARN上的離線計算框架MapReduce
HDFS常用命令(結合Linux文本三劍客使用)
MapReduce概述: (可了解python內置的map(),reduce(),filter()函數)
- MapReduce是一種分布式計算模型,由Google提出,主要用於搜索領域,解決海量數據的計算問題.
- MR由兩個階段組成:Map和Reduce,用戶只需要實現map()和reduce()兩個函數,即可實現分布式計算,非常簡單。
- 這兩個函數的形參是key、value對,表示函數的輸入信息。
MapReduce模型:
- Hadoop MapReduce編程模型主要由兩個抽象類構成,即Mapper和Reducer
- Mapper用於處理切分過的原始數據
- Reducer對Mapper的結果進行匯總,得出result
在做大數據測試的過程中我們需要首先熟知一下幾點:
- 數據的整體是如何流轉的?
- 數據測試的流程是怎么樣的?
- 數據測試的用例要如何設計?
- 數據如何輸入輸出?
- 數據如何同步並分析轉換成可視化圖表?