大数据测试中的数据清洗质量保障
大数据测试中的数据清洗质量保障
随着大数据技术的迅猛发展,数据清洗作为数据处理的关键环节,其质量保障变得尤为重要。本文将从大数据测试的各个层次出发,深入探讨数据清洗过程中的测试重点,并介绍几种常见的大数据测试解决方案。
传统大数据体系介绍
大数据是一种海量、高增长率和多样化的信息资产,具有以下特点:
- 体量巨大:一般大数据集在10TB以上,往往实际规模已经超过了PB级别。
- 增长速度、价值密度:数据增长速度非常快,但是其价值密度较低,需要通过挖据分析技术从中提取出有价值的信息。
- 数据准确性和可信度:大数据领域对数据准确度和可信度可以统称为数据的质量,对数据质量的要求一定是精确的。
大数据应用领域非常广泛,大致包含如图所示:
分层架构体系和测试点
在目前较流行的大数据5V标准(多样性、大体量、时效性、准确性、大价值)之下,决定了大数据测试所应对的业务和常规业务测试存在一定的差异性和难度。下面我们就来看看基于大数据层级的一些测试关注点。
数据收集层
这一层是处于应用最底层,通常情况下大多数大数据类型的产品会从多数据源收集数据并进行一定的预处理然后存库(通常存放在HDFS中),该层级主要可能运用到的大数据技术Hadoop生态下的Flume、Kafka、Sqoop等。
测试重点:
- 数据的完整性(保证采集的数据不缺失)
- 数据的一致性(保证采集的数据和原始数据保持一致)
- 数据合理性校验(如样本存在年龄=1000等)
- Kafka通道的稳定性
- Flume采焦数据流的正确性
- 校验加载完成后对应存储(HDFS)中的位置正确(因为HDFS会把大文件切分存储)
- 满足数据加载性能的基线要求
数据存储层
这一层主要作用是用于存储采集到的数据或者计算分析完的数据,主要采用Hadoop技术栈中的HDFS、Hbase、Hive等。
测试重点:
- 对应数据库的读写性能是关键验证点
- 数据存储的正确性和一致性
- 模拟真实集群下NN节点的处理能力,DN块上报的正确性(可采用Dynamometer模拟)
资源管理和服务协调层
该层主要的目的是为了统一管理服务并进行资源分配,可以解决负载均衡的一些问题、心跳包机制由于网络原因造成的双主问题。只要是符合主从结构的应用均可以和该层做交互。目前主要采用技术为Hadoop的Yarn、Zookeeper等。
测试重点:
- 正常业务的调度监控
- 混沌实验---故障植入(如模拟主节点挂了或者单个节点负载过高等)
- 高并发下的资源调度和预警机制检测
计算引擎层
计算引擎层是业务价值的核心,该层主要会介入数据预筛、数据清洗等动作。需要为后续的数据分析工作提供准确的数据支撑,否则最终产品出来的数据便毫无价值,因此这部分的工作为测试核心重点,对应技术栈MapReduce、Apach Storm、Spark Streaming,也有结合脚本直接载入内存做计算形式的。
测试重点:
- 数据调取的准确性(一般校验从HDFS中)
- 数据清洗规则功能校验(此处工作量较大,实际可采用自动化形式)
- 数据传输通道的稳走性和可靠性(一般用Kafka或者RPC方式)
- MapReduce计算过程的验证(Map阶段验证和Reduce阶段验证)
- 实时流式计算的数据验证和配置测试(需要调整出最合适的Spark Streaming参数)
- 输出测试,确保清洗后的数据能正确载入到数据仓库或者向下游传递
解决方案探索
下面我们介绍几种常见的大数据测试解决方案。
介入式测试解决方案
使用链路跟踪技术,通过对数据库操作层面执行的SQL语句进行追踪,能够清晰地明确各个表之间的关联关系,从现有的真实数据集中进行采样创建业务数据模板,根据测试需求对数据模板进行扩充和修改,可以在保留数据真实性的同时,灵活调整数据量和数据内容,以满足功能测试、性能测试等不同的测试场景。
非介入式测试解决方案
对第三方平台进行测试,不能对系统内部进行修改,这种情况下我们采用基线数据集进行递进式测试。将固定某个周期的业务数据作为数据基线,通过数据矩阵协调和基线监控策略进行检测,某个周期内的数据不一定能覆盖全部业务,因此我们需要逐步扩大周期做递进式数据集。
智能测试解决方案
智能测试解决方案其实是数据回流的闭环。结合智能APM链路分析以及链路数据挖掘和机器学习,对线上数据进行自行归类,使用分布式数据计算和数据变异矩阵,按照实际情况制定变异规则,如特殊符号、数据长度、数据类型组合、数据格式等变异规则。通过场景模拟沙盒环境对数据进行训练,确保数据可用。将数据进行渗入演练,最后通过混沌工程验证数据的稳定性。