大数据应用测试经验总结
大数据应用测试过程与传统的web系统有较大的不同,大数据应用测试通常会分为web侧和ETL侧测试,web侧基本就是功能测试,而ETL(Extracting-Transfroming-Loading)测试主要指从任何外部系统提取、转换、载入数据到目标地。从底层数据采集、数据处理、到上层应用展现。
一、从技术架构设计上,分为以下几块:
- 数据采集:采集使用java和python程序从文件服务器下载文件,并把文件写入kafka、Hbase和Hive、Mysql中;
 - 计算引擎:使用Hive on Tez计算引擎实现ETL跑批任务;使用spark streaming实现实时计算;使用Phoenix做前台交互式查询。
 - 数据存储:使用Kafka、Hive、Hbase、MySQL满足各层次存储技术需求。
 - 任务调度:使用Quartz实现作业调度及管理。
 - 监控接口:使用Kafka、文件接口对接统一监控平台。
 - 数据可视化:使用JQuery、Echarts、Easy UI等技术实现图表、表格展示;使用Apache POI实现excel、CSV的导入导出;使用Log4J记录日志;使用Spring框架实现页面、服务、数据的集成管理;使用DBCP实现数据库连接池。
 - 数据模型层次说明
 

ODS:贴源层,存储原始数据,数据采集直接写入;
DWD:数据仓库明细层,存储从源数据抽去过来的明细数据;
DW:数据仓库层,保存经过数据降维汇聚的计算后生成的汇总数据;
DM:数据集市层,满足特定功能而建立的各种数据集市。
- 数据处理过程说明
 

- 数据采集模块从采集机采集相关业务数据;
 - 数据采集模块定期把原始数据导入Hive库中的ODS层相关表中;实时数据及时写入kafka提供给spark streaming处理;公参数据写入mysql中。
 - ETL模块从ODS层相关表中抽取数据到DWD层;
 - ETL模块根据轻度汇总要求进行数据轻度汇总操作,并把汇总后的数据放到DW层中;
 - 一些功能所需数据无法从轻度汇总表计算出来,需要从DWD中原始表进行汇总;
 - ETL模块从DW层获取轻度汇总数据,根据各业务功能要求进一步汇总数据,形成DM层数据;
 - 即席查询数据从Hive关联到Hbase中;
 - Phoenix关联到HBase中,供页面查询使用;
 - 部分ETL模块数据把Hive中汇总后数据导入MySQL中,供模型建模使用;
 
二、Hadoop运行:

mapreduce机制:
 
常用命令:
| 功能 | 命令 | 
|---|---|
| 查看目录 | 
 | 
| 上传文件 | 
 | 
| 创建目录 | hadoop fs -mkdir ${dirname} | 
| 获取文件 | 
 | 
| 删除多个文件或目录 | 
 | 
| 复制文件 | 
 | 
| 移动文件 | 
  | 
三、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,  | 
 外部表: CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,  | 
| 加载表 | 
LOAD DATA LOCAL INPATH `/tmp/pv_2013-06-08_us.txt` INTO TABLE c02 PARTITION(date='2013-06-08', country='US')  | 
注:
存储格式有四种种:textfile、sequencefile(二进制文件)、RCFfile(行列存储相结合)、ORC
只有TEXTFILE表能直接加载数据,必须本地load数据和external外部表直接加载运路径数据,都只能用TEXTFILE表。更深一步,hive默认支持的压缩文件(hadoop默认支持的压缩格式)也只能用TEXTFILE表直接读取。其他格式不行。可以通过TEXTFILE表加载后insert到其他表中。
内外部表区别:
创建内部表时,会将数据移动到数据仓库指向的路径,存储在hive.metastore.warehouse.dir路径属性下,默认情况下位于/user/hive/warehouse/databasename.db/tablename/ 文件夹路径中,删除内部表会将元数据和数据同步删除。创建外部表时,仅记录数据所在的路径(location),不对数据的位置做任何变化,外部表文件可以由Hive外部的进程访问和管理。外部表可以访问存储在Azure Storage Volumes(ASV)或远程HDFS位置等源中的数据,删除外部表时,只删除元数据,不删除文件中数据。
五、HBase Shell的一些基本操作命令,列出了几个常用的HBase Shell命令,如下:
| 查看存在哪些表 | list | 
| 创建表 | create '表名称', '列名称1','列名称2','列名称N' | 
| 添加记录 | put '表名称', '行名称', '列名称:', '值' | 
| 查看记录 | get '表名称', '行名称' | 
| 查看表中的记录总数 | count '表名称' | 
| 删除记录 | delete '表名' ,'行名称' , '列名称' | 
| 删除一张表 | 先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称' | 
| 查看所有记录 | scan "表名称" | 
| 查看某个表某个列中所有数据 | scan "表名称" , ['列名称:'] | 
| 更新记录 | 就是重写一遍进行覆 | 
                    
                
                
            
        
浙公网安备 33010602011771号