本节目的:
验证Hive中两个表数据的准确率,计算公式如下所示:
数据准备:
在这里http://griffin.apache.org/data/batch/下载到某一个目录,可以参照http://griffin.apache.org/docs/quickstart-cn.html 方式建外部表,
然后手动执行脚本文件,在两个表中生成一些数据,其实也可以不这么麻烦,自己随便insert 几条进去也可以。
测试流程:
1、创建measure
以下select schema的位置需要修改部分源码,因为我们使用kerberos认证
@PostConstruct
public void init() {
if (needKerberos != null && needKerberos.equalsIgnoreCase("true")) {
LOGGER.info("Hive need Kerberos Auth.");
// new add for kerberos auth
System.setProperty("java.security.krb5.conf", krbFilePath);
Configuration conf = new Configuration();
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
try {
UserGroupInformation.loginUserFromKeytab(keytabUser, keytabPath);
} catch (IOException e) {
LOGGER.error("Register Kerberos has error. {}", e.getMessage());
}
}
}
....
@Override
@Cacheable(unless = "#result==null")
public Table getTable(String dbName, String tableName) {
Table result = new Table();
result.setDbName(dbName);
result.setTableName(tableName);
String sql = SHOW_CREATE_TABLE + dbName + "." + tableName;
Statement stmt = null;
ResultSet rs = null;
StringBuilder sb = new StringBuilder();
try {
Class.forName(hiveClassName);
if (conn == null) {
// new add for conn using username and password
conn = DriverManager.getConnection(hiveUrl, hiveUserName, hivePassword);
}
LOGGER.info("got connection");
选择源:
选择目标:
选择表达式:使用id相等来判断准确率
确认结果:注意表达式不要填错了,我们的目标表使带分区的
]
2、创建job
然后每10min跑一次,按照小时-1偏移,下面我暂停了,显示PAUSED状态
查看首页状态:
到这里,整个流程就通了,绿色的块点进去就是正确率曲线,每个job分了一个块,UI在这里显示不是太友好。
注意事项
1、任务提交到livy会生成具体的数据信息存储在HDFS上如下图所示:
hadoop fs -ls hdfs://nameservice1/griffin/persist/job_test_01/1606115946809
Found 3 items
-rw-r--r-- 2 zm_app_prd supergroup 0 2020-11-23 16:19 hdfs://nameservice1/griffin/persist/job_test_01/1606115946809/_FINISH
-rw-r--r-- 2 zm_app_prd supergroup 179 2020-11-23 16:19 hdfs://nameservice1/griffin/persist/job_test_01/1606115946809/_METRICS
-rw-r--r-- 2 zm_app_prd supergroup 30 2020-11-23 16:19 hdfs://nameservice1/griffin/persist/job_test_01/1606115946809/_START
hadoop fs -cat hdfs://nameservice1/griffin/persist/job_test_01/1606115946809/_METRICS
{"name":"job_test_01","tmst":1606115946809,"value":{"total":125000,"miss":0,"matched":125000,"matchedFraction":1.0},"metadata":{"applicationId":"application_1605769182793_1768"}}
2、注意on yarn 提交需要在配置文件中配置队列信息,否则无法提交
总结
缺点:
1、定义的job无法修改,只能删除重建
2、没有job重跑功能
3、目前貌似只能定义hive表的相关校验 ,如果想校验MySQL到hive的呢?后面代码中已有对应的connector,但是在Ui中无法进行多schema类型选择,目前仅支持hive类型
This step let you choose the single source of truth for data quality comparision with target. Currently you can only select the attributes from one schema
4、用户权限需要自己实现,当前为空。
5、数据资产页未实现,需要依据自身情况实现。
6、measure 和job无编辑功能只能删掉重建,删掉measure则job自动消失。
优点:
1、可以定义基于Hive表数据的count /distinct/null 等的基础性校验、支持json、yaml文件、支持列级别的数据校验
2、每个执行实例都有返回的application id ,便于查错
3、开源,便于自定义实现或者集成到现有系统中
说明
鉴于本人初步测试、了解的水平有限,如有错误之处,烦请指正!