【rainbowzhou 面试5/101】技术提问--大数据测试中遇到的问题?举例说明一下

2023-03-16 14:14:05 浏览数 (2)

上篇【rainbowzhou 面试4/101】技术提问中,我着重说明了ETL测试中常见的两种测试场景,以及相应地测试方法。那么在实际大数据项目过程中,会遇到哪些问题呢?本篇就带你了解大数据测试过程中遇到的一些经典测试问题,并针对问题如何解决及经验教训进行相应说明,希望对大家有所帮助。

大数据测试的流程

大数据测试的流程可以简单的理解为将源数据导入到目标地后,进行应用或展示。具体可以拆分为:

  1. 对源数据分析(数据库、文本等)结果验证,关注的点为从哪儿来到哪儿去,不同类型等;
  2. 业务转换逻辑实现验证,关注的点为中间数据流转的准确性、完整性、一致性等;
  3. 校验数据经过转换载入到目标表的过程,关注的点同样为完整性、一致性、及时性等;
  4. 数据质量检查,关注的点为常见异常值的处理等;

此外,还可以参照传统测试流程:接到需求后,进行梳理业务需求和设计测试策略,再创建、设计、执行测试计划、用例等,提出Bug,修复后回归验证。

大数据测试中的典型问题

数据质量问题和数据处理过程中的问题

数据本身的质量问题,以及数据处理过程中各种处理方式和结果是否满足预期,是否与业务逻辑不相符,是否影响后续业务使用等问题,这些问题通常发生在数据的ETL阶段。常见的问题如下。

  • 数据记录不唯一
  • 数据流转过程中Null值的处理问题
  • 数据处理过滤条件不正确
  • 处理前后的数据不一致或有部分数据丢失
  • 处理前后的数据列顺序错误
  • 数据约束关系不正确
  • 业务数据的有效性

数据SQL问题

SQL测试是大数据测试中不可或缺的环节,对于外行而言经常将大数据测试理解为写SQL。原因就在于数据收集、数据处理过程中,都会使用到各种SQL。所以我们需要关注SQL语法、应用场景和检索结果等是否正确。常见的问题如下。

  • SQL未对异常数据进行处理,导致数据统计结果不符预期
  • 左右连接使用不正确,可能原因不满足业务逻辑需要
  • 数据库索引未使用正确
  • SQL函数不兼容,可能原因:不同数据库导致,同一数据库不同版本导致

Hadoop应用相关问题

  • 数据倾斜
    • Spark中的数据倾斜分为Spark Streaming和Spark SQL
    • 具体表现为单个 Executor 执行时间特别久,整体任务卡在某个阶段不能结束
    • 正常运行的任务突然失败
    • Executor lost,OOM,Shuffle 过程出错
    • Driver OOM
    • Hadoop中的数据倾斜分为MapReduce和Hive,一个是程序,一个是SQL
    • 具体表现为Reduce阶段卡在99.99%,一直不能结束,可能有一个或多个Reduce
    • 各种container报错OOM
    • 读写的数据量极大,超过其他正常的Reduce
    • 伴随着数据倾斜,任务被自动kill等
    • 数据倾斜是指在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上 计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。数据倾斜会发生在数据开发 的各个环节中。典型的有Hadoop和Spark应用:
    • Hadoop中的数据倾斜
    • Spark中的数据倾斜
  • Worker资源分配问题
    • 当处理的数据很大时,任务会被拆分为多个task,如果按照默认分配的Worker(比较少),那么会导致集群资源空闲,未能充分利用。就会导致运行时间过长。解决方式在启动处理大数据量类型的任务时,需要指定资源参数
  • Worker内存分配过小
    • 当先用小数据量进行测试通过后,在进行大数据量测试时,平台会自动“杀死”该任务。主要原因可能就是内存超出而被“杀死”
    • 解决方式可以先在本地运行程序,查看内存占用情况。再进行推断配置数据是否符合业务场景和线上使用预期,避免上线后的风险

如何解决数据倾斜问题

  • 解决数据倾斜的思路:
  1. 业务逻辑:我们从业务逻辑的层面上来优化数据倾斜,比如上面的例子,可以单独对这两个城市 做 count,最后和其它城市做整合。
  2. 程序层面:比如说在 Hive 中,经常遇到 count(distinct)操作,这样会导致最终只有一个 Reduce, 我们可以先 group 再在外面包一层 count,就可以了。
  3. 调参方面:Hadoop 和 Spark 都自带了很多的参数和机制来调节数据倾斜,合理利用它们就能解决大部分问题。
  • 从业务和数据上解决数据倾斜:很多数据倾斜都是在数据的使用上造成的,例如数据分布不均匀。
  1. 有损的方法:找到异常数据,比如ip为 0的数据,过滤掉。
  2. 无损的方法:对分布不均匀的数据,单独计算。先对key做一层 hash,先将数据打散让它的并行度变大,再汇集。
  • Hadoop 平台的优化方法
  1. map join 方式
  2. count distinct 的操作,先转成 group,再 count
  3. hive.groupby.skewindata=true
  4. 设置 map 端输出、中间结果压缩。(不完全是解决数据倾斜的问题,但是减少了IO读写和网络传输,能提高很多效率)
  • Spark 平台的优化方法
  1. map join 方式
  2. 设置 rdd 压缩
  3. 合理设置 driver 的内存
  4. Spark SQL 中的优化和 Hive 类似

以上主要介绍了大数据测试中的典型问题、可能产生的原因以及对应的解决方法。当然实际项目中,还会遇到形形色色的问题以及各种各样的坑,例如hadoop组件版本不兼容、性能要求未达到预期、硬件资源不足等等,都需要我们在日常工作中处理与解决,并且不断的积累总结,这样才能不断进步~

参考资源:

  • 《大数据测试技术与实践》--艾辉

看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后台私信我,一起探讨交流。

0 人点赞