我们在前面介绍过Edge2AI自动驾驶汽车的解决方案,参见《Edge2AI自动驾驶汽车:在小型智能汽车上收集数据并准备数据管道》,《Edge2AI自动驾驶汽车:构建Edge到AI数据管道》,《Edge2AI自动驾驶汽车:训练模型并将其部署到边缘》,《Edge2AI自动驾驶汽车教程》。在这里我们从实操教程的角度来看如何一步一步的构建Edge2AI自动驾驶汽车的应用,今天的内容为Edge2AI自动驾驶汽车教程1:在边缘提取汽车传感器数据。
生成训练数据
Cloudera自动驾驶汽车(CSDV)是一款微型自动驾驶汽车,经过训练后可以沿着赛道跟踪标记,该团队通过对照片进行快速采样并使用它们进行推理来调整车辆的转向角来实现这一目标。
练习的重点是演示Edge to AI的生命周期,以将模型快速部署到微型汽车上的Jetson TX2模块。该车利用Cloudera Edge Manager(CEM)来继续收集数据并改进模型。
下面的剪辑是CSDV在其赛道周围自动驾驶的示例
介绍
边缘设备的种类繁多,无论是物联网设备、云虚拟机、还是容器,在当今行业中,生成数据的方式仍在继续多样化,并可能导致数据丢失。有必要编写跨组织运行的所有各种边缘设备的流程。此外,需要监视所有设备上的发布,而无需为所有不同类型的设备编写定制的应用程序。CEM为您提供了一个界面来创作流并轻松对其进行监视。CEM由几个组件组成,即Edge Flow Manager(EFM)和MiNifi。EFM为您提供了类似于NiFi的熟悉的用户界面,而MiNifi则用作帮助您从难以到达的地方检索数据的工具。
CEM还允许您将模型精细地部署到企业中每种不同类型的设备上
先决条件
• 在AWS EC2 Ubuntu 18.04实例上部署MiNiFi C ++代理
• AWS:至少为t2.micro或类似版本
• 在Cloudera DataFlow集群上部署的CEM
• 使用CDSW部署CDH集群
概念
我们将使用Cloudera Edge Manager(CEM)在交互式UI中构建MiNiFi数据流,并将其发布到在边缘上运行的MiNiFi代理。该数据流将吸收来自ROS的汽车传感器数据,并将其推送到云中运行的NiFi。在本教程中,您将通过使用云虚拟机来模拟拥有我们的智能车-我们指示您使用AWS,但可以随意使用自己喜欢的公共云提供商-它将用作MiNiFi代理。
为了构建此管道,我们在AWS中使用了三个虚拟机
Name | 使用的服务 | 大小 | 操作系统 |
Edge-Smart Car | |||
MiNiFi | |||
t | |||
2.micro | |||
Ubuntu 18.04 | |||
Cloudera | |||
DataFlow | |||
CEM | |||
m5.2xlarge | |||
Centos 7 | |||
Cloudera Data Platform | |||
HDFS + CDSW | |||
m5.4xlarge | |||
Centos 7 | |||
通过 CEM UI 构建 MiNiFi 的数据流
首先,您将需要有关MiNiFi代理实例的训练数据,并在下载数据时将其切换到该实例
mkdir -p /tmp/csdv/data/input/racetrack/image/ && wget -O /tmp/csdv/data/input/racetrack/image/image.tar.gz https://github.com/hortonworks/data-tutorials/blob/dev/tutorials/cdf/edge2ai-autonomous-car/assets/data/image.tar.gz
tar -xvzf /tmp/csdv/data/input/racetrack/image/image.tar.gz
更改MiNiFi配置,如果您使用的是新的MiNiFi代理,请通过直接将其下载到运行MiNiFi的计算机上来复制这些配置
wget -O /home/ubuntu/nifi-minifi-cpp-0.6.0/conf/minifi.properties https://raw.githubusercontent.com/hortonworks/data-tutorials/dev/tutorials/cdf/edge2ai-autonomous-car/assets/services/minifi\_cpp/minifi.properties
或通过将它们下载到本地计算机上并将它们发送给代理
wget -O ~/Downloads/minifi.properties https://raw.githubusercontent.com/hortonworks/data-tutorials/dev/tutorials/cdf/edge2ai-autonomous-car/assets/services/minifi_cpp/minifi.properties
scp -i /path/tp/pem ~/Downloads/minifi.properties <os-name>@<ec2-public-dns>:/home/ubuntu/nifi-minifi-cpp-0.6.0/conf
编辑minifi.properties文件的以下属性:
表0:更新minifi.properties
属性 | 值 |
nifi.c | |
2.agent | |
.coap.host | |
cem | |
-public-DNS | |
nifi.c2.flow.base.url | |
http://cem-public-DNS:10080/efm/api | |
nifi.c2.rest.url | |
http://cem-public-DNS:10080/efm/api/c2-protocol/heartbeat | |
nifi.c2.rest.url.ack | |
http://cem-public-DNS:10080/efm/api/c2-protocol/acknowledge | |
nifi.c | |
2.agent | |
.class | |
AWS_agent | |
nifi.c | |
2.agent | |
.identifier | |
AWS_AGENT_001 | |
在打开您的CEM UI cem-public-DNS:10080/efm,如果您的minifi.properties配置文件设置正确,您会发现您的代理正在将心跳发送到CEM UI的“监视事件”部分
现在我们知道我们的代理可以与CEM通信,这是个好消息。为了将MiNiFi连接到NiFi,我们需要知道要去的地方,所以让我们为数据创建一条路径以缓慢建立流程。在CDF集群上打开NiFi用户界面,并创建一个新的输入源AWS_MiNiFi_CSV,暂时将其保留,我们将需要输入ID来设置从MiNiFi处理器到NiFi远程处理组(RPG)的连接
这就是我们现在需要在NiFi上进行的所有操作。导航到CEM UI上的Flow Designer,您可以单击与您要为其构建数据流的MiNiFi代理关联的类,请注意,我们将代理命名为我们AWS_AGENT_001的类AWS_AGENT
注意:稍后,当将 MiNiFi C ++代理部署在单独的Jetson TX2上时,将出现名为“ CSDV_agent ”的类。
现在,单击类AWS_agent。按打开开始构建。画布将打开以创建类AWS_agent的流程:
我们将建立一个MiNiFi ETL管道来提取csv和图像数据。
添加 MiNiFi 处理器
添加用于 CSV 数据提取的 GetFile
在画布上添加GetFile处理器以获取csv数据:
将处理器名称更新为GetCSVFile。
双击GetFile进行配置。滚动到Properties,在表1中添加属性以更新GetFile的属性。
表1:更新GetCSVFile属性
属性 | |
值 | |
Input Directory | |
/ | |
tmp | |
/ | |
csdv | |
/data/input/racetrack/image | |
Keep Source File | |
false | |
Batch Size | |
1 | |
将 CSV 数据推送到远程 NiFi 实例
在画布上添加一个远程进程组,以将CSV数据发送到NiFi远程实例:
添加网址 NiFi 运行于:
属性 | 值 |
URL | |
http://:8080/nifi/ | |
将 GetCSVFile 连接到远程进程组,然后添加要发送 csv 数据的 NiFi 目标输入端口 ID :
属性 | 值 |
Destination Input Port ID | |
< | |
NiFi | |
-input-port-ID> | |
注意:您可以通过在NiFi流程中单击您的输入端口来找到输入端口ID。确保连接到将csv数据发送到HDFS的输入端口。
添加用于图像数据提取的 GetFile
在NiFi用户界面上添加一个单独的输入端口,并AWS_AGENT_JPG像现在将其留空之前一样命名。现在更改为CEM UI,并在画布上添加GetFile处理器以获取图像数据:
将处理器名称更新为GetImageFiles。
双击GetFile进行配置。滚动到Properties,在表2中添加属性以更新GetFile的属性。
表2:更新GetFile属性
属性 | 值 |
Input Directory | /tmp/csdv/data/input/racetrack/image/logitech |
Keep Source File | false |
Batch Size | 10 |
将图像数据推送到远程 NiFi 实例
表3:将远程进程组添加到画布上以将图像数据发送到NiFi远程实例:
属性 | 值 | | URL | http://:8080/nifi/ |
表4:将GetImageFiles连接到远程进程组,然后添加以下配置:
属性 | 值 |
Destination Input Port ID | |
< | |
NiFi | |
-input-port-ID> | |
注意:您可以通过在NiFi流程中单击您的输入端口来找到输入端口ID。确保连接到将图像数据发送到HDFS的输入端口。
将数据流发布到 MiNiFi 代理
单击“发布操作”下拉列表:
使此流程对与AWS_agent类关联的所有代理可用,请按publish:
注意:您可以添加评论
Sending driving log csv and image data to NiFi
发布成功的结果:
总结
太好了,现在您已经完成了建立从远程边缘到大数据集群的完整数据管道的第一步。在下一部分中,我们将将此流连接到我们的集群,并设置用于ML模型训练的数据。
来源:https://www.cloudera.com/tutorials/edge2ai-autonomous-car/1.html