「大数据」03Hadoop与Spark开源大数据技术栈
Hadoop与Spark开源大数据技术栈如下图:
大数据技术栈架构图(1)数据收集层:主要由关系型与非关系型数据收集组件、分布式消息队列构成。
①Sqoop/Canal:关系型数据收集和导入工具,是连接关系型数据库(如MySQL)和Hadoop(如HDFS)的桥梁,Sqoop可将关系型数据库中的数据全量导入Hadoop,而Canal则可用于实现数据的增量导入。
②Flume:非关系型数据收集工具,主要是流式日志数据,可近实时收集,经过滤,聚集后加载到HDFS等存储系统。
③Kafka:分布式消息队列,一般作为数据总线使用,它允许多个数据消费者订阅并获取感兴趣的数据。相较于其它消息队列,它采用分布式高容错设计,更适合大数据应用场景。
(2)数据存储层:主要由分布式文件系统(面向文件的存储)和分布式数据库(面向行/列的存储)构成。
①HDFS:Hadoop分布式文件系统,具有良好的扩展性与容错性等优点。
②HBase:构建在HDFS之上的分布式数据库,允许用户存储结构化与半结构化的数据,支持行列无限扩展以及数据随机查找与删除。
③Kudu:分布式列式存储数据库,允许用户存储结构化数据,支持无限扩展以及数据随机查找与更新。
(3)资源管理与服务协调
①YARN:统一资源管理与调度系统,它能够管理集群中的各种资源(比如CPU和内存等),并按照一定的策略分配给上层的各类应用。
②ZooKeeper:基于简化的Paxos协议实现的服务协调系统,它提供了类似文件系统的数据模型,允许用户通过简单的API实现leader选举、服务命名、分布式队列与分布式锁等复杂的分布式通用模块。
(4)计算引擎层
①MapReduce/Tez:MapReduce是一个典型的批处理计算引擎,具有良好的扩展性和容错性,允许用户通过简单的API编写分布式程序;Tez是基于MapReduce开发的通用DAG(Directed Acyclic Graph的简称,有向无环图)计算引擎,能够更加高效地实现复杂的数据处理逻辑,目前被应用在Hive、Pig等数据分析系统中。
②Spark:通用的DAG计算引擎,它提供了基于RDD(Resilient Distributed Dataset)的数据抽象表示,允许用户充分利用内存进行快速的数据挖掘和分析。
③Impala/Presto:分别由Cloudera和Facebook开源的MPP(MassivelyParallel Processing)系统,允许用户使用标准的SQL处理存储在Hadoop中的数据。它们采用了并行数据库架构,内置了查询优化器,查询下推,代码生成等优化机制,使得大数据处理效率大大提高。
④Storm/Spark Streaming:分布式流式实时计算引擎,具有良好的容错性与扩展性,能够高效地处理流式数据,它允许用户通过简单的API完成实时应用程序的开发工作。
(5)数据分析层
①Hive/Pig/Spark SQL:在计算引擎之上构建的支持SQL或脚本语言的分析系统。其中,Hive是基于MapReduce/Tez实现的SQL引擎,Pig是基于MapReduce/Tez实现的工作引擎,Spark SQL是基于Spark实现的SQL引擎。
②Mahout/MLlib:在计算引擎之上构建的机器学习库,实现了常用的机器学习和数据挖掘算法。其中,Mahout最初是基于MapReduce实现的,目前正逐步迁移到Spark引擎上,MLlib是基于Spark实现的。
③Apache Beam/Cascading:基于各类计算框架而封装的高级API,方便用户构建复杂的数据流水线。Apache Beam统一了批处理和流式处理两类计算框架,提供了更高级的API,方便用户编写与具体计算引擎无关的逻辑代码;Cascading内置了查询计划优化器,能够自动优化用户实现的数据流。采用了面向tuple的数据模型,如果数据可表示成类似于数据库行的格式,则使用Cascading处理将变得很容易。
文章内容整理于:董西成《大数据技术体系详解:原理、架构与实践》