作者:卢其敏
EFM简介
Cloudera Data Flow(CDF)作为Cloudera一个独立的产品单元,围绕着实时数据采集,实时数据处理和实时数据分析有多个不同的功能模块,如下图所示:
图中4个功能模块从左到右分别解释如下:
1.Cloudera Edge Management(CEM),主要是指在边缘设备如传感器上部署MiNiFi的agent后用于采集数据。
2.Cloudera Flow Management(CFM),主要是使用Apache NiFi通过界面化拖拽的方式实现数据采集,处理和转换。
3.Cloudera Streaming Processing(CSP),主要包括Apache Kafka,Kafka Streams,Kafka的监控Streams Messaging Manager(SMM),以及跨集群Kafka topic的数据复制Streams Replication Manager(SRM)。
4.Cloudera Streaming Analytics(CSA),以前这块是使用Storm来作为Native Streaming来补充Spark Streaming的Micro-batch的时延问题,目前这块改为Flink来实现,未来的CDF中将不再包含Storm。
本文会对CEM进行简要介绍,同时会演示如何安装CEM即MiNiFi,最后会演示一个简单的示例通过MiNiFi搜集数据并写入到HDFS。
Cloudera Edge Management(CEM)是由边缘代理和边缘管理中心组成的边缘管理(Edge Management )解决方案。它管理、控制和监控边缘代理,可以从边缘设备收集数据并将数据推回边缘设备。
CEM包含两个组件:
•Apache MiNiFi。一种轻量级的边缘代理,它实现了Apache NiFi的核心功能,专注于边缘的数据收集和处理。
•Edge Flow Manager(EFM)。是一个代理管理中心,它支持基于图形界面的流(Flow)编程模型,可以在数千个MiNiFi代理上开发、部署和监控边缘流。
CEM为边缘流(Edge Flow)生命周期提供了三种主要功能:
•Flow著作:EFM通过提供无代码拖放式开发环境来解决开发IoT应用程序的挑战。该开发环境提供了类似于NiFi的体验,可用于将数据从边缘代理捕获、过滤、转换和传输到CDH等上游企业系统。
•Flow部署:管理物联网应用程序的部署一直是行业的挑战。Edge Flow Manager通过提供一种简单但功能强大的模型来将流部署到代理来缓解这一挑战。当新的或修改的流程可用时,将通知在EFM中注册的代理。代理将访问该流并将其本地应用。
•Flow监控:CEM中的代理向其EFM实例发送定期心跳。心跳包含有关部署和运行时指标的信息。EFM存储、分析这些心跳并将其呈现给最终用户。心跳使操作员可以可视化细节,例如流吞吐量、连接深度、运行的处理器以及整体代理运行状况。
系统需求
可以在Windows操作系统上安装MiNiFi C ++或Java代理,但是Windows操作系统不支持运行EFM Server和NiFi Registry。
- 操作系统支持:
- JDK版本支持
- 数据库支持
安装CEM
3.1 测试环境
- 操作系统:RHEL-7.6
- 数据库:MySQL-5.7.28
- Java:jdk1.8.0_181-cloudera
- CEM:CEM-1.1.0.0-centos7-tars-tarball.tar.gz
- MySQL-Connector: mysql-connector-java-5.1.48-bin.jar
创建数据库:
create database efm;grant all privileges on efm.* to efm@‘%’ identified by ‘Cloudera4u’;
解压下载好的CEM Tarball:
下载链接:
https://www.cloudera.com/downloads/cdf.html
tar -xzvf CEM-1.1.0.0-centos7-tars-tarball.tar.gz -C /opt
目录结构如下:
3.2 安装nifi-registry
Apache NiFi Registry(Apache NiFi的子项目)是一个补充应用程序,用于一个或多个NiFi以及MiNiFi实例之间的共享资源的存储和管理。
Apache NiFi Registry是流(Flow)的版本控制仓库。在Apache NiFi中创建的流程组级别的数据流可以置于版本控制下并存储在NiFi Registry中。NiFi Registry提供流的存储位置,并管理访问、创建、修改或删除流的权限。
Apache NiFi Registry(Apache NiFi的子项目)是一个补充应用程序,用于一个或多个NiFi以及MiNiFi实例之间的共享资源的存储和管理。
Apache NiFi Registry是流(Flow)的版本控制仓库。在Apache NiFi中创建的流程组级别的数据流可以置于版本控制下并存储在NiFi Registry中。NiFi Registry提供流的存储位置,并管理访问、创建、修改或删除流的权限。
EFM可以使用现存的NiFi Registry,也可以使用tarball中自带的NiFi Registry。以下测试采用后者。
安装步骤:
- 解压nifi-registry
tar -xzvf nifi-registry-0.3.0.1.1.0.0-172-bin.tar.gz -C /opt/
- 启动nifi-registry
/opt/nifi-registry-0.3.0.1.1.0.0-172/bin/nifi-registry.sh start
可以通过以下链接访问nifi-registry,并创建一个Bucket:CEM-1
http://192.168.0.150:18080/nifi-registry/
3.3 安装efm server
EFM提供了一个可视化的界面,支持基于图形界面的流编程模型,可以在数千个MiNiFi代理上开发、部署和监控边缘流。
安装步骤:
•解压efm
tar -xzvf efm-1.0.0.1.1.0.0-172-bin.tar.gz -C /opt/
•配置文件conf/efm.properties
# 启用nifi-registry,并指定URLefm.nifi.registry.enabled=trueefm.nifi.registry.url=http://192.168.0.150:18080# Bucket是nifi-registry中基础存储单元(目录),bucketId和bucketName只填一个efm.nifi.registry.bucketId=efm.nifi.registry.bucketName=CEM-1# 指定数据库连接参数efm.db.url=jdbc:mysql://192.168.0.149/efmefm.db.driverClass=com.mysql.jdbc.Driverefm.db.username=efmefm.db.password=Cloudera4u# 指定用于加密敏感数据的主密码,也可以通过命令行参数或OS环境变量进行设置efm.encryption.password=myEfm-Cloudera4u
•准备MySQL-JDBC-Driver
cp mysql-connector-java-5.1.48-bin.jar efm-1.0.0.1.1.0.0-172/lib/
•启动efm
/opt/efm-1.0.0.1.1.0.0-172/bin/nifi-registry.sh start
可以通过以下链接访问efm:
http://192.168.0.150:18080/nifi-registry/
3.4 安装minifi
Apache MiNiFi是一种轻量级的边缘代理,它实现了Apache NiFi的核心功能,专注于边缘的数据收集和处理。CEM提供了基于Java和C++的MiNiFi,这里我们使用MiNiFi Java代理测试。
安装步骤:
•解压minifi
/opt/efm-1.0.0.1.1.0.0-172/bin/nifi-registry.sh start
•配置conf/bootstrap.conf
# 启用c2协议,并指定参数nifi.c2.enable=truenifi.c2.rest.url=http://192.168.0.150:10080/efm/api/c2-protocol/heartbeatnifi.c2.rest.url.ack=http://192.168.0.150:10080/efm/api/c2-protocol/acknowledge# 配置心跳发送间隔,单位msnifi.c2.agent.heartbeat.period=1000# 配置代理的class名称nifi.c2.agent.class=Class-A# 配置代理的显示名称,默认为系统自动生成nifi.c2.agent.identifier=Agent-150
•启动
/opt/minifi-0.6.0.1.1.0.0-172/bin/nifi-registry.sh start
演示
打开EFM的WebUI界面,默认进入
Monitor菜单页面。这里我们可以看到注册到该EFM实例的Minifi代理类别(Class),以及相关的告警信息和Event事件信息。
切换到
Design菜单页,可以看到Minifi代理的Class列表,打开一个Class类,即可对这个Class类下所有的Minifi代理进行Flow设计、开发和管理。
4.1 示例
本实例展示了从Minifi收集数据,将数据发送至NiFi,再由NiFi将数据写入HDFS。
具体配置方式如下:
切换到
Design菜单页,选择Class-A,并点击OPEN
点击“PROCESSOR”选择“GenerateFlowFile”自动产生测试数据;
配置“GenerateFlowFile”:
5秒产生一次数据,数据内容为“Minifi-Testing,Hello.”
点击“REMOTE PROCESS GROUP”,填入NiFi实例的URL,如:http://192.168.0.151:8080/nifi
在NiFi实例上建立一个INPUT端口,下游输出到HDFS
(NiFi的输入端口对应Minifi的输出端口。当数据从Nifi发送到Minifi时,Nifi的输出端口对应Minifi的输入端口)
在EFM上,连接“GenerateFlowFile”与RPG,并填入NiFi的INPUT端口ID,如:
c46f1c86-0170-1000-ffff-ffffc2446a17(该ID号在NiFi上查看)
在EFM上,点击右上角“ACTION”,选择“Publish…”,将Flow推送至ninifi和nifi-registry
打开nifi-registry可以看到我们刚才推送的Flow版本信息
在NiFi上启动Process,并查看“Data Provenance”,可以看到数据已经写入HDFS
使用HDFS命令行查看数据已经写入HDFS
- 文档结束 2020-03-10