什么是大数据测试?
- 大数据是一个大的数据集合,通过传统的计算技术无法进行处理。这些数据集的测试需要使用各种工具、技术和框架进行处理
- 大数据涉及数据创建、存储、检索、分析,而且它在数量、多样性、速度方法都很出色
- 是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
大数据测试类型
- 测试大数据应用程序更多的是验证其数据处理,而不是测试软件产品的个别功能。当涉及到大数据测试时,性能和功能测试是关键。
- 批量 -- 实时 -- 交互
- 在测试应用程序之前,有必要检查数据的质量,并将其视为数据库测试的一部分
- 涉及检查各种字段:
- 准确性 -- 是否重复 -- 一致性 -- 有效性 -- 数据完整性
- 这里的数据一致性是指文件系统中的数据与从外部写入前的数据保持一致,即写入数据与读出数据始终是一致的
- 数据一致性能够表明文件系统可保证数据的完整性,不会导致数据丢失或数据错误,这是文件系统最基本的功能,测试可用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
在做大数据测试的过程中我们需要首先熟知一下几点:
- 数据的整体是如何流转的?
- 数据测试的流程是怎么样的?
- 数据测试的用例要如何设计?
- 数据如何输入输出?
- 数据如何同步并分析转换成可视化图表?