Apache Griffin-0.5.0 数据质量监控工具安装及运行batch,streaming数据质量监测demo

Apache Griffin 数据质量监控工具

官网:http://griffin.apache.org/docs/quickstart-cn.html
github: https://github.com/apache/griffin
参考:https://cwiki.apache.org/confluence/display/GRIFFIN/1.+Overview
测试流数据:http://griffin.apache.org/data/streaming/
测试批数据:http://griffin.apache.org/data/streaming/

一. 概述

数据质量检测方式:

Griffin是属于模型驱动的方案,基于目标数据集合或者源数据集(基准数据),用户可以选择不同的数据质量维度来执行目标数据质量的验证。支持两种类型的数据源:

batch数据:通过数据连接器从Hadoop平台收集数据

streaming数据:可以连接到诸如Kafka之类的消息系统来做近似实时数据分析

执行过程

batch数据质量监控原理:hive metadata中加载数据源
根据用户指定的数据质量检查的规则,将规则交给livy,livy以rest方式提交给yarn,yarn启动spark程序,利用Spark这种强大的计算能力,为数据质量做出检测分析。

Griffin 功能:

度量:精确度、完整性、及时性、唯一性、有效性、一致性。
异常监测:利用预先设定的规则,检测出不符合预期的数据,提供不符合规则数据的下载。
异常告警:通过邮件或门户报告数据质量问题。
可视化监测:利用控制面板来展现数据质量的状态。
实时性:可以实时进行数据质量检测,能够及时发现问题。
可扩展性:可用于多个数据系统仓库的数据校验。
可伸缩性:工作在大数据量的环境中,目前运行的数据量约1.2PB(eBay环境)。
自助服务:Griffin提供了一个简洁易用的用户界面,可以管理数据资产和数据质量规则;同时用户可以通过控制面板查看数据质量结果和自定义显示内容。

工作流程

  1. 注册数据,把想要检测数据质量的数据源注册到griffin。
  2. 配置度量模型,可以从数据质量维度来定义模型,如:精确度、完整性、及时性、唯一性等。
  3. 配置定时任务提交spark集群,定时检查数据。
  4. 在门户界面上查看指标,分析数据质量校验结果。

系统架构

img

主要分为,define,measure,analyze 三部分

define:主要负责定义数据质量统计的维度,比如数据质量统计的时间跨度、统计的目标(源端和目标端的数据数量是否一致,数据源里某一字段的非空的数量、不重复值的数量、最大值、最小值、top5的值数量等)

measure:主要负责执行统计任务,生成统计结果

analyze:主要负责保存与展示统计结果

目前支持:

Apache Giffin目前的数据源是支持HIVE, CUSTOM, AVRO, KAFKA。mysql和其他关系型数据库的扩展需要自己进行扩展

注意:

  1. 目前griffin只支持从UI创建accuracy measure ,其他的需要通过配置文件方式运行。
  2. 邮件通知功能 从源码上还没有发现如何去实现。
  3. 异常检测官方只是提供了一种实现思路,具体做起来还得深入了解。

二. Griffin-0.5.0 安装

安装依赖要求:

  1. JDK (1.8 or later versions)
  2. MySQL(version 5.6及以上)
  3. Hadoop (2.6.0 or later)
  4. Hive (version 2.x)
  5. Spark (version 2.2.1)
  6. Livy(livy-0.5.0-incubating)
  7. ElasticSearch (5.0 or later versions)

因为之前已安装CDH6.3.2, 已存在环境
JDK-1.8
Mysql-5.7.30
Hadoop-3.0.0-cdh6.3.2
Hive-2.1.1-cdh6.3.2
Spark-2.4.0+cdh6.3.2 7
Kafka.-2.2.1+cdh60…3.2
Livy-0.7.0
ElasticSearch-7.8.0

ES,Livy安装可参考上两篇。


2.1下载Griffin 0.5.0

官网http://griffin.apache.org/docs/latest.html

解压:

[root@cdh3 package]# pwd
/opt/package
[root@cdh3 package]# ll
total 271988
-rw-r--r--  1 root root  92791460 Jun 28 08:07 apache-livy-0.7.0-incubating-bin.zip
-rw-r--r--  1 root root   4405489 Jun 29 11:34 griffin-0.5.0-source-release.zip
-rw-r--r--. 1 root root 181310701 Jun  2 21:17 jdk-8u73-linux-x64.tar.gz
[root@cdh3 package]# unzip griffin-0.5.0-source-release.zip -d /opt/soft/

在下载的源码中service/src/main/resources/Init_quartz_mysql_innodb.sql找到sql脚本,上传到Mysql Service 所在机器,脚本权限不够修改下权限。griffin的job调度是依赖于quartz,该脚本进行初始化quartz表信息。

[root@cdh3 resources]# pwd
/opt/soft/griffin-0.5.0/service/src/main/resources
[root@cdh3 resources]# scp -r Init_quartz_mysql_innodb.sql root@cdh1:/opt/
#权限不够 修改下权限
[root@cdh1 opt]# chmod 777 Init_quartz_mysql_innodb.sql

2.2 Mysql配置

在MySQL中创建数据库quartz,然后执行Init_quartz_mysql_innodb.sql脚本初始化表信息。因为我之前设置了一个统一授权用户cdh,所以没单独建用户

mysql> CREATE DATABASE quartz DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

你也可以自己建个用户使用下面命令:

CREATE USER ‘quartz’@’%’ IDENTIFIED BY ‘123456’; GRANT ALL PRIVILEGES ON . TO ‘quartz’@’%’;

执行后的表:

[root@cdh1 opt]# ll
total 12
drwxr-xr-x  2 root         root           77 Jun 20 16:37 cdh6
drwxr-xr-x  8 cloudera-scm cloudera-scm   97 Jun 20 23:42 cloudera
-rwxrwxrwx  1 root         root         7462 Jun 29 11:43 Init_quartz_mysql_innodb.sql
drwxr-xr-x. 8 root         root         4096 Jun 28 15:34 package
drwxr-xr-x. 2 root         root            6 Mar 26  2015 rh
drwxr-xr-x. 5 root         root           60 Jun 24 17:41 soft
[root@cdh1 opt]# mysql -u cdh -p quartz  < Init_quartz_mysql_innodb.sql
Enter password:

//执行后会在quartz下生成如下表
mysql> use quartz;
mysql> show tables;
+--------------------------+
| Tables_in_quartz         |
+--------------------------+
| QRTZ_BLOB_TRIGGERS       |
| QRTZ_CALENDARS           |
| QRTZ_CRON_TRIGGERS       |
| QRTZ_FIRED_TRIGGERS      |
| QRTZ_JOB_DETAILS         |
| QRTZ_LOCKS               |
| QRTZ_PAUSED_TRIGGER_GRPS |
| QRTZ_SCHEDULER_STATE     |
| QRTZ_SIMPLE_TRIGGERS     |
| QRTZ_SIMPROP_TRIGGERS    |
| QRTZ_TRIGGERS            |
+--------------------------+
11 rows in set (0.00 sec)

2.3 组件的环境配置

环境配置我没有配,因为集群为CM的我直接略过,下面是别人提供的配法。
export下面的变量。或者创建一个griffin_env.sh文件,写入下面的内容,并将脚本配置到.bashrc

#!/bin/bash
export JAVA_HOME=/usr/local/zulu8

export HADOOP_HOME=/opt/hadoop-3.1.2
export HADOOP_COMMON_HOME=/opt/hadoop-3.1.2
export HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.1.2/lib/native
export HADOOP_HDFS_HOME=/opt/hadoop-3.1.2
export HADOOP_INSTALL=/opt/hadoop-3.1.2
export HADOOP_MAPRED_HOME=/opt/hadoop-3.1.2
export HADOOP_USER_CLASSPATH_FIRST=true
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/opt/spark-2.4.3-bin-hadoop2.7
export LIVY_HOME=/opt/apache-livy-0.6.0-incubating-bin
export HIVE_HOME=/opt/apache-hive-3.1.1-bin
export YARN_HOME=/opt/hadoop-3.1.2
export SCALA_HOME=/usr/share/scala

export PATH=$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin:$LIVY_HOME/bin:$SCALA_HOME/bin

参考链接:https://blog.csdn.net/github_39577257/article/details/90607081

2.4 Hive 配置

griffin运行起来后 底层调用spark计算会依赖hive的配置文件,放在hdfs的目录上spark任务运行时候会直接引用。

[root@cdh3 resources]# hadoop fs -mkdir /home/spark_conf

[root@cdh3 package]# hadoop fs -put /etc/hive/conf/hive-site.xml /home/spark_conf
[root@cdh3 package]# hadoop fs -ls /home/spark_conf
Found 1 items
-rw-r--r--   1 root supergroup       6708 2020-06-29 15:20 /home/spark_conf/hive-site.xml
[root@cdh3 package]#

2.5 配置 Griffin

1.修改service/src/main/resources/application.properties

[root@cdh1 resources]# vim /opt/soft/griffin-0.5.0/service/src/main/resources/application.properties

#apache griffin application name 此处name要和后面的griffin server jar包所要改的名字一致
spring.application.name=griffin_service
#griffin server启动 默认端口8080
server.port=8090

#配置mysql,username是我的统一授权用户
spring.datasource.url=jdbc:mysql://cdh1:3306/quartz?autoReconnect=true&useSSL=false
spring.datasource.username=cdh
spring.datasource.password=123456
spring.jpa.generate-ddl=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
# Hive metastore  根据 /etc/hive/conf.cloudera.hive/hive-site.xml 填写
hive.metastore.uris=thrift://cdh2:9083
hive.metastore.dbname=hive
hive.hmshandler.retry.attempts=15
hive.hmshandler.retry.interval=2000ms
# Hive cache time
cache.evict.hive.fixedRate.in.milliseconds=900000
# Kafka schema registry
kafka.schema.registry.url=http://cdh4:9092
# Update job instance state at regular intervals
jobInstance.fixedDelay.in.milliseconds=60000
# Expired time of job instance which is 7 days that is 604800000 milliseconds.Time unit only supports milliseconds
jobInstance.expired.milliseconds=604800000
# schedule predicate job every 5 minutes and repeat 12 times at most
#interval time unit s:second m:minute h:hour d:day,only support these four units
predicate.job.interval=5m
predicate.job.repeat.count=12
# external properties directory location
external.config.location=
# external BATCH or STREAMING env
external.env.location=
# login strategy ("default" or "ldap")
login.strategy=default
# ldap
ldap.url=ldap://hostname:port
ldap.email=@example.com
ldap.searchBase=DC=org,DC=example
ldap.searchPattern=(sAMAccountName={
   
   0})
# hdfs default name  根据 /etc/hadoop/conf/core-site.xml 填写
fs.defaultFS=hdfs://cdh2:8020
# elasticsearch
elasticsearch.host=cdh3
elasticsearch.port=9200
elasticsearch.scheme=http
# elasticsearch.user = user
# elasticsearch.password = password
# livy
livy.uri=http://cdh3:8998/batches
#livy.need.queue=false
#livy.task.max.concurrent.count=20
#livy.task.submit.interval.second=3
#livy.task.appId.retry.count=3
# yarn url resourcemanager 地址
yarn.uri=http://cdh2:8088
# griffin event listener
internal.event.listeners=GriffinJobEventHook

# 压缩
server.compression.enabled=true
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css

2.配置service/src/main/resources/quartz.properties
不用动,保持默认

[root@cdh1 resources]# vim /opt/soft/griffin-0.5.0/service/src/main/resources/quartz.properties

org.quartz.scheduler.instanceName=spring-boot-quartz
org.quartz.scheduler.instanceId=AUTO
org.quartz.threadPool.threadCount=5
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
# If you use postgresql as your database,set this property value to org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
# If you use mysql as your database,set this property value to org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# If you use h2 as your database, it's ok to set this property value to StdJDBCDelegate, PostgreSQLDelegate or others
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.useProperties=true
org.quartz.jobStore.misfireThreshold=60000
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=20000

3.配置service/src/main/resources/sparkProperties.j

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值