从0开始学大数据(十二)

30 | 当大数据遇上物联网

某位互联网大佬说过,未来 20 年最有发展潜力的三项技术分别是:区块链、人工智能、物联网。关于区块链,现在可能是最有争议也是最迷茫的时候;关于人工智能的价值,我们已经达成共识并稳步发展;而真正完成早期探索、处于突破临界点的可能就是物联网了。物联网确实也能给我们足够的想象空间:万物互联,所有的一切设备都是智能的,它们通过互相通信,彼此联系;而人们也可以通过云端的应用掌控一切,就像科幻电影描述的那样。最关键的是,相比人工智能和区块链还在进行技术探索,物联网的技术已经成熟,只待“临门一脚”了。

物联网应用场景分析

现在说“万物互联”也许为时尚早,但是很多细分的垂直领域场景已经实现了物联网。

1. 智能家居

智能家居可能是和我们最接近,也是目前最普及的物联网。目前市面上销售的各种大家电,很多都有上网和远程控制功能。小米旗下的几乎所有家电都可以通过网络控制,这些设备和智能音箱联通,我们可以通过语音控制台灯、电饭煲、自动窗帘等。下班回家,说一句“我回来了”,家里的灯立即打开,空调开启、窗帘关闭。要睡觉了,说声“晚安”,大灯关闭、夜灯开启、空气净化器进入夜间模式。是不是很酷?最重要的,这些技术和产品都已经成熟,而且价格低廉。

2. 车联网

车联网曾经被人们寄予厚望,Intel 就在车联网方面投入很多。我在 Intel 工作期间,有段时间每天去公司上班,一楼大厅都播放车联网的美好场景:道路上的车辆互相通信连接,前面车辆刹车,立即通知后面车辆,后面车辆也减速;路上发生车祸,警告其他车辆小心驾驶,车辆通过自己的摄像头将车祸现场照片视频自动上传给交警和保险公司;进入停车场,车辆和泊位系统通信,自动引导到空车位。车辆和车辆之间、车辆和其他交通设施之间彼此通信,互相协作,构成一个网络。除此之外,物联网还应用在农业领域,土壤传感器探测土壤湿度,数据上传云端,云端系统根据农作物特性远程控制农田现场的喷淋装置。在能源利用领域,摄像头和红外传感器捕捉人们的活动,自动控制照明和空调系统,保证舒适和节能的平衡。

物联网平台架构

物联网主要是将各种传感器和智能设备连接起来,将数据上传云端,根据规则和机器学习模型进行远程控制,并通过物联网应用程序进行监控管理。一个典型的物联网平台架构如下图所示。

终端传感器实时采集数据,利用移动数据网络将数据上传给智能网关,智能网关进行初步的数据处理,根据规则和机器学习模型进行计算,再将计算结果通过移动数据网络下发给可控制的终端智能设备。由于传感器可能部署在很多相距较远的地方,而且数量庞大,所以不可能将传感器数据直接接入云端服务器,而且也不是所有的传感器数据都需要实时上传云端。所以,需要有一个在传感器现场的前置服务器进行现场管理。智能网关就是距离现场传感器最近的一个计算机。由于智能网关布置在物联网的作业现场,和传感器距离很近,处于整个云计算的边缘,所以在智能网关上的计算也叫边缘计算。我们看到,在科技领域隔一段时间就会造出一个新名词,这可不是技术人员在没事找事瞎歪歪。每一个能公开传播的科技名词背后都有巨大的经济利益之争。科技巨头们为了在争夺市场份额,不断抛出新的科技名词,企图主导科技的话语权,进而获得经济利益。而大众也会审美疲劳,需要市场上不断有新鲜的东西问世。但是我们作为科技从业人员,需要搞清楚这些新鲜热闹的科技新词背后的技术本质,不要被这些纷纷扰扰的技术新名词搞得迷失了方向。智能网关进行现场数据处理后,也就是进行边缘计算后,还要把数据上传到云端,即物联网大数据平台,将数据永久存储,进行机器学习。还要将各个异地的传感器数据统一汇总,进行全局性的计算并进行全局性的控制。此外云端还负责将各种数据推送给应用程序设备,工作人员可以实时监控整个物联网的运行情况,并通过应用程序进行远程控制。

大数据技术在物联网中的应用

如果说互联网连接的是人,那么物联网连接的就是物,是各种智能设备和传感器。相对人的数量来说,智能设备的数量要多得多,人不会时刻都在上网,而智能设备则时刻都在联网传输数据,所以物联网更需要大数据技术。物联网里大数据技术的应用,一方面是大数据的存储和计算,另一方面就是边缘计算管理。我们先看下物联网大数据平台的架构。

1. 智能网关通过消息队列将数据上传到物联网大数据平台,Storm 等流式计算引擎从消息队列获取数据,对数据的处理分三个方面。数据进行清理转换后写入到大数据存储系统。调用规则和机器学习模型,对上传数据进行计算,如果触发了某种执行规则,就将控制信息通过设备管理服务器下发给智能网关,并进一步控制终端智能设备。将实时统计信息和应用程序监听的数据发送给应用程序设备,供使用者查看管理。2.Spark 等离线计算引擎定时对写入存储系统的数据进行批量计算处理,进行全量统计分析和机器学习,并更新机器学习模型。3. 应用程序也可以通过设备管理服务器直接发送控制指令给智能网关,控制终端智能设备。这样就构成一个典型的物联网“端 - 云 - 端”架构,其中两个端分别是传感器与智能设备端,以及应用程序设备端,而云则是大数据云计算平台。此外,边缘计算也要执行大量的逻辑运算,主要是对传感器数据进行处理和计算。运算逻辑代码和处理规则可能会经常变化,特别是规则配置,随时可能更新。比较好的做法就是参考大数据计算框架的做法,即移动计算,将执行代码和规则配置分发到智能网关服务器。开发者将代码和配置通过设备管理服务器分发给各个智能网关,智能网关热加载这些代码开始执行。这样人们不但可以可以远程控制智能设备,还可以控制智能设备的运行逻辑。

现在一些商业化的物联网云计算平台提出函数即服务 FaaS,在应用程序或者云控制台上编写函数,分发到智能网关执行就可以,这也是目前比较火的 Serverless 的一种实现。小结物联网的很多应用场景都会加上“智能”二字,比如智能家居、智能交通等。万物互联本身不是目的,让万物更智能,让生活更美好才是目的,而这些智能正是靠大数据技术实现的。不管是大规模传感器数据的采集、传输、处理,还是关于这些数据的分析与机器学习,以及最后对现场智能设备控制的边缘计算,背后都用到了大数据技术。物联网的概念从提出到现在也过去很多年了,最近两年又重新开始火起来,我想应该跟大数据技术的普及有很大关系。思考题你了解的物联网应用场景还有哪些?大数据在其中的作用是什么

 

31 | 模块答疑:为什么大数据平台至关重要?

今天我来做模块四的答疑,主题是为什么大数据平台至关重要。我前面说过,软件大体可以分为两种,一种是为最终用户开发的,实现用户需要的业务功能;另一种是为软件工程师开发的,供软件工程师使用。我在专栏前三个模块讲到的各种大数据产品,都属于后一种,最终用户不可能自己提交一个 Hadoop 程序去执行大数据计算,这是软件工程师的工作,因此大数据产品也是为软件工程师开发的。而如何让软件工程师能够便捷地提交各类大数据计算程序给大数据计算引擎去执行,如何将用户实时数据转化为大数据产品的数据源,如何利用好大数据的计算结果,这些都是大数据平台的职责范围。大数据平台将互联网应用和大数据产品整合起来,构建成一个完整的系统,将实时数据和离线数据打通,使数据可以实现更大规模的关联计算,挖掘出数据更大的价值,从而实现数据驱动业务,通过数据统计发现业务规律(也就是机器学习模型)。而利用这个规律对未来的数据进行分类和预测,使系统呈现出智能的特性,也为互联网未来发展和人类的生产生活创造了无限可能。大数据平台将互联网应用和大数据产品整合起来,一方面使互联网应用变得更加智能、强大;一方面也使得大数据产品实现技术落地。技术不同于科学,科学拓展人类的认知边界,而技术是人们改造世界的工具,科学的成果可以转化为技术;而技术真正能够改造世界,需要技术落地,真正应用到生产过程中。用我们熟知的 Hadoop 为例,即使它的技术再厉害,如果没有具体应用,没有被广泛使用,同样也很难说明它有多大的价值。所以技术落地使技术产品实现真正价值,也正是大数据平台使得大数据技术产品可以落地应用,实现了自身价值。所以,大数据平台不但对应用至关重要,对各种大数据技术产品也至关重要。事实上,大数据平台对大数据工程师的技术进阶也非常重要。

这些年来,多次有同学向我咨询如何成为软件架构师。软件架构师,顾名思义,就是从事软件架构设计的那个人。而关于软件架构,其定义是“关于软件各个组成部分及其关系的描述”,所以软件架构师就是对软件各个组成部分及其关系进行设计和描述的那个人。软件的各个组成部分包括业务组件模块,比如用户管理模块、订单处理模块,也包括技术组件,比如缓存组件、消息队列组件,当然还有大数据技术组件。软件架构师要想设计出一个符合业务场景,便于开发维护的软件架构,必须要对业务很熟悉,还要对技术很精通。要将复杂的业务拆分成较小的、低耦合高内聚的、便于开发维护的模块;还要对各种技术组件的功能特性、技术原理、使用和调优方法很熟悉。软件架构师需要选择合适的技术组件应用到自己的软件架构中,并在将来的开发使用过程中指导工程师正确使用这些技术组件,还要能根据业务需要对这些技术组件进行适当的调优甚至改造。所以,我的观点是,从按照需求进行业务功能开发的程序员进阶到软件架构师,并不是随着经验积累、工作年限的增加就能自动能完成的。如果你一直按照别人给定的技术架构和业务需求开发代码,你很难从更高的层面去思考软件的架构是如何设计出来的,也缺乏明确的目标去掌握那些真正有难度的、底层的技术。因此帮助你实现技术进阶,同样也是这个专栏当初设计的一个初衷。专栏前面三个模块希望你能了解、掌握大数据技术产品组件的原理,然后通过模块四,将各种大数据技术产品融会贯通,应用到自己的开发实践中,构建一个大数据平台。而通过专栏系统的学习,一方面可以实现大数据的业务价值,另一方面也可以使自己从业务开发者的角色,逐步进阶成为软件架构设计者的角色。我的专栏的名字叫《从 0 开始学大数据》,确实不需要你有任何大数据背景就可以跟着专栏开始学习大数据,但是我并不希望你学完专栏后,还只是打了一个大数据的基础,我更希望你能掌握构建大数据系统大厦的能力。这当然会有难度,学习过程中也会有挫折感,但是我依然希望你能坚持学习,即使有些技术不能完全掌握,但是至少可以让你的视野达到一个更高的高度,去感受架构师如何思考架构设计,并可以把收获应用到未来的学习工作中,让自己有不断进步的目标和动力。

下面我来回答一下“helloWorld”同学提出的一个问题。

老实说我没有做过这类产品的开发,也不太了解腾讯的这个流计算平台,仅仅说一下我对这个功能实现的思路。通过前面的学习我们知道,Spark 实现分布式计算的最小单位是计算任务(Task),每个任务针对一个不同数据分片进行计算,相同的一组任务组成一个任务集(TaskSet),通常一个任务集就是一个计算阶段(Stage),所有的计算阶段组成一个有向无环图(DAG)。所以这个有向无环图就是 Spark 分布式计算的核心,根据这个有向无环图的依赖关系,不断地将任务分发给计算集群去计算,每个计算进程领到计算任务后,执行任务对应的代码,最后完成大数据计算。既然根据大数据应用程序代码可以生成有向无环图,那么能不能直接把这个有向无环图画出来,然后根据这个有向无环图进行分布式计算呢?当然可以,这就是问题中提到的可视化编程的思路。我在专栏第 12 期讲 Spark 编程时提到,我们了解到 Spark 提供了一组针对大数据的计算函数,包括转换函数和执行函数两种,事实上每个计算任务就是由一个或多个这样的函数构成的。那么可视化编程的时候,只需要将这些函数拖动过来根据数据处理逻辑组成有向无环图即可。我们还知道,Spark 的这些计算函数的输入参数是另外一个函数,也就是真正的运行逻辑,比如 fliter 函数的输入是一个布尔表达式,比如 x > 100,以判断数据是否进行下一步处理。所以这样一个可视化编程环境也会预置一些这样函数,以可视化节点的形式提供,开发者拖动这些节点,并在节点上输入一些简单表达式(或者拖动一些表达式符号和字段名称进来),就可以完成大数据可视化编程了。我画了一个简单的示意图。

开发这样的有向无环图的可视化编辑工具技术非常成熟,只要根据这个图形生成一个 XML 之类的描述文件,交给一个执行引擎去执行就可以了。至于如何根据一个 XML 文件执行计算逻辑,可以参考 Hive 的实现。在专栏第 11 期我们也学习过,Hive QL 经过语法分析、语义解析与优化后生成一个执行计划,这个执行计划也是一个有向无环图。Hive 用 XML 描述这个有向无环图,并提交给 Hive 的执行引擎,执行引擎解析 XML,并利用 Hive 内置的 Operator 算子构建 MapReduce 作业,提交给 Hadoop 执行。有兴趣的同学可以在 Spark 上尝试一下,根据 XML 生成 Spark 代码,再把这个代码编译后提交给 Spark 引擎执行,这个过程应该并不难。最后我贴出@纯洁的憎恶、@方得始终、@杰之 7、@小千、@warm_day这几位同学的留言,希望他们的思考对你也有所启发。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值