我们面临的问题
随着接入产品的日益增多,以及数据仓库表、字段的日益丰富,数据侧和策略侧对数据质量的关注,越发的迫切;如何能够快速、高效的对核心数据资产,有一个清晰的认知和监控,成为了数据侧需要解决的难题。
我们的解决方案
首先考虑到团队的实际情况,优先考虑借鉴公司内部或者开源的产品,避免人员的大量投入。最终经过前期的调研, 我们选择了Apach griffin。Apache griffin 是ebay中国开源的项目,2018年成为了Apache 下面的顶级开源项目。Apache griffin能解决哪些问题呢?
1. 数据的一致性检测,例如两张表内,相关字段的一致性问题
2. 数据的完整性,字段、取值是否有异常,比如过多的空值、或者枚举值不在合法的范围内等问题
3. 数据的唯一性:其内部定制化了一些常用的规则,如计算相关字段的去重个数
4. 有效性:用户可以通过自定义规则,支持字段合法性的校验,例如IMEI、安卓ID是否合规等
Apache griffin的搭建
在搭建过程中,可以参见Apache griffin相关的文档,例如:
https://git.efivestar.com/projects/INFRA/repos/infra-bigdata/browse/doc/griffin/griffin.md?at=master
在此项目内,我们使用的Apache griffin的最新版本5.0,由于业务场景的要求,主要是对batch数据进行监控;同时,在上述文档的配置中,缺少了对measure项目相关配置,需要在源码内,对src/main/resources下的env-batch.json进行配置,修改其中的spark.master方式为yarn,同时设置HDFS和ES的相关配置信息。
搭建过程中注意事项
1. ES的密码问题;在搭建过程中,由于采用的公司ES集群,需要设置用户的账户和密码信息;在service/src/resources下,配置文件预留了相关的参数,但是在measure项目中,却没有保留用户名和密码的相关参数,会导致在spark写入ES的过程中,由于授权问题,导致失败;解决办法比较简单粗暴,在ElasticSearchSink类中,找到httpResult方法,在header参数中,增加Authorization头,并加入对应的参数值(此处为了快速尝试,采用了硬编码,后期可以从配置中读取);如下所示:
![](https://img.haomeiwen.com/i4999130/cb6167cea71cf973.png)
![](https://img.haomeiwen.com/i4999130/97b5d7f440c83465.png)
2. 在创建measure时,需要从hive中读取所有的DB和tables,加载任务过久
通过前端接口,查看页面加载时调用的方法和对应接口,并定位相关的函数,修改一下两个方法,让其只加载配置文件中定义的DB,降低返回数据量;
![](https://img.haomeiwen.com/i4999130/d70e148e18770fe2.png)
![](https://img.haomeiwen.com/i4999130/422f74c25ea7bce6.png)
Apache griffin的应用
· 完事具备,只欠使用;griffin支持四中主要的任务,在我们这里只关注前两个,accuracy和profiling。首先,可以参照网上教程创建对应的measure,其次创建对应的Job信息;此处可以支持任务的例行化及指标的可视化等;
![](https://img.haomeiwen.com/i4999130/93dd16f2070b95b7.png)
![](https://img.haomeiwen.com/i4999130/760c55c5c9b8dccd.png)
![](https://img.haomeiwen.com/i4999130/c036c0349c2bb640.png)
下一步的工作
监控的核心诉求,还是在发生问题时,进行异常的报警周知;下一步工作会将公司统一的报警接口,集成到griffin平台内,当数据有异常波动时,周知相关的负责人。
网友评论