随着物联网的发展,越来越多的设备需要连接到互联网,并与其他设备进行通信。而 MQTT 协议则成为了物联网设备常用的通信协议。同时,由于数据存储和计算的需求也在不断增长,分布式存储和计算框架 Hadoop 也越来越引人注目。而如何将 MQTT 订阅的消息传输到 Hadoop 平台上,成为了一个新的问题。这时,npm 包 node-red-contrib-hadoopmqttbridge
就出现了。本文将详细介绍如何使用这个 npm 包,并给出示例代码和详细的教程和指导意义。
什么是 node-red-contrib-hadoopmqttbridge
node-red-contrib-hadoopmqttbridge
是一个用于将 MQTT 协议消息传输到 Hadoop 的 npm 包。它基于 Node-RED 开发,使得用户可以通过简单的拖拉拽操作构建数据流处理流程,并将处理结果传输到 Hadoop 上进行存储和计算。
如何使用 node-red-contrib-hadoopmqttbridge
使用 node-red-contrib-hadoopmqttbridge
可以分为两步,分别是安装和配置。
安装
在安装 node-red-contrib-hadoopmqttbridge
前,需要先确认已经安装了 Node.js 和 Node-RED。如果还没有安装,可以参考官方文档进行安装。
安装 node-red-contrib-hadoopmqttbridge
可以通过 npm 命令进行:
npm install node-red-contrib-hadoopmqttbridge
配置
安装完之后,需要在 Node-RED 上进行配置。配置可以分为三步:
- 配置 MQTT 节点
首先需要在 Node-RED 上配置 MQTT 节点,以接收来自 MQTT 发布者的消息。选择 MQTT 输入节点(mqtt in
),并在节点属性中进行配置。其中需要指定 MQTT 服务器的地址、端口号,以及订阅的主题。
- 构建数据处理流程
在配置完 MQTT 节点后,需要构建数据处理流程。这可以通过拖拉拽操作进行。选择需要使用的节点,将它们拖拽到画布上,并进行连线。对于 node-red-contrib-hadoopmqttbridge
,需要添加 Hadoop Output 节点(hadoop output
)进行 Hadoop 平台的输出。
- 配置 Hadoop Output 节点
在配置完数据处理流程后,需要在 Hadoop Output 节点中进行 Hadoop 平台的配置。其中需要指定 Hadoop 集群的 IP 地址和端口号,以及目标 HDFS 的路径。
这样,就成功地搭建了一个将 MQTT 协议消息传输到 Hadoop 平台的数据处理流程。
示例代码
为了更好地理解 node-red-contrib-hadoopmqttbridge
的使用,下面给出一个示例代码。该代码将接收来自 MQTT MQTT 发布者的温湿度数据,并计算平均温湿度。最后将平均温湿度存储到 Hadoop 平台的文件系统中。
[{"id":"5b0329ab.3356a4","type":"tab","label":"Test Flow","disabled":false,"info":""},{"id":"eee6548b.7d36e8","type":"mqtt in","z":"5b0329ab.3356a4","name":"","topic":"temp_humi","qos":"2","datatype":"auto","broker":"f69ccde.2661afc","x":170,"y":120,"wires":[["3499f47c.0943da"]]},{"id":"3499f47c.0943da","type":"function","z":"5b0329ab.3356a4","name":"calc avg","func":"var temps = [];\nvar humis = [];\nvar avg_temp = 0;\nvar avg_humi = 0;\n\nfor (var i=0; i<msg.payload.length; i++) {\n temps.push(msg.payload[i].temp);\n humis.push(msg.payload[i].humi);\n}\n\nfor (var i=0; i<temps.length; i++) {\n avg_temp += parseFloat(temps[i]);\n}\n\nfor (var i=0; i<humis.length; i++) {\n avg_humi += parseFloat(humis[i]);\n}\n\navg_temp /= temps.length;\navg_humi /= humis.length;\n\nmsg.payload = {\n \"avg_temp\": avg_temp,\n \"avg_humi\": avg_humi\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":350,"y":120,"wires":[["8e08c49f.f1dc28"]]},{"id":"8e08c49f.f1dc28","type":"hadoop output","z":"5b0329ab.3356a4","filename":"temp_humi.csv","outFormat":"csv","dfsparams":"{\"fs.defaultFS\":\"hdfs://localhost:9000\"}","x":580,"y":120,"wires":[[]]},{"id":"f69ccde.2661afc","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
该示例代码包括三个节点:MQTT 输入节点、计算平均温湿度的节点和 Hadoop 输出节点。其中 MQTT 输入节点通过订阅主题 temp_humi
接收来自 MQTT 发布者的温湿度数据。计算平均温湿度的节点通过 JavaScript 代码对温湿度进行计算,并将结果赋给 msg.payload
。最后, Hadoop 输出节点将计算结果写入到 Hadoop 平台的文件系统中。
学习和指导意义
使用 node-red-contrib-hadoopmqttbridge
可以方便地将 MQTT 协议消息传输到 Hadoop 平台上,实现了物联网设备的数据存储与计算。同时,学习如何使用 Node-RED 和 JavaScript 可以提高开发者的编程能力,并促进物联网产品的开发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005540e81e8991b448d1678