基于Spark的物联网设备故障实时检测与分析

简介: 基于Spark的物联网设备故障实时检测与分析

一、业务场景

通过实时计算所有计算机机架在一个滑动窗口上的平均温度,从而发现温度异常的机架,及时检测故障的发生。

二、数据集说明

本案例用到的实时数据说明如下:

  - 原始数据文件位于本地/data/dataset/streaming/iot/file1.json和/data/dataset/streaming/iot/file2.json

以下为数据中心的两个数据传感器检测到的两个机架的温度数据:

  file1.json:

   {“rack”:”rack1”,”temperature”:99.5,”ts”:”2017-06-02T08:01:01”}
   {“rack”:”rack1”,”temperature”:100.5,”ts”:”2017-06-02T08:06:02”}
   {“rack”:”rack1”,”temperature”:101.0,”ts”:”2017-06-02T08:11:03”}
   {“rack”:”rack1”,”temperature”:102.0,”ts”:”2017-06-02T08:16:04”}

file2.json:

   {“rack”:”rack2”,”temperature”:99.5,”ts”:”2017-06-02T08:01:02”}
   {“rack”:”rack2”,”temperature”:105.5,”ts”:”2017-06-02T08:06:04”}
   {“rack”:”rack2”,”temperature”:104.0,”ts”:”2017-06-02T08:11:06”}
   {“rack”:”rack2”,”temperature”:108.0,”ts”:”2017-06-02T08:16:08”}

三、操作步骤

阶段一、启动HDFS、Spark集群服务

1、启动HDFS集群

  在Linux终端窗口下,输入以下命令,启动HDFS集群:

1.  $ start-dfs.sh

2、启动Spark集群

  在Linux终端窗口下,输入以下命令,启动Spark集群:

1.  $ cd /opt/spark
2.  $ ./sbin/start-all.sh

3、验证以上进程是否已启动

  在Linux终端窗口下,输入以下命令,查看启动的服务进程:

1.  $ jps

如果显示以下5个进程,则说明各项服务启动正常,可以继续下一阶段。

1.  2288 NameNode
2.  2402 DataNode
3.  2603 SecondaryNameNode
4.  2769 Master
5.  2891 Worker

阶段二、准备案例中用到的数据集

1、在HDFS上创建数据存储目录。在Linux终端窗口下,输入以下命令:

1.  $ hdfs dfs -mkdir -p /data/dataset/streaming/iot-input

2、将iot数据文件上传到HDFS上。在Linux终端窗口下,输入以下命令:

1.  $ hdfs dfs -put /data/dataset/streaming/iot/*  /data/dataset/streaming/iot-input/

3、在Linux终端窗口下,输入以下命令,查看HDFS上是否已经有了iot目录:

1.  $ hdfs dfs -ls /data/dataset/streaming/iot-input

这时应该看到该目录下有两个文件:file1.json和file2.json。

阶段三、处理实时数据

1、启动spark shell。在Linux终端窗口中,输入以下命令:(注意,请将以下命令中的localhost替换为虚拟机实际的机器名)

1.  $ spark-shell --master spark://localhost:7077

执行以上代码,进入到Spark Shell交互开发环境:

1d2b6a9558d64d208548420b7fc800a1.png

2、首先需要导入案例代码运行所依赖的包。在paste模式下,输入以下代码:

1.  // 首先导入包
2.  import org.apache.spark.sql.types._
3.  import org.apache.spark.sql.functions._

同时按下【Ctrl + D】按键,执行以上代码,输出结果如下:

ee9519df66b74881b79cd568e86f8bb8.png

3、构造数据Schema模式,注意其中温度和时间的数据类型。在paste模式下,输入以下代码:

1.  // 定义schema
2.  val iotDataSchema = new StructType().add("rack", StringType, false)
3.                                      .add("temperature", DoubleType, false)
4.                                      .add("ts", TimestampType, false)

同时按下 【Ctrl + D】 键,执行以上代码,输出结果如下:

ba420ebcfc85420fbdbcf9ca19d29929.png

4、加载数据文件到DataFrame中。在paste模式下,输入以下代码:

1.  // 读取温度数据
2.  val dataPath = "hdfs://localhost:9000/data/dataset/streaming/iot-input"
3.  val iotSSDF = spark.readStream.schema(iotDataSchema).json(dataPath)

同时按下 【Ctrl + D】 键,执行以上代码,输出内容如下:

007249eecf614cf98721049c502ce17e.png

由以上输出内容可以看出,采集到的机架温度(json格式)数据被读取到了DataFrame中。

5、创建10分钟大小的滑动窗口,并在temperature列上求机架温度的平均值。在paste模式下,输入以下代码:

1.  // group by一个滑动窗口,并在temperature列上求平均值
2.  val iotAvgDF = iotSSDF.groupBy(window($"ts", "10 minutes", "5 minutes"))
3.                        .agg(avg("temperature") as "avg_temp")

同时按下 【Ctrl + D】 键,执行以上代码,输出内容如下:

fc97e30f633f4f0b8369b6ffa6a8c216.png

6、将数据写出到memory data sink。在paste模式下,输入以下代码:

1.  // 将数据写出到memory data sink,使用查询名称iot
2.  val iotMemorySQ = iotAvgDF.writeStream
3.                            .format("memory")
4.                            .queryName("iot")
5.                            .outputMode("complete")
6.                            .start()

同时按下 【Ctrl + D】 键,执行以上代码,输出内容如下:

ef7e75987e1d4044a7f9fc5bc3c2cc29.png

7、在iot上执行sql查询,显示数据,以start时间排序。在paste模式下,输入以下代码:

1.  // 显示数据,以start时间排序
2.  spark.sql("select * from iot").orderBy($"window.start").show(false)

同时按下【 Ctrl + D 】键,执行以上代码,输出结果如下:

2def021801d141ba8509e2d99e04ec42.png

从实时检测的结果来看,机架的平均温度一直在上升,其中8:15-8:25这十分钟内的机架温度最高。

8、停止该流查询,命令行下执行如下命令:

1.  iotMemorySQ.stop

按下【Enter】键,执行以上代码。

阶段四、自行练习

1、在本案例的基础上,请继续分析,找出是哪些机架的温度在上升。




相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
11天前
|
物联网
DC/AC电源模块:为物联网设备提供可靠的电力支持
DC/AC电源模块:为物联网设备提供可靠的电力支持
DC/AC电源模块:为物联网设备提供可靠的电力支持
|
11天前
|
安全 物联网
BOSHIDA DC/AC电源模块:为物联网设备提供可靠的电力支持
BOSHIDA DC/AC电源模块:为物联网设备提供可靠的电力支持
BOSHIDA DC/AC电源模块:为物联网设备提供可靠的电力支持
|
17天前
|
人工智能 物联网 5G
物联网投资趋势:市场分析与预测
【6月更文挑战第7天】物联网驱动全球经济,市场规模迅速扩大,尤其在智能家居、智能工业、智能医疗领域。新兴商业模式和投资机会涌现,如平台整合、核心技术研发。5G普及、AI融合及物联网安全是未来投资趋势。Python示例代码显示了与物联网设备交互的可能性。尽管面临技术更新快、竞争激烈等挑战,投资者需了解行业趋势、关注创新企业、评估风险和回报,以实现长期投资成功。物联网投资前景广阔,将成为投资领域关键部分。
29 2
|
5天前
|
安全 物联网 网络安全
智能家居安全:物联网设备的风险与防护
【6月更文挑战第18天】随着科技的飞速发展,智能家居设备已经深入人们的日常生活。然而,这些便捷的智能设备背后隐藏着不容忽视的安全风险。本文将探讨智能家居中常见的安全威胁,并提供有效的预防措施,帮助用户构建一个更加安全的智能家居环境。
|
12天前
|
机器学习/深度学习 数据采集 分布式计算
基于spark的大数据分析预测地震受灾情况的系统设计
基于spark的大数据分析预测地震受灾情况的系统设计
|
20天前
|
传感器 物联网 Linux
物联网设备的操作系统之争:Linux vs RTOS
【6月更文挑战第4天】在遥远的数码星球,物联网城中的Linux先生与RTOS小姐展开激烈角逐,分别在操作系统领域各显神通。Linux先生以其开源、兼容性强、功能丰富占据服务器、桌面及嵌入式设备市场,适合处理复杂任务和需要强大计算能力的设备。而RTOS小姐以实时性、高效响应和低资源占用见长,适用于资源有限、强调实时性的物联网设备。设备制造商在两者间抉择,引发物联网设备操作系统的选择大战。通过Python与FreeRTOS示例,展现了两者在智能家居和生产线控制等场景的应用。在物联网世界,Linux与RTOS共同推动设备智能化,为生活带来更多便捷。
65 3
|
22天前
|
物联网 传感器 安全
物联网设备的能效管理与优化
【6月更文挑战第2天】在物联网时代,能效管理成为关键议题。有效管理能避免设备过度消耗能源,减少浪费并保护环境。通过动态调整能源供应、选用低能耗硬件、智能算法优化及高效数据处理,可实现能效优化。示例代码展示了软件控制节能模式。能效管理应用于农业和城市,实现精准操作和节能。这是科技与环保的融合,助力可持续未来,让物联网世界更美好。
27 2
|
6天前
|
边缘计算 监控 物联网
边缘计算在物联网设备中的应用与优化
边缘计算在物联网设备中的应用与优化
12 0
|
12天前
|
分布式计算 定位技术 Scala
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
|
1月前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。

相关产品

  • 物联网平台