【rainbowzhou 面试12/101】技术提问--说说你如何证明你能cover大数据测试?

大家好,我是rainbowzhou。 

如题,面试官可能会从各个方面去考察你对某些问题的理解、思考。对于该问题,聊聊我的理解与思考,希望对大家有所帮助。

首先,可以尝试去理解的面试官为什么问你这个问题,是出于什么考虑?先从面试官接触过的(你简历中的一些描述/项目经验)或者已经回答过的问题,建立共识,然后再概要说说你的经历,运用了哪些方法/工具,最后就面试官感兴趣的某一方面/或你认为特别的方面进行详细介绍。

建立共识

可以先和面试官聊聊大数据测试与传统测试的区别。如:从下面6个维度来对比说明:

对比项大数据测试传统数据测试
数据量级数据量级较高,TB级起步数据量级较低
数据结构涵盖结构化、半结构化、非结构化数据以结构化数据为主
验证工作验证环节多,数据量大,较复杂抽取数据来验证,相对简单
环境要求依赖HDFS、YARN、Zookeeper等集群环境依赖传统数据库
测试工具依赖Hadoop生态系统组建和ETL测试工具依赖传统数据库和部分测试工具
测试人员技能门槛高,需要测试人员掌握大数据相关技能技能门槛相对较低

运用方法

与其他类型测试一样,大数据测试也需要遵守既定的方法和策略。从测试类型角度划分,大数据测试分为功能测试、性能测试和其他非功能性测试。在【rainbowzhou 面试3/101】技术提问--大数据测试是什么,你如何测?中,有对功能测试进行说明;在【rainbowzhou 面试11/101】技术提问--说说你做的大数据性能测试案例中,有对性能测试进行说明。

上图中的测试方法主要针对数据质量,下面补充一下其他常用的功能测试方法。

  • 数据约束检查,即检查数据类型、数据长度、索引和主键是否符合要求。

  • 数据存储检查,即检查数据的存储是否合理、正确。

  • SQL文件检查,即对开发规范、SQL语法进行检查。

  • 数据处理逻辑验证,即验证过程是否业务逻辑,运算符和函数使用是否正确等等。

  • Shell脚本测试,如验证脚本执行是否正确,过程中的日志输出是否符合等等。

  • 调度任务测试,如任务是否在规定时间内完成等等。

非功能性测试

非功能性测试有:易用性测试、安全性测试、容错性测试、扩展性测试、部署方式测试、高可用测试、混沌工程。

详细介绍

以对SQL文件检查为例进行详细说明。SQL文件检查分为开发规范和SQL语法检查。

开发规范检查

企业通常有自己的开发规范。下面列出xx互联网公司HiveQL开发规范的部分内容

1.表
1.1. 命名
表名称由字母、数字、下划线组成,不同单词之间用下划线分开
采用数据层次缩写_数据表名格式命名。
数据层次缩写包括( dpods, dpdw, dpmid, dpdm, dprpt)
dpods :存放从原系统采集来的原始数据
dpdw:保存经过清洗,转换和重新组织的历史数据,数据将保留较长时间,满足系统最细粒度的查询需要
dpmid:模型计算中间结果。减少重复计算,降低事实表访问和计算压力。
dpdm 数据集市。基于部门或某一特定分析主题需要
dprpt:直接面向用户的服表
临时表命名:dpstg_数据表名_YYYYMMDD
外部表命名:数据层次缩写 _ext_数据表名
其它团队表命名:数据层次缩写_团队名缩写_数据表名
1.2 空值
所有建表语句原则上执行以下语句设置表的空值选项:
ALTER TABLE table_ name SET SERDEPROPERTIES('serialization.null.format = "");
1.3 其他
尽量少使用distinct操作,因为distinct操作比较消耗资源。
SQL关键字全部小写,如distinct、between和group by等。

2. column
2.1.命名
字段:小写字母、数字、下划线组成,不同单词之间用下划线分开
分区列:采用hp字段名命名分区列
2.2.字段类型
时间:STAING,like:yyyy-mm-dd hh:mm:ss
整形:int,bigint
字符串:string
浮点:double
复杂类型:map、array、 struct、union
2.3. Partition 
Hive Partition列在data中,并不存储这会导致当以文件形式对外提供数据时,数据会有缺失,为此,我们对所有的partition列会进行冗余存储
示例:当以列名为type的列作为partition列时,我们除了保存type列外,增加一列 hp_type列做为 partition 列。
2.4.Bucket列
使用 set hive.enforce.bucking=true 自动控制上一轮reduce 的数量从而适配 bucket 的个数
2.5. 修改
可以修改列数据类型
严禁删除列
预览与源文档一致
新增列只能加到最后

3.视图
禁止使用视图!

4. 注释
表和字段的注释都必须使用 comment 语句加以注释。
所有字段必须给出准确注释。
枚举类型字段必须列举出所有枚举值。

5. 数据生命周期
表注册时,开发需要认真填写生命周期,以便定时清理数据,节约存储。

6.字符集
Hadoop 和Hive都是用 UTF-8编码的,所有导入文件的字符必须为UTF-8 格式。

7.小文件合并
当一个表存在过多小文件(小于 10M)时,不仅会对 namenode 造成很大压力,也会降低执行效率,甚至任务无法执行,因此,当发现表出现很多小文件时,请添加如下参数:

set hive.mergejob.maponly = true;
set hive.merge.mapfiles = true;
set hive.merge.mapredfiles = true;
set mapred.max.split.size=256000000;
set mapred.min.split.size.per.node=256000000;
set mapred.min.split.size.per.rack=256000000;
set hive.merge.size.per.task = 256000000;
set hive.merge.smallfiles.avgsize=100000000;
set hive.input.format=org.apache.hadoop.hive.ql.o.CombineHivelnputFormat;

基于上述开发规范,我们可以对提测的HiveQL文件进行检查,以便发现不符合规范的地方。

SQL语法检查

SQL语法检查主要检查SQL语法是否存在语法问题,即检查SQL连接方式、函数、聚合和关键字的使用是否正确。eg:需要考虑不同表的不同加载方式,合理使用insert into和insert overwrite;确认UNION和UNION ALL的使用是否正确 合理使用ORDER BY、DISTINCT BY、SORT BY、CLUSTER BY和GROUP BY。

个人认为这个问题没有标准答案,而是取决于每个人的认知,说不定随着我经验年限的增加,我都会觉得没有回答好该问题,例如重点没突出、考虑的点不够全等等......

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

如果文章对你有帮助,记得在看、点赞、转发、加关注哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值