如果您错过了1部分, 您可以在这里查看。

简单的 Apache NiFi 操作仪表板-部分2

要访问我们仪表板中显示的数据, 我们将使用一些 Spring 引导 2.06 Java 8 微服务在 Hadoop 3.1 上的 HDP 3.0 中调用 Apache Hive 3.1.0 表。

我们将有我们的网站托管和拨打 Apache NiFi, 我们的微服务, 纱线和其他 api 的休息电话。

正如您所看到的, 我们可以轻松地将来自 HDP 3-Apache Hive 3.1.0 的数据合并到 Spring 启动 Java 应用程序中, 但没有太多麻烦。您可以看到 Maven 构建脚本 (所有代码都在 GitHub 中)。

我们的动机是将所有这些数据放在某个位置, 并显示在可以使用 REST api 进行数据访问和更新的仪表板上。我们可能会选择使用 apache NiFi 的所有 REST api, 或者我们可以做一些在 Apache NiFi。我们还在探索。我们还可以决定将后端更改为 HBase 2.0、凤凰、德鲁伊或这些组合。我们会看到的。

弹簧启动2.0.6 加载

JSON 输出

弹簧引导微服务和 UI

https://github.com/tspannhw/operations-dashboard

首先, 我有一个简单的网页, 它调用 REST api 之一。

微服务可以运行的纱线 3.1, Kubernetes, CloudFoundry, OpenShift, 或任何机器, 可以运行一个简单的 Java 8 jar。

我们可以将此 HTML 作为更大的仪表板或托管在任何位置的一部分。

对于分析监视数据, 我们有一些用于度量、状态和公告的架构。

现在我正在监视数据在 apache Hive 中, 我可以轻松地在 apache 齐柏林 (或任何 JDBC/ODBC 工具) 查询它。

阿帕奇齐柏林屏幕

我们有很多用于监视 NiFi 的报告任务。

我们从 NiFi 阅读并发送到 NiFi, 很高兴有一个专门的报告集群。

只需向我显示 MonitorMemory 的公告 (您可以在报告任务中看到这一点)

NiFi 查询以限制我们在 Hive 中存储的公告 (现在只是抓取错误)

REST api 的 Spring 启动代码

指标 REST API 结果

公告 REST API 结果

度量值主页

运行微服务

java -Xms512m -Xmx2048m -Dhdp.version=3.0.0 -Djava.net.preferIPv4Stack=true -jar target/operations-0.0.1-SNAPSHOT.jar

Maven POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dataflowdeveloper</groupId>
<artifactId>operations</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>operations</name>
<description>Apache Hive Operations Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/>
</parent>


<properties>
<java.version>1.8</java.version>
</properties>


<dependencies>


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
<exclusion>
 <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
 </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>3.1.0</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
   <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo

io/库-发布 </网址 > </pluginRepository > </pluginRepositories > </项目 >

在互联网的帮助下, 我们有一些简单的 JavaScript 来读取 Spring 启动/指标 REST API 并填充一些值:

html 和 JavaScript (参见 src/主/资源/静态/索引. html)

 <h1>Metrics</h1>
<div id="output" name="output"  class="white-frame">
  <ul id="metrics"></ul>  
</div>
<script language="javascript">var myList = document.querySelector('ul');var myRequest = new Request('./metrics/');fetch(myRequest).then(function(response) { return response.json(); }).then(function(data) {for (var i = 0; i < data.length; i++) {var listItem = document.createElement('li');listItem.innerHTML = '<strong>Timestamp' + data[i].timestamp + '</strong>Flow Files Received: ' +data[i].flowfilesreceivedlast5minutes + ' JVM Heap Usage:' + data[i].jvmheap_usage +' Threads Waiting:' + data[i].jvmthread_statestimed_waiting +' Thread Count: ' + data[i].jvmthread_count +' Total Task Duration: ' + data[i].totaltaskdurationnanoseconds +' Bytes Read Last 5 min: ' + data[i].bytesreadlast5minutes +' Flow Files Queued: ' + data[i].flowfilesqueued +' Bytes Queued: ' + data[i].bytesqueued;myList.appendChild(listItem);}});</script>

示例 API 调用到 Spring 启动

NiFi 的 REST API

Comments are closed.