赞
踩
[zhouchen@hadoop202 target]$ hive -e "create database griffin_demo"
[zhouchen@hadoop202 target]$ hive --database griffin_demo
hive> CREATE EXTERNAL TABLE `demo_src`( > `id` bigint, > `age` int, > `desc` string) > PARTITIONED BY ( > `dt` string, > `hour` string) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY '|' > LOCATION > 'hdfs://hadoop202:9820/griffin/data/batch/demo_src'; hive> CREATE EXTERNAL TABLE `demo_tgt`( > `id` bigint, > `age` int, > `desc` string) > PARTITIONED BY ( > `dt` string, > `hour` string) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY '|' > LOCATION > 'hdfs://hadoop202:9820/griffin/data/batch/demo_tgt'; hive> show tables; OK demo_src demo_tgt Time taken: 0.051 seconds, Fetched: 2 row(s)
– 如果有问题,删除后再重新创建
– drop table if exists demo_src;
– drop table if exists demo_tgt;
1.获取官网测试数据。在/opt/module/griffin-master目录下创建data文件夹,并下载相关测试数据
[zhouchen@hadoop202 griffin-master]$ mkdir data [zhouchen@hadoop202 data]$ wget http://griffin.apache.org/data/batch/gen_demo_data.sh wget http://griffin.apache.org/data/batch/gen_delta_src.sh wget http://griffin.apache.org/data/batch/demo_basic wget http://griffin.apache.org/data/batch/delta_tgt wget http://griffin.apache.org/data/batch/insert-data.hql.template wget http://griffin.apache.org/data/batch/gen-hive-data.sh wget http://griffin.apache.org/data/batch/create-table.hql wget http://griffin.apache.org/data/batch/delta_src wget http://griffin.apache.org/data/batch/delta_tgt [zhouchen@hadoop202 data]$ chmod 777 ../data -R #生成临时文件 [zhouchen@hadoop202 data]$ bash gen_demo_data.sh #生产测试数据 [zhouchen@hadoop202 data]$ bash gen-hive-data.sh
2.查看生成的数据如下:
[zhouchen@hadoop202 data]$ head -3 delta_src
124|262|262
124|1752|1752
124|533|533
[zhouchen@hadoop202 data]$ head -3 demo_src
0|1|1
0|2|2
0|3|3
[zhouchen@hadoop202 data]$ head -3 demo_tgt
0|1|1
0|2|2
0|3|3
[zhouchen@hadoop202 data]$ insert-data.hql.template
#修改内容如下
LOAD DATA LOCAL INPATH 'demo_src' INTO TABLE griffin_demo.demo_src PARTITION (PARTITION_DATE);
LOAD DATA LOCAL INPATH 'demo_tgt' INTO TABLE griffin_demo.demo_tgt PARTITION (PARTITION_DATE);
1.查看hive的数据
hive> select * from demo_src limit 3;
OK
0 1 1 20200604 19
0 2 2 20200604 19
0 3 3 20200604 19
2.查看hdfs上的数据
[zhouchen@hadoop202 griffin-master]$ hdfs dfs -ls /griffin/data/batch
2020-06-04 20:08:01,183 INFO [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDS
Found 2 items
drwxr-xr-x - zhouchen supergroup 0 2020-06-04 19:11 /griffin/data/batch/demo_src
drwxr-xr-x - zhouchen supergroup 0 2020-06-04 19:11 /griffin/data/batch/demo_tgt
3.数据资产DataAssets
注意根据官网描述,目前UI创建Measure只支持Accuracy的Measure,UI界面上虽然有其他选项但是无法运行job。
单击头部的“Measures”,然后选择“Create Measure”。可以使用该measure来处理数据并获得所需的结果。
“Map To”: 选择source和target匹配的规则。共以下6中选项:
• = : 两列的数据应完全匹配。
• != : 两列的数据应该不同。
• >: 目标列数据应大于源列数据。
• >= : 目标列数据应大于或等于源数据。
• <: 目标列数据应小于源列数据。
• <=: 目标列数据应小于或等于源列数据
• Job Name: 设置Job的名字
• Measure Name: 要执行的measure的名称,这个是从前面创建的Measure的名字中选择。
• Cron Expression: cron 表达式。 For example: 0 0/4 * * *.
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
• Begin: 数据段开始时间与触发时间的比较
• End: 数据段结束时间与触发时间比较。
提交作业后,Apache Griffin将在后台安排作业,计算完成后,可以监视仪表板以在UI上查看结果
• 点击头部的Health会显示指标数据的热图。
• 点击右侧的DQ Metrics可以看到指标图标。单击图标可以放大。
1)创建json文件制定相应规则
在/opt/module/griffin-master/measure/target目录下创建文件dq.json
vim dq.json { "name": "batch_accu", "process.type": "batch", "data.sources": [ { "name": "src", "baseline": true, "connectors": [ { "type": "hive", "version": "2.3", "config": { "database": "gmall", "table.name": "dwd_order_info" } } ] }, { "name": "tgt", "connectors": [ { "type": "hive", "version": "2.3", "config": { "database": "gmall", "table.name": "dws_user_action" } } ] } ], "evaluate.rule": { "rules": [ { "dsl.type": "griffin-dsl", "dq.type": "accuracy", "out.dataframe.name": "accu", "rule": "src.id = tgt.user_id ", "details": { "source": "src", "target": "tgt", "miss": "miss_count", "total": "total_count", "matched": "matched_count" }, "out": [ { "type": "metric", "name": "accu" }, { "type": "record", "name": "missRecords" } ] } ] }, "sinks": ["CONSOLE", "HDFS"] }
选项:“rule”: “src.id = tgt.id AND src.age = tgt.age AND src.desc = tgt.desc”
rule制定匹配规则如src表的id字段对应 tgt表id字段
当前规则是id age desc三者字段相同,这个规则就是接下来对应job所需监控的对应关系
2)在/opt/module/griffin-master/measure/target目录下创建文件env.json
vim env.json { "spark": { "log.level": "WARN" }, "sinks": [ { "type": "console" }, { "type": "hdfs", "config": { "path": "hdfs://hadoop202:9820/griffin/persist" } }, { "type": "elasticsearch", "config": { "method": "post", "api": "http://hadoop202:9200/griffin/accuracy" } } ] }
分别指定hdfs结果存储路径和elasticsearch路径
两个json文件编写完毕后 指定 /opt/module/griffin-master/measure/target 该路径下的griffin-measure.jar 运行Spark任务
(3)Spark 提交脚本命令
[zhouchen@hadoop202 target]$ spark-submit --class org.apache.griffin.measure.Application --master yarn --deploy-mode client --driver-memory 1g --executor-memory 1g --num-executors 1 griffin-measure.jar env.json dq.json
跑完任务之后,可以看到对比结果总条数250000未匹配上的数有980条,匹配上的数据有249020条,匹配分数为0.99608。
也可以去HDFS上查看结果
根据任务id号,下载missRecords文件,里面保存的所有没匹配上的数据,方便分析问题。
如果想查看最大值、总个数、空值个数、最大长度等值那就得创建profiling measure
1)创建json文件定制规则
vim dq2.json
{ "name": "batch_prof", "process.type": "batch", "data.sources": [ { "name": "src", "baseline": true, "connectors": [ { "type": "hive", "version": "2.2", "config": { "database": "tmp", "table.name": "demo_tgt" } } ] } ], "evaluate.rule": { "rules": [ { "dsl.type": "griffin-dsl", "dq.type": "profiling", "out.dataframe.name": "prof", "rule": "src.id.count() AS id_count, src.age.max() AS age_max, src.desc.length().max() AS desc_length_max", "out": [ { "type": "metric", "name": "prof" } ] } ] }, "sinks": ["CONSOLE", "HDFS"] }
同样rule选项编写规则,如当前规则统计id总个数、age最大值和desc最大长度。
具体rule规则可查看官网
https://github.com/apache/griffin/blob/master/griffin-doc/measure/measure-batch-sample.md
2)编辑env.json
vim env.json { "spark": { "log.level": "WARN" }, "sinks": [ { "type": "console" }, { "type": "hdfs", "config": { "path": "hdfs://hadoop202:9820/griffin/persist" } }, { "type": "elasticsearch", "config": { "method": "post", "api": "http://hadoop202:9200/griffin/accuracy" } } ] }
分别指定hdfs结果存储路径和elasticsearch路径
两个json文件编写完毕后 指定 /opt/module/griffin-master/measure/target 该路径下的griffin-measure.jar 运行spark任务
3)Spark 提交脚本命令
spark-submit --class org.apache.griffin.measure.Application --master yarn --deploy-mode client --driver-memory 1g --executor-memory 1g --num-executors 1 griffin-measure.jar env.json dq2.json
在rule里可以写sql 比如当前rule中统计id为空的个数,注意查询时,不是查询表名而是查询name名称
bin/elasticsearch 启动失败
解决,修改内存大小,然后刷新reboot
[zhouchen@hadoop202 elasticsearch-6.3.1]$ sudo vim /etc/security/limits.d/20-nproc.cof
修改内容如下:
Elasticsearch 添加索引返回406
{
"error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
"status" : 406
}
原因是没有指定head,修改创建griffin索引的命令如下:
curl -H "Content-Type: application/json" -X PUT http://hadoop202: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" } } }
报错信息:
Call From hadoop202/192.168.139.137 to hadoop202:9000 failed on connection exception:....
解决:
这里报错是因为spark-env.sh/ spark-defaults.conf中的hdfs端口号写成了Hadoop2.x的9000,应该写hadoop3.x的9820
**在编译griffin的时候很多hdfs端口也要写9820而不是hadoop2.x的9000
报这个错是因为hive-site.xml中配置了tez引擎,下面报错的根因也是tez找不到
解决:
拷贝到spark中的hive-site.xml将tez引擎改成mr
<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>
解决:
因为安装的jdk1.8,需要在yarn-site.xml中添加配置
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
报错如下:
[zhouchen@hadoop202 livy-0.5.0]$ bin/livy-server
Could not find Livy jars directory.
解决:
下载的安装包incubator-livy-0.5.0-incubating.zip是不带jar的版本,需要下载带jar的版本livy-0.5.0-incubating-bin.zip
Griffin的Web端口是8080.spark已经占用了该端口号
解决:
查看占用
[zhouchen@hadoop202 griffin-master]$ sudo netstat -nltp | grep 8080
[sudo] zhouchen 的密码:
tcp6 0 0 :::8080
杀死进程
[zhouchen@hadoop202 griffin-master]$ sudo kill -9 6334
修改spark的端口号为其他
/opt/module/spark-2.4.5/sbin/start-master.sh
[zhouchen@hadoop202 sbin]$ vim start-master.sh
#修改内容如下:
#定位到61行
if [ “$SPARK_MASTER_WEBUI_PORT” = “” ]; then
SPARK_MASTER_WEBUI_PORT=8087
fi
#修改成其他的端口号即可
20/06/07 18:27:26 ERROR Application$: assertion failed: Connector is undefined or invalid java.lang.AssertionError: assertion failed: Connector is undefined or invalid at scala.Predef$.assert(Predef.scala:170) at org.apache.griffin.measure.configuration.dqdefinition.DataSourceParam.validate(DQConfig.scala:100)
这个问题是创建完job之后直到自动触发执行,DQ Metrics页面都是no centent,然后检查livy session发现了上面了报错,环境连接失败。
检查各组件连接状态。hdfs、es、livy、hive都是正常,ES中的griffin索引状态也是正常。
找到网上一个案例,发现是系统bug,在新的版本中会有的。链接如下:
https://github.com/apache/griffin/pull/568
解决:
重新下载老版本的Apache griffin包,重新编译
提交job运行失败,在livy的session中报错找不到hive.metastore.sasl.enabled
解决:
hive.metastore.sasl.enabled默认的是false,但是当前安装的是hive-3.x,不清楚会不会跟hive-2.x有不同。因此在/opt/module/griffin-master/service/src/main/resources/application.properties配置中显式地配置相关的三个配置项:
hive.metastore.sasl.enabled=false #默认为false,这里显式地配置
hive.metastore.kerberos.principal= #默认为空
hive.metastore.kerberos.keytab.file=hive-metastore/_HOST@EXAMPLE.COM #默认值
job提交运行失败,在livy的session中报错checkpoint超时,建议setting spark.sql.autoBroadcastJoinThreshold to 1
解决:
停止griffin-service.jar与spark集群,修改spark-default.conf添加如下配置:
#添加如下配置
spark.sql.autoBroadcastJoinThreshold 1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。