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
創建數據庫:
<code>create database efm;
grant all privileges on efm.* to efm@‘%’ identified by ‘Cloudera4u’;/<code>
解壓下載好的CEM Tarball:
下載鏈接:
https://www.cloudera.com/downloads/cdf.html
<code>tar -xzvf CEM-1.1.0.0-centos7-tars-tarball.tar.gz -C /opt/<code>
目錄結構如下:
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
<code>tar -xzvf nifi-registry-0.3.0.1.1.0.0-172-bin.tar.gz -C /opt//<code>
- 啟動nifi-registry
<code>/opt/nifi-registry-0.3.0.1.1.0.0-172/bin/nifi-registry.sh start/<code>
可以通過以下鏈接訪問nifi-registry,並創建一個Bucket:CEM-1
http://192.168.0.150:18080/nifi-registry/
3.3 安裝efm server
EFM提供了一個可視化的界面,支持基於圖形界面的流編程模型,可以在數千個MiNiFi代理上開發、部署和監控邊緣流。
安裝步驟:
•解壓efm
<code>tar -xzvf efm-1.0.0.1.1.0.0-172-bin.tar.gz -C /opt//<code>
•配置文件conf/efm.properties
<code># 啟用nifi-registry,並指定URL
efm.nifi.registry.enabled=true
efm.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/efm
efm.db.driverClass=com.mysql.jdbc.Driver
efm.db.username=efm
efm.db.password=Cloudera4u
# 指定用於加密敏感數據的主密碼,也可以通過命令行參數或OS環境變量進行設置
efm.encryption.password=myEfm-Cloudera4u/<code>
•準備MySQL-JDBC-Driver
<code>cp mysql-connector-java-5.1.48-bin.jar efm-1.0.0.1.1.0.0-172/lib//<code>
•啟動efm
<code>/opt/efm-1.0.0.1.1.0.0-172/bin/nifi-registry.sh start/<code>
可以通過以下鏈接訪問efm:
http://192.168.0.150:18080/nifi-registry/
3.4 安裝minifi
Apache MiNiFi是一種輕量級的邊緣代理,它實現了Apache NiFi的核心功能,專注於邊緣的數據收集和處理。CEM提供了基於Java和C++的MiNiFi,這裡我們使用MiNiFi Java代理測試。
安裝步驟:
•解壓minifi
<code>/opt/efm-1.0.0.1.1.0.0-172/bin/nifi-registry.sh start/<code>
•配置conf/bootstrap.conf
<code># 啟用c2協議,並指定參數
nifi.c2.enable=true
nifi.c2.rest.url=http://192.168.0.150:10080/efm/api/c2-protocol/heartbeat
nifi.c2.rest.url.ack=http://192.168.0.150:10080/efm/api/c2-protocol/acknowledge
# 配置心跳發送間隔,單位ms
nifi.c2.agent.heartbeat.period=1000
# 配置代理的class名稱
nifi.c2.agent.class=Class-A
# 配置代理的顯示名稱,默認為系統自動生成
nifi.c2.agent.identifier=Agent-150/<code>
•啟動
<code>/opt/minifi-0.6.0.1.1.0.0-172/bin/nifi-registry.sh start/<code>
演示
打開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
閱讀更多 Hadoop實操 的文章