车联网大数据平台架构设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
车联网大数据平台架构设计-软硬件选型
1.软件选型建议
数据传输
处理并发链接的传统方式为:为每个链接创建一个线程并由该线程负责所有的数据处理业务逻辑。这种方式的好处在于代码简单明了,逻辑清晰。而由于操作系统的限制,每台服务器可以处理的线程数是有限的,因为线程对CPU的处理器的竞争将使系统整体性能下降。随着线程数变大,系统处理延时逐渐变大。此外,当某链接中没有数据传输时,线程不会被释放,浪费系统资源。为解决上述问题,可使用基于NIO的技术。
Netty
Netty是当下最为流行的Java NIO框架。Netty框架中使用了两组线程:selectors与workers。其中Selectors专门负责client端(列车车载设备)链接的建立并轮询监听哪个链接有数据传输的请求。针对某链接的数据传输请求,相关selector会任意挑选一个闲置的worker线程处理该请求。处理结束后,worker自动将状态置回‘空闲’以便再次被调用。两组线程的最大线程数均需根据服务器CPU处理器核数进行配置。另外,netty内置了大量worker 功能可以协助程序员轻松解决TCP粘包,二进制转消息等复杂问题。
IBM MessageSight
MessageSight是IBM的一款软硬一体的商业产品。其极限处理能力可达百万client并发,每秒可进行千万次消息处理。
数据预处理
流式数据处理
对于流式数据的处理不能用传统的方式先持久化存储再读取分析,因为大量的磁盘IO操作将使数据处理时效性大打折扣。流式数据处理工具的基本原理为将数据切割成定长的窗口并对窗口内的数据在内存中快速完成处理。值得注意的是,数据分析的结论也可以被应用于流式数据处理的过程中,即可完成模式预判等功能还可以对数据分析的结论进行验证。
Storm
Storm是被应用最为广泛的开源产品中,其允许用户自定义数据处理的工作流(Storm术语为Topology),并部署在Hadoop集群之上使之具备批量、交互式以及实时数据处理的能力。用户可使用任意变成语言定义工作流。
IBM Streams
IBM的Streams产品是目前市面上性能最可靠的流式数据处理工具。不同于其他基于Java 的开源项目,Streams是用C++开发的,性能也远远高于其他流式数据处理的工具。另外IBM 还提供了各种数据处理算法插件,包括:曲线拟合、傅立叶变换、GPS距离等。
数据推送
为了实现推送技术,传统的技术是采用‘请求-响应式’轮询策略。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。
面对这种状况,HTML5定义了WebSockets协议,能更好的节省服务器资源和带宽并达到实时通讯。应用Websockets技术,服务器可以通过一个双工通道主动推送数据至客户端浏览器。
数据存储
车载终端数据
自2006年以来,基于Google提出的MapReduce编程模型以及分布式文件系统的开源项目Hadoop,得到了分布式计算领域的广泛关注,近年来更是几乎成为了大数据行业的标准框架。众多国际互联网公司如Yahoo!、Twitter、Facebook、Google、阿里巴巴等均开源发布了大量基于Hadoop框架的软件,从而使得此框架拥有其他大数据工具所不具备的软件生态圈。
2013年底,Hadoop 2 发布,新一代的计算框架YARN在兼容MapReduce之外,使得其他第三方计算工具可以更便捷的与HDFS整合。同时HDFS也增加了HA(高可用)等新功能。
Cloudera是一家美国的Hadoop软件发行商,其CDH提供了企业级的服务支持,超过50%的Hadoop开源项目贡献来自于Cloudera的工程师。恒润科技目前使用的是Cloudera的CDH5。
数据存入HDFS中时,Hadoop会自动将数据切分为block并均匀分布的存储在集群的各个数据节点。读取数据时,往往通过Map Reduce的方式将数据汇总并提取。这种方式非常适用于对海量数据(eg. 100GB+)进行检索或分析的场景。这是因为,首先海量数据很难用单机进行处理,因为大量数据需要先加载至内存;其次因为MapReduce(或基于YARN的其他计算方式)可以充分利用整个集群中的计算资源,任务的执行效率远远快于单机。
而对于交互应答及时性要求较高的应用场景,比如查看某列车某一时段的车速变化曲线(涉及数据量相对较小)。用户往往期望指定检索条件后可得到秒级的响应。但如果采用上述方式直接从HDFS取数据,整体集群任务派发与资源协调所需的时间将远大于数据处理与展示的时间。用户体验将会大幅下降,这种情况下一般会采用非结构型Nosql数据库。HBase 是Hadoop生态圈中非结构型数据库的代表,其架构参考了Google的bigTable设计。旨在为客户提供基于HDFS,支持快速写入与读取的数据库。
HBase的一个典型应用场景便是车载终端数据存储,车载终端数据的特点包括:数据类型多样、数据具有时序性、车载终端有移动性以及数据粒度小。车载数据也符合上述特征,因此HBase相对于HDFS是一个更加合适的选择。然而,HBase表的设计对数据检索效率的影响可谓巨大,因此必须紧密结合应用场景、数据结构以及数据的元数据才能确保HBase
的性能满足应用需求。
应用数据
应用数据一般则采用关系型数据库进行存储。常见的关系型数据库包括:Mysql,SqlServer,Oracle等。
数据分析
基础运算功能
大数据平台需根据数据类型的相应特点封装基础运算功能。例如,对于布尔量,需提供某段时间区间内,0、1变化的次数统计,0、1所占比例分布等功能;对递增量如列车里程,应提供某段时间区间内该信号的变化率。而这些功能在分布式环境下主要是通过MapReduce 的思想实现。
MapReduce是Hadoop的核心组件之一。所有计算任务都被分解为两个过程:Map与Reduce。其中Map过程的核心思想为‘移动计算优于移动数据’,即将计算任务Mapper分发至数据所在计算节点。计算节点对本地数据进行计算并将计算结果记录在本地HDFS。Reduce 过程,则由reducer去各个计算节点收集mapper的中间计算结果再整理成最终结果。这一过程适合的场景是大批量数据运算,而针对交互性较强的应用,因整个计算过程涉及大量磁盘IO操作,很难做到及时响应。为此Hadoop软件生态圈对MapReduce过程进行了大量优化,而Spark的出现则进一步颠覆了MapReduce的实现方式。
Apache Spark
Spark将数据源封装为RDD(一种可伸缩的分布式数据结构)。针对RDD的Mapreduce过程,将所有中间结果都保存在内存,而不需读写HDFS,从而提高计算任务的整体效率。除MapReduce外,Spark还提供许多其他数据操作。自2014年起,spark已经成为Apache开源社区中最活跃的开源项目。
SQL on Hadoop
在传统关系型数据库中进行数据分析往往是依靠SQL语言。对于不熟悉分布式编程的数据分析人员,SQL on Hadoop的出现无疑为他们提供了一种便捷而强大数据分析工具。为Hbase提供SQL操作的工具包括Hive,Impala与Pheonix。其中Hive与Impala都是为HDFS 而设计同时提供了对Hbase的接口;Pheonix则是专门为Hbase设计的,底层实现完全依赖Hbase 的原生接口。
机器学习算法
数据挖掘中常用的许多机器学习算法都是迭代式的,当数据分布在集群中,传统的单机算法实现将难以生效。Apache Mahout提供了多种机器学习算法基于MapReduce的实现,包括聚类、拟合、协同过滤等。Spark也提供了Mlib组件并以Spark的方式对上述算法进行了实现。
BI