2. Быстрый старт с Apache Griffin

визуализация данных

Начало работы с Apache Griffin

Модуль качества данных является незаменимым функциональным компонентом в платформе больших данных.Apache Griffin (далее — Griffin) — это решение для обеспечения качества больших данных с открытым исходным кодом.Он поддерживает два метода определения качества данных в пакетном и потоковом режиме.Различные измерения ( например, проверка согласованности количества данных на исходном и целевом концах, количества пустых данных в исходной таблице и т. д.) после завершения автономных задач измеряйте активы данных, тем самым повышая точность и надежность данных.

Установить и развернуть

Подготовка зависимостей

  • JDK (1.8 or later versions)
  • MySQL (версия 5.6 и выше)
  • Hadoop (2.6.0 or later)
  • Hive (version 2.x)
  • Spark (version 2.2.1)
  • Ливи (ливи-0.5.0-инкубатор)
  • ElasticSearch (5.0 or later versions)

инициализация

Для получения подробной информации об инициализации см.Apache Griffin Deployment Guide, этапы установки Hadoop и Hive здесь опущены, и сохранены только этапы копирования файла конфигурации и настройки каталога файла конфигурации Hadoop.

1. MySQL:

Создать кварц базы данных в MySQL и выполнитьInit_quartz_mysql_innodb.sqlИнформация таблицы инициализации скрипта:

mysql -u <username> -p <password> < Init_quartz_mysql_innodb.sql

2. Хадуп и Улей:

Скопируйте файл конфигурации с сервера Hadoop на сервер Livy, здесь предполагается, что файл конфигурации находится в каталоге /usr/data/conf.

Создайте каталог /home/spark_conf на сервере Hadoop и загрузите файл конфигурации Hive hive-site.xml в этот каталог:

#创建/home/spark_conf目录
hadoop fs -mkdir -p /home/spark_conf
#上传hive-site.xml
hadoop fs -put hive-site.xml /home/spark_conf/

3. Установите переменные среды:

#!/bin/bash
export JAVA_HOME=/data/jdk1.8.0_192

#spark目录
export SPARK_HOME=/usr/data/spark-2.1.1-bin-2.6.3
#livy命令目录
export LIVY_HOME=/usr/data/livy/bin
#hadoop配置文件目录
export HADOOP_CONF_DIR=/usr/data/conf

4. Конфигурация Ливи:

Обновите файл конфигурации livy.conf в livy/conf:

livy.server.host = 127.0.0.1
livy.spark.master = yarn
livy.spark.deployMode = cluster
livy.repl.enable-hive-context = true

Начать жить:

livy-server start

5. Конфигурация эластичного поиска:

Создайте индекс грифона в ES:

curl -XPUT http://es: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"
        }
    }
}
'

Упаковка и развертывание исходного кода

Здесь Griffin развертывается путем компиляции и упаковки исходного кода.Исходный адрес Griffin:GitHub.com/Apache/повседневная служба… 在这里插入图片描述Структура исходного кода Griffin очень понятна, в основном включает четыре модуля: griffin-doc, Measure, Service и UI, Среди них griffin-doc отвечает за хранение документов Griffin, Measure отвечает за взаимодействие со spark, выполнение статистических задач, и сервис использует Spring Boot в качестве реализации сервиса. Отвечает за предоставление API-интерфейса restful, необходимого для взаимодействия с модулем пользовательского интерфейса, сохранением статистических задач и отображением статистических результатов.

После того, как исходный код импортирован и построен, необходимо изменить файл конфигурации. Конкретный модифицированный файл конфигурации выглядит следующим образом:

1. service/src/main/resources/application.properties:

# Apache Griffin应用名称
spring.application.name=griffin_service
# MySQL数据库配置信息
spring.datasource.url=jdbc:mysql://10.xxx.xx.xxx:3306/griffin_quartz?useSSL=false
spring.datasource.username=xxxxx
spring.datasource.password=xxxxx
spring.jpa.generate-ddl=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
# Hive metastore配置信息
hive.metastore.uris=thrift://namenode.test01.xxx:9083
hive.metastore.dbname=default
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://namenode.test01.xxx:8081
# 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时配置
ldap.url=ldap://hostname:port
ldap.email=@example.com
ldap.searchBase=DC=org,DC=example
ldap.searchPattern=(sAMAccountName={0})
# hdfs default name
fs.defaultFS=
# elasticsearch配置
elasticsearch.host=griffindq02-test1-rgtj1-tj1
elasticsearch.port=9200
elasticsearch.scheme=http
# elasticsearch.user = user
# elasticsearch.password = password
# livy配置
livy.uri=http://10.104.xxx.xxx:8998/batches
# yarn url配置
yarn.uri=http://10.104.xxx.xxx:8088
# griffin event listener
internal.event.listeners=GriffinJobEventHook

2. сервис/src/main/resources/quartz.properties

#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
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.StdJDBCDelegate
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.json:

{
  "file": "hdfs:///griffin/griffin-measure.jar",
  "className": "org.apache.griffin.measure.Application",
  "name": "griffin",
  "queue": "default",
  "numExecutors": 2,
  "executorCores": 1,
  "driverMemory": "1g",
  "executorMemory": "1g",
  "conf": {
    "spark.yarn.dist.files": "hdfs:///home/spark_conf/hive-site.xml"
  },
  "files": [
  ]
}

4. service/src/main/resources/env/env_batch.json:

{
  "spark": {
    "log.level": "INFO"
  },
  "sinks": [
    {
      "type": "CONSOLE",
      "config": {
        "max.log.lines": 10
      }
    },
    {
      "type": "HDFS",
      "config": {
        "path": "hdfs://namenodetest01.xx.xxxx.com:9001/griffin/persist",
        "max.persist.lines": 10000,
        "max.lines.per.file": 10000
      }
    },
    {
      "type": "ELASTICSEARCH",
      "config": {
        "method": "post",
        "api": "http://10.xxx.xxx.xxx:9200/griffin/accuracy",
        "connection.timeout": "1m",
        "retry": 10
      }
    }
  ],
  "griffin.checkpoint": []
}

После изменения файла конфигурации выполните следующую команду maven в терминале, чтобы скомпилировать и упаковать:

mvn -Dmaven.test.skip=true clean install

После выполнения команды вы увидите два jar-файла, service-0.4.0.jar и Measure-0.4.0.jar, в целевых каталогах модулей service и Measure соответственно. Скопируйте два jar-файла в каталог сервера. Две банки используются следующим образом:

1. Используйте следующую команду, чтобы загрузить файл jar Measure-0.4.0.jar в файловый каталог /griffin HDFS:

#改变jar名称
mv measure-0.4.0.jar griffin-measure.jar
#上传griffin-measure.jar到HDFS文件目录里
hadoop fs -put measure-0.4.0.jar /griffin/

Цель этого в основном в том, что когда spark выполняет задачи в кластере пряжи, ему необходимо загрузить griffin-measure.jar в каталог /griffin HDFS, чтобы избежать ошибки, что класс org.apache.griffin.measure.Application не может быть нашел.

2. Запускаем service-0.4.0.jar и запускаем фон управления Griffin:

nohup java -jar service-0.4.0.jar>service.out 2>&1 &

Через несколько секунд можно будет получить доступ к пользовательскому интерфейсу Apache Griffin по умолчанию (по умолчанию порт для весенней загрузки — 8080).

http://IP:8080

Ссылка на документацию по эксплуатации пользовательского интерфейса:Apache Griffin User Guide. Через интерфейс работы пользовательского интерфейса мы можем создавать свои собственные статистические задачи.Некоторые из интерфейсов отображения результатов следующие:在这里插入图片描述Функциональный опыт 1. Создайте в улье таблицы demo_src и demo_tgt:

--create hive tables here. hql script
--Note: replace hdfs location with your own path
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:///griffin/data/batch/demo_src';

--Note: replace hdfs location with your own path
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:///griffin/data/batch/demo_tgt';

2. Сгенерируйте тестовые данные:

отgriffin.apache.org/data/batch/Загрузите все файлы с адреса на сервер Hadoop, а затем выполните скрипт gen-hive-data.sh с помощью следующей команды:

nohup ./gen-hive-data.sh>gen.out 2>&1 &

Обратите внимание на файл журнала gen.out и внесите соответствующие изменения, если есть какие-либо ошибки. Здесь тестовая среда Hadoop и Hive установлены на одном сервере, поэтому запустите скрипт напрямую.

3. Создавайте статистические задачи через пользовательский интерфейс.Apache Griffin User GuideШаг за шагом.

Ступая на яму

1. Сценарий gen-hive-data.sh не смог сгенерировать данные и не сообщил об ошибке такого файла или каталога.

Причина ошибки: каталог «dt=time» не существует в каталогах /griffin/data/batch/demo_src/ и /griffin/data/batch/demo_tgt/ в HDFS, например dt=20190113.

Решение: Добавьте в скрипт hadoop fs -mkdir для создания операции с каталогом, после модификации будет выглядеть следующим образом:

#!/bin/bash

#create table
hive -f create-table.hql
echo "create table done"

#current hour
sudo ./gen_demo_data.sh
cur_date=`date +%Y%m%d%H`
dt=${cur_date:0:8}
hour=${cur_date:8:2}
partition_date="dt='$dt',hour='$hour'"
sed s/PARTITION_DATE/$partition_date/ ./insert-data.hql.template > insert-data.hql
hive -f insert-data.hql
src_done_path=/griffin/data/batch/demo_src/dt=${dt}/hour=${hour}/_DONE
tgt_done_path=/griffin/data/batch/demo_tgt/dt=${dt}/hour=${hour}/_DONE
hadoop fs -mkdir -p /griffin/data/batch/demo_src/dt=${dt}/hour=${hour}
hadoop fs -mkdir -p /griffin/data/batch/demo_tgt/dt=${dt}/hour=${hour}
hadoop fs -touchz ${src_done_path}
hadoop fs -touchz ${tgt_done_path}
echo "insert data [$partition_date] done"

#last hour
sudo ./gen_demo_data.sh
cur_date=`date -d '1 hour ago' +%Y%m%d%H`
dt=${cur_date:0:8}
hour=${cur_date:8:2}
partition_date="dt='$dt',hour='$hour'"
sed s/PARTITION_DATE/$partition_date/ ./insert-data.hql.template > insert-data.hql
hive -f insert-data.hql
src_done_path=/griffin/data/batch/demo_src/dt=${dt}/hour=${hour}/_DONE
tgt_done_path=/griffin/data/batch/demo_tgt/dt=${dt}/hour=${hour}/_DONE
hadoop fs -mkdir -p /griffin/data/batch/demo_src/dt=${dt}/hour=${hour}
hadoop fs -mkdir -p /griffin/data/batch/demo_tgt/dt=${dt}/hour=${hour}
hadoop fs -touchz ${src_done_path}
hadoop fs -touchz ${tgt_done_path}
echo "insert data [$partition_date] done"

#next hours
set +e
while true
do
  sudo ./gen_demo_data.sh
  cur_date=`date +%Y%m%d%H`
  next_date=`date -d "+1hour" '+%Y%m%d%H'`
  dt=${next_date:0:8}
  hour=${next_date:8:2}
  partition_date="dt='$dt',hour='$hour'"
  sed s/PARTITION_DATE/$partition_date/ ./insert-data.hql.template > insert-data.hql
  hive -f insert-data.hql
  src_done_path=/griffin/data/batch/demo_src/dt=${dt}/hour=${hour}/_DONE
  tgt_done_path=/griffin/data/batch/demo_tgt/dt=${dt}/hour=${hour}/_DONE
  hadoop fs -mkdir -p /griffin/data/batch/demo_src/dt=${dt}/hour=${hour}
  hadoop fs -mkdir -p /griffin/data/batch/demo_tgt/dt=${dt}/hour=${hour}
  hadoop fs -touchz ${src_done_path}
  hadoop fs -touchz ${tgt_done_path}
  echo "insert data [$partition_date] done"
  sleep 3600
done
set -e

2. В каталоге /griffin/persist HDFS нет файла статистических результатов.Проверьте разрешения каталога и установите соответствующие разрешения.

3. Данные метрики в ES пусты, есть две возможности:

  • Информация о конфигурации ES в service/src/main/resources/env/env_batch.json неверна.
  • Имя хоста сервера ES не настроено на сервере пряжи, выполняющем задачу spark, и соединение ненормальное.

4. После запуска service-0.4.0.jar доступ к интерфейсу UI невозможен, а журнал запуска в норме. Проверьте, выполняется ли команда mvn package во время упаковки, и замените эту команду командой mvn -Dmaven.test.skip=true clean install для переупаковки и запуска.