一、大数据测试中的典型问题
1. 数据质量问题和数据处理过程中的问题
我们需要关注数据本身的质量问题,以及数据处理过程中各种处理方式和结果是否满足预期,是否与业务逻辑不相符,是否影响后续业务使用的问题,这些问题通常发生在数据的ETL阶段。
常见的问题如下:
(1)数据记录不唯一
(2)数据流转过程中Null值被自动替换的问题
(3)数据处理过滤条件不正确
(4)处理前后的数据不一致或有部分数据丢失
(5) 处理前后的数据列顺序错误
(6)数据的约束关系不正确
在数据测试过程中,我们通常考虑将一些特定的问题进行规则化配置,应用数据质量平台和自动化脚本进行检测,方便快速发现问题。
当然,规则化配置并不能完全解决上述问题,我们还需要通过CodeReview等手段补充确认,保证底层数据的准确性。
2. 数据SQL问题
SQL测试是大数据测试中不可或缺的环节,在数据收集和数据处理的过程中,涉及较多的SQL任务,我们需要关注SQL语法、应用场景和检索结果等是否正确。
常见的问题如下:
(1)SQL未对异常数据进行处理
如果对空数据的处理不当,那么会导致数据统计结果不正确。
例如,在统计某款App每天的用户登录数量时,直接使用SELECT COUNT(DISTINCT user_id) FROM ***,在这个场景中,忽略了数据表中的usr_id存在空值等异常数据,未对异常数据进行处理,导致统计结果不正确。
在进行SQL测试的过程中,我们要结合真实的数据场景进行确认,查看数据中是否存在非标准的异常数据。
(2)左右连接使用不准确
左连接:首先取出左表中的所有数据,然后加上与条件匹配的右表数据,不匹配的直接给空。
右连接:首先取出右表中的所有数据,然后加上与条件匹配的左表数据,不匹配的直接给空。
在测试过程中,我们需要根据具体的业务逻辑判断左右连接使用是否正确。
(3)数据库索引问题
在数据库中,合理添加索引和正确使用索引能够加快数据库的查询速度。
验证字段索引应用是否合理是对SQL测试时必须进行的一个常规工作。
(4)SQL函数使用不当
在测试过程中,我们需要关注SQL语句中的函数使用是否正确,SQL执行结果是否符合业务逻辑要求。
3. Hadoop应用相关问题
(1)数据倾斜
数据倾斜是指在计算数据的时候,数据的分散度不够,导致大量数据集中到了一台或者几台机器上进行计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。
在Spark、Hive应用中,数据倾斜常常发生在GROUP、JOIN等需要数据shuffle的操作中。在这些阶段,需要按照key值进行数据数汇集处理,若key过于集中,那么大部分数据将汇集到相同的机器,从而导致数据倾斜。
数据倾斜不但导致无法充分利用分布式带来的好处,而且可能导致内存消耗过大,超过负载,直接导致任务延迟或失败。
典型的数据倾斜场景如下:
a. 空值产生的数据倾斜
场景:在日志中,经常会出现信息丢失的问题,如日志中的user_id可能存在一定的缺失率。如果取日志中user_id和用户表中的user_id关联,那么会发生数据倾斜问题。
解决办法1:user_id为空时不参与关联
select * from log a join users b on a.user_id is not null and a.user_id = b.user_id union all select * from log a where a.user_id is null;
解决办法2:赋予空值新的值
select * from log a left outer join users b on case when a.user_id is null then concat('hive', rand()) else a.user_id end = b.user_id;
结论:解决办法2比解决办法1效率更高,因为不但IO少了,而且作业数也少了,在解决办法1中,log读取两次,job数是2,而在解决办法2中,job数是1。
这个优化适合无效id(如-99、'' 和NULL等)产生的数据倾斜问题。我们把空值的key变成一个字符串并拼上随机数,就能把倾斜的数据分到不同的Reducer上,从而解决数据倾斜问题。
b. 不同数据类型关联产生数据倾斜