点一下关注吧!!!非常感谢!!持续更新!!!
Java篇开始了!
目前开始更新 MyBatis,一起深入浅出!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(已更完)
- Elasticsearch(已更完)
- DataX(已更完)
- Tez(已更完)
- 数据挖掘(已更完)
- Prometheus(已更完)
- Grafana(已更完)
- 离线数仓(正在更新...)
章节内容
- Atlas 数据仓库元数据管理 正式安装
- 启动服务访问
- Hive血缘关系导入
为什么做数据质量监控
数据质量监控是一个持续的过程,旨在确保数据在整个生命周期中保持高质量。它包括多方面的监控措施,通常包括以下几个主要内容:
- 准确性:监控数据是否准确反映了真实世界的状态,确保数据在收集、存储和传输过程中未发生错误。例如,确保客户信息、交易记录等数据的准确性。
- 完整性:检查数据集是否包含所有必需的信息,确保没有缺失值或者空白字段。缺失的数据可能导致分析结果的偏差,因此数据完整性至关重要。
- 一致性:数据在不同系统之间应该保持一致。数据质量监控确保数据在不同数据源或不同平台中不冲突,例如确保同一客户的姓名、地址等信息在不同数据库中一致。
- 及时性:监控数据是否按时收集和更新。延迟的数据会影响决策的准确性,尤其是在实时分析和业务操作中。
- 有效性:确保数据符合预期的格式或范围,例如检查数字字段是否符合预期的数值范围,日期字段是否为合法日期等。
- 可用性:监控数据是否容易访问和使用,确保相关用户和系统能够快速有效地检索所需数据。
- 合规性:确保数据遵守相关的法律法规和公司政策,尤其是在涉及隐私和安全方面的数据。
- 重复性:监控是否存在重复的数据记录,冗余数据不仅增加存储成本,也可能导致分析结果的失真。
数据质量监控通常结合自动化工具和人工审查,利用数据质量管理平台进行实时监控,生成报告并触发警报,以便及时纠正问题。这些工具和方法帮助企业确保其数据可以用于可靠的分析和决策。
garbage in garbage out
数据不一致
企业早起没有进行统一的规划,大部分信息系统是逐步迭代建设的,系统建设的时间长度不一样,各系统数据标准也不同。企业业务系统更关注业务层面,各个业务系统均有不同的侧重点,各类数据的属性信息设置和要求不统一。
另外,由于各系统的互相独立使用,无法及时同步更新相关信息等各种原因造成系统之间的数据不一致,严重影响了各个系统数据交互和统一识别,基础数据难以共享利用,数据的深层价值也难以体现。
数据不完整
由于企业信息系统的孤立使用,各个业务系统或模块按照各自的需要录入数据,没有统一的录入工具和数据出口,业务系统不需要的信息就不录,造成同样的数据在不同的系统有不同的属性信息,数据完整性无法得到保障。
数据不合规
没有统一的数据管理平台和数据源头,数据全生命周期管理不完整,同时企业各信息系统的数据录入环节过于简单且手工参与较多,就数据本身而言,缺少是否重复、合法、对错等校验环节,导致各个系统的数据不够准确,格式混乱,各类数据难以集成和统一,没有质量控制导致海量数据因质量过低而被难以使用,且没有相应的数据管理流程。
数据冗余
各个信息系统针对数据的标准规范不一,编码规则不一,校验方式不一,且部分业务对数据的验证标准严重缺失,造成了企业顶层视角出现了:一物多码、一码多物的现象。
监控方法
设计思路
数据质量监控设计的要求分为4个模块:数据、规则、告警、反馈
- 数据:需要被监控的数据,可能存放在不同的存储引擎中
- 规则:值如何设计发现异常的规则,一般而言主要是数值的异常和环比等异常监控方式,也会有一些通过算法来挖掘异常数据的方法
- 告警:告警是指发告警的动作,这里可以通过微信消息、电话、短信等方式
- 反馈:反馈是对告警内容的反馈,比如收到了告警内容,要有人员回应是否真的异常了,还是忽略该异常,是否已经处理了该异常,有了反馈机制,整个数据监控才能形成闭环。
技术方案
- 最开始可以关注核心要监控的内容,比如说准确性,那么对核心的一些指标做监控
- 监控平台尽量不要做太多复杂的规则逻辑,尽量只对结果数据进行监控,比如监控日质量是否波动过大,那么把计算流程提前,先计算好结果,最后平台只监控结果指标即可
- 多数据源,多数据源的监控方式有两种方式,针对每个数据源定制实现一部分计算逻辑,也可以通过额外的任务将多数据源中的数据结果通过任务写入一个数据源中,再对该数据源进行监控
- 实时数据监控:区别在于扫描周期不同,因此在设计时候可以先以离线为主,但是尽量预留好实时监控的设计
Griffin架构
Apache Griffin是一个开源的大数据质量解决方案,它支持批处理和流处理两种模式的数据质量检测方式。可以从不同的维度(如离线任务执行完毕后检查源端和目标端的数据质量是否一致,源表数据值空值等)度量数据资产,从而提升数据的准确度、可信度。
Griffin主要分为Define、Measure和Analyze三个部分:
各部分的职责如下:
- Define:主要负责定义数据质量统计的维度,比如数据质量统计的时间跨度、统计的目标(源端和目标端数据量是否一致,数据源里某一字段的非空数量、不重复值的数量、最大值、最小值、TOP5的值数量等等)
- Measure:主要负责执行统计任务,生成统计结果
- Analyze:主要负责保存与展示统计结果
编译安装
相关依赖
- JDK 1.8
- MySQL 5.6 及以上
- Hadoop(2.6.0 或 Later)
- Hive(2.x)
- Maven
- Spark(2.2.1)
- Livy(livy-0.5.0-incubating)
- Elasticsearch (5.0 or later versions)
备注:
- Spark:计算批量、实时指标
- Livy:为服务提供RESTful API调用 Apache Spark
- Elasticsearch:存储指标数据
- MySQL:服务元数据
Spark
Spark在之前的章节已经安装完了,这里做一些额外的配置:
拷贝MySQL驱动:
shell
cp $HIVE_HOME/lib/mysql-connector-java-8.0.19.jar $SPARK_HOME/jars/
将 Spark 的 jar 包上传到 hdfs://h121.wzk.icu:9000/spark/spark_2.2.1_jars/
shell
hdfs dfs -mkdir -p /spark/logs
hdfs dfs -mkdir -p /spark/spark_2.4.5_jars/
hdfs dfs -put /opt/servers/spark-2.4.5-bin-without-hadoop-scala-2.12/jars/*.jar /spark/spark_2.4.5_jars/
处理结果如下所示:
YARN
yarn-site.xml配置:
shell
vim /opt/servers/hadoop-2.9.2/etc/hadoop/yarn-site.xml
写入如下内容:
xml
<!-- vmem-check -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
写入内容如下图所示:
- yarn.nodemanager.vmem-check-enabled:是否检查虚拟内存。
- 修改所有节点,并重启YARN服务,不添加该配置启动spark-shell的话,会报错: Yarn application has already ended! It might have been killed or unable to launch application master.
Elasticsearch
h123.wzk.icu 为 ES 服务所在节点
json
curl -XPUT http://h123.wzk.icu:9200/griffin -d '
{
"aliases": {},
"mappings": {
"accuracy": {
"properties": {
"name": {
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"tmst": {
"type": "date"
}
}
}
},
"settings": {
"index": {
"number_of_replicas": "2",
"number_of_shards": "5"
}
}
}