大数据|数据流技术在GPU和大数据处理中的应用( 四 )
在CUDA的编程模型中 , 可以将kernel看成数据流编程模型中的一个执行节点 , 只要kernel的数据准备好了就可以执行指令 。 而在kernel的内部 , 不同的线程块执行顺序又是不确定的 , 只要线程块执行需要的数据和资源就绪就可以执行指令 。 不同于传统的数据流编程模型 , CUDA编程模型在宏观层面融入了控制流的思想 , 还是由主程序来控制整个执行的流程 。 在微观层面 , kernel的内部指令执行顺序都是确定的 , 是典型的控制流过程 。
本文插图
图3 CUDA编程模型和线程组织形式
3 数据流在大数据处理中的应用 在过去的几年中 , 大型商用服务器集群中的批处理取得了长足的进步 , 以MapReduce 、Spar k为代表的面向批处理的大数据分析引擎已经建立了批量处理大数据集的编程模型 。 随着物联网、边缘计算(edge computing)等技术的兴起 , 流计算模式越来越普及 , 流计算中大量的应用程序通过将外部环境中生成的海量数据推送到服务器进行实时处理 。 这些应用程序包括基于传感器的监视、股票交易、Web流量处理、网络监视和移动设备 。 这些应用程序生成的数据可以看作事件流或数据流 。 在基于流的应用程序中 , 这些数据作为无界的事件元组序列推入系统 。 由于大量的数据进入这些系统 , 传统的集中式解决方案无法对信息进行实时处理 。 但是大型集群中面向流式数据的分布式处理需求与批处理系统有很大的不同 , 因此分布式流处理框架(distributed streaming process framework , DSPF)应运而生 , 用以解决大规模的实时流式数据分析带来的挑战 。
早期的流处理框架包括Auro ra、Borea lis、Stre amIt和 SPADE , 这些框架主要关注单节点对单个/多个数据流的处理能力 , 缺乏可扩展性 , 难以适应数据量增加带来的分布处理要求 。 随着近年来互联网应用的大规模普及 , 新的开放源代码的分布式流处理模型(如Apache Storm、Apache Samza、Spark St reami ng、Heron、Flink和Nepture等)逐渐开始普及 , 成为大数据流式处理的最佳实践解决方案 , 甚至开始逐渐取代一些老牌的商业解决方案 , 如谷歌Millwheel、Azure Stream Analytics、Amazon Kinesi s和Apache S4等 。 本节将重点围绕Storm、Heron、Spark、Flink和Samza分析和介绍流计算在大数据分析处理中的相关技术特点 。
Apache Storm使用计算图(computing graph)来描述应用程序(在Storm中也被称为拓扑) , 它定义了处理元素(即Spouts和Bolts)以及数据(即元组)流动的方式 。 拓扑是一个无限期常驻内存运行的程序 , 只有在接到用户指令的情况下才会停止运行 。 与其他应用程序模型类似 , 拓扑接收大量数据并将其划分为块 , 这些数据块被分配到具体的集群节点 , 并由该节点上的任务进行处理 。 节点之间以元组序列的形式交换数据 。 Twitter的Heron采用了一系列的改进架构和机制来达到比Storm更高的效率 。 Heron拓扑是基于流程的 , 每个流程独立运行 , 这简化了调试、分析和故障排除过程 。 其拓扑可以通过一种被称为背压(back pressure)的内建机制在某些组件滞后时进行自调整 。 与Storm类似 , Heron拓扑也采用有向图描述 , 其顶点同样是Spouts或Bolts的一种 , 边表示在顶点间流转的数据流 。
Apache Spark是一个更加通用的集群大数据计算解决方案 , 它扩展了MapReduce模型 ,以支持交互式查询和流处理 。 Spark引入了弹性分布式数据集(resilient distributed dataset , RDD) , 从而支持在内存中运行各种工作负载 , 并允许以容错方式在内存中运行计算 。 RDD被定义为一种不可变的且支持分区的数据记录集合 , 并提供了一套用于在多个数据项上执行操作的编程接口 。 出于容错的目的 , Spark将为构建数据集而执行的所有转换进行记录 , 从而形成所谓的世系图(lineage graph) 。 为了更有效地处理故障 , Zaharia等人在Spark的基础上提出了D-Streams , 即一种基于Spark Streaming的离散流处理方法 。 D-Streams采用微批处理方法 , 将流处理组织为在小时间窗口上定期执行的批计算 。 在短时间间隔内 , D-Streams存储接收到的数据 , 然后集群资源将这些数据用作输入数据集 , 以便在间隔时间过后执行并行计算 。 Flink为数据流和批处理应用程序提供了一个公共运行时间 。 Flink应用程序的结构可以是任意的有向无环图(directed acyclic graph , DAG) 。 Flink使用执行转换的流的概念 , 其中流标志一个中间结果 , 转换表示将一个或多个输入流转换为一个或多个输出流的计算操作 。 Flink应用程序在运行时被映射转换为一个工作流 , 该工作流从一个或多个源开始 , 包含一组转换操作符 , 并以一个或多个接收器结束 。 Apache Samza是一个使用Apache Kafka进行消息传递, 使用Apache YARN进行作业部署、资源管理和安全管理的流处理框架 。 Samza应用程序是一个数据流 , 与Storm类似 , 其作业都按照图的形式进行组织 , Samza本身并不支持DAG拓扑 。 在Samza中 , 每个作业都是一个可以独立部署、启停的实体 。 与Heron一样 , Samza将一个单线程的进程作业映射到一个CPU核心 。 每个Samza任务都包含一个用于记录状态的嵌入式键值存储 。 在计算过程中对某个键值的更改都将被扩散到集群中的其他机器中 , 以便在出现故障时快速恢复任务 。
推荐阅读
- 数据流|比亚迪M6用诊断仪无法读取TCU数据流检修
- 技术编程|后台权限管理设计思路:三种模型分析
- 技术编程|如何利用数据库进行世界史研究
- 行业互联网,AI人工智能|城市教育大脑以“ AI+ 大数据”为核心 , 引领教育变革
- 青年|西安邮电大学与安康汉滨区深度合作,研发适合毛绒玩具全产业链实用技术
- 无人科技,电池技术|盘点几种常见的无人机电池
- |如何分析“会员数据”,强化门店的竞争力?
- 数据|翼方健数解码隐私安全计算 实现数据“可用不可见”
- 技术编程|无服务器调研,部署REST API是最普遍用例
- 京东,折叠屏手机|围绕柔性屏的技术、特性、应用、产业化进行了非常专业的解读