大数据测试实践小结

本文介绍了一个大数据模型测试的过程,包括信息收集、数据准备、模型建立和评估等阶段,并分享了测试范围、难点、方法和技术,以及使用的测试工具和常见的bug分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

针对我们产品线的某些模型产品的需求,开始展开 大数据测试,对大数据测试仍然属于摸索和尝试的阶段,大家感兴趣的欢迎拍砖。
   一、 模型产生的过程
   ·  信息收集:需明确项目目标和业务需求,根据确定的数据分析对象,确定分析对象所需要的特征信息,以及特征信息的计算方法;这个过程业务方会做很多的准备 工作,会拉数据去证明哪些特征信息与我们的数据分析对象是有关联的;
   ·  数据准备: 从数据仓库中获取数据构造用于模型分析的数据集,包括选择数据、格式化数据、数据清理、数据整合等过程,是整个数据挖掘过程中最耗时的环节,甚至占据整个模型项目一半以上的工作量。而数据是整个数据挖掘的根基,数据的质量直接决定模型分析的结果的准确性;
   ·  建立模型:选择合适的建模 技术和算法,将最终得到的数据集是作为模型的输入进行训练,同时对它们的参数进行校准以达到最优值。
   ·  模型评估: 通过模型的训练会最终得到一个分析结果,需要对它们进行验证和评价,证明其合理性和准确性。一般对模型进行评估的方法有:业务上抽样数据验证、计算模型的准确率、信息分布、 K-S 值、 Gini 值等;
   二、 数据测试的范围和难点
  针对模型产生的这一过程,可以确定我们的测试范围和重点是数据准备这个环节,就如上所述,数据是整个过程最重要和最关键的一个环节,需要确保数据的质量。
  测试对象:开发人员开发数据的 HiveSql 脚本及脚本产出的数据集合;
  我们产品的数据特点:
  1. 大部分字段有比较复杂的计算逻辑;
  2. 无需求说明文档,加大了理解字段的难度;
  3. 无设计文档,即无执行计划,表关系、计算逻辑、源表只能通过分析代码获得;代码在划分模块、编写风格上,不同开发有不同特点;
   三、 数据测试技术 & 方法
  公司有一些 BU 在做数据的测试,目前大家一起筹备在做大数据测试的共建。
   ·   相关的技术 :
  1.      规则扫描技术:对数据集合的字段列配置一些校验规则,自动进行扫描;
  2.      静态代码扫描:目前有列顺序扫描、代码规范扫描等;
  3.      单元测试:数据准确、单元脚本的执行。提供单测平台,驱动开发去做 hivesql 的 单元测试,测试人员主要是 review 开发的单测脚本校验规则是否齐全和正确;
  4.      数据对比:数据集合的对比;
  等等 。。。。。。应用到我们模型数据测试中的技术有规则扫描、列对比、数据对比等技术,比较适用,发现的数据类 bug 比较多;
   ·   关于数据测试方面的沉淀和方法比较零散,没有形成体系;且各个 BU 因为业务的差异性,测试方法也存在不同。针对我们产品的数据特点,我整理了一些过程中用到的 测试方法 :
  1.      结果数据比对方法,主要做数据量的比对、数据取值是否和源数据仓库中的数据一致;
  2.      抽样数据验证:此方法主要用于校验有比较复杂计算逻辑的字段数据是否正确;计算逻辑比较复杂,编写自动化脚本做大批量数据的比对代价会比较大,需要产生很多中间表,因此,做抽样数据验证,大大提高了效率,也易于发现 bug ;
  3.      代码静态分析和 code review ,会发现一些业务上和筛选条件上的错误;
  4.      造测试数据,验证计算逻辑;
  5.      数据列顺序对比;
   ·   校验的场景:
  1.      数据量;
  2.      记录是否唯一;
  3.      数据区间和分布( min 、 max 、 avg 等);
  4.      数据中 null 值的替换及格式化特征;
  5.      数据边界;
  6.      数据是否一致、存在丢失;
  7.      列顺序是否正确;
  8.      数据的精度和格式化信息;
   四、 测试工具
  过程中,运用的测试工具有:
  1.      Hivetest
  既可做 sql 与 sql 的比对,也能做 sql 与值的比对测试,平台包括数据准确、同步、脚本的模版、执行等;
  2.      规则扫描工具:主要是对字段列配置规则进行扫描;
  3.      表关系生成工具;
  还有一些工具,例如 Slowly 平台、一淘的单元测试平台、 BI 的 checklist 数据对比工具、单元测试平台,没有进行适用, Slowly 目前只支持支付宝的集群,一淘的目前还未做权限开放,当然想用的话,仍然可以联系灵石做处理; BI 的单测平台目前只支持云梯 2 ,而我们却在云梯 1 ......
  总体感觉,在大数据测试这块,大数据对比、规则扫描、代码静态扫描、表关系生成、执行计划自动生成、单测平台会有比较大的应用前景,大数据的比对是难点。
   五、 常见 bug 分类
  尝试做了 2 个模型的数据测试,发现的 bug 不多,大体上集中在:
  1.      记录不唯一;
  2.      Null 值替换问题;
  3.      过滤条件不正确;
  4.      数据不一致和丢失;
  5.      列顺序错误;
⼤数据应⽤测试经验总结 ⼤数据应⽤测试经验总结 ⼤数据应⽤测试过程与传统的web系统有较⼤的不同,⼤数据应⽤测试通常会分为web侧和ETL侧测试,web侧基本就是功能测试,⽽ETL(Extracting-Transfroming- Loading)测试主要指从任何外部系统提取、转换、载⼊数据到⽬标地。从底层数据采集、数据处理、到上层应⽤展现。 ⼀、从技术架构设计上,分为以下⼏块: 1. 数据采集:采集使⽤java和python程序从⽂件服务器下载⽂件,并把⽂件写⼊kafka、Hbase和Hive、Mysql中; 2. 计算引擎:使⽤Hive on Tez计算引擎实现ETL跑批任务;使⽤spark streaming实现实时计算;使⽤Phoenix做前台交互式查询。 3. 数据存储:使⽤Kafka、Hive、Hbase、MySQL满⾜各层次存储技术需求。 4. 任务调度:使⽤Quartz实现作业调度及管理。 5. 监控接⼝:使⽤Kafka、⽂件接⼝对接统⼀监控平台。 6. 数据可视化:使⽤JQuery、Echarts、Easy UI等技术实现图表、表格展⽰;使⽤Apache POI实现excel、CSV的导⼊导出;使⽤Log4J记录⽇志;使⽤Spring框架实现 页⾯、服务、数据的集成管理;使⽤DBCP实现数据库连接池。 7. 数据模型层次说明 ODS:贴源层,存储原始数据,数据采集直接写⼊; DWD:数据仓库明细层,存储从源数据抽去过来的明细数据; DW:数据仓库层,保存经过数据降维汇聚的计算后⽣成的汇总数据; DM:数据集市层,满⾜特定功能⽽建⽴的各种数据集市。 1. 数据处理过程说明 1. 数据采集模块从采集机采集相关业务数据; 2. 数据采集模块定期把原始数据导⼊Hive库中的ODS层相关表中;实时数据及时写⼊kafka提供给spark streaming处理;公参数据写⼊mysql中。 3. ETL模块从ODS层相关表中抽取数据到DWD层; 4. ETL模块根据轻度汇总要求进⾏数据轻度汇总操作,并把汇总后的数据放到DW层中; 5. ⼀些功能所需数据⽆法从轻度汇总表计算出来,需要从DWD中原始表进⾏汇总; 6. ETL模块从DW层获取轻度汇总数据,根据各业务功能要求进⼀步汇总数据,形成DM层数据; 7. 即席查询数据从Hive关联到Hbase中; 8. Phoenix关联到HBase中,供页⾯查询使⽤; 9. 部分ETL模块数据把Hive中汇总后数据导⼊MySQL中,供模型建模使⽤; ⼆、Hadoop运⾏: mapreduce机制: 常⽤命令: 功能 功能 命令 命令 查看⽬录 hadoop fs -ls dir 上传⽂件 hadoop fs -put ${local file} ${hdfs file} 创建⽬录 hadoop fs -mkdir ${dirname} 获取⽂件 hadoop fs -get ${hdfs file} ${local file} 删除多个⽂件或⽬录 hadoop fs -rm ${hdfs file} ... hadoop fs -rm -r ${hdfs file}... 复制⽂件 hadoop fs -cp ${hdfs file} ${hdfs file} 移动⽂件 hadoop fs -mv ${hdfs file} ${hdfs file} 三、hive和hbase⽐较: Hive(⾮数据库) Hbase(数据库) 适⽤场景 ⽤于对⼀段时间内的数据进⾏分析查询,离线批处理 ⼤数据的实时查询 特点 1、⼀种类SQL的引擎,运⾏MapReduce任务; 2、查询⼀般是全量查询,时间较长,可通过分区来优化; 3、基于⾏查询,定义时每⾏有固定列数据,每列数据固定⼤⼩; 4、操作:不⽀持更新操作 1、⼀种在Hadoop之上的NoSQL型Key/Value数据库; 2、查询是通过特定语⾔编写,可通过Phonenix实现类SQL功能; 3、基于列查询,可定义各种不同的列,每列数据⼤⼩不固定; 四、hive常⽤操作 hive 基础操作 基础操作 说明 说明 查看数据 库 show databases 使⽤数据 库 use DbName 删除数据 库 drop database if exists DbName CASCADE 如果数据库不为空,删除会报错,加上cascade可忽略 查看表 show tables in DbName ; show tables like 'h*' 创建表 内部表:CREATE TABLE page_view if not exists(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRIN
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值