【Hadoop】Hadoop大数据架构及关键组件

Hadoop大数据架构及关键组件

  • 1. Hadoop生态系统
    • 1.1 架构
  • 大数据生态的主要组件及其关系
    • 大数据生态
    • 大数据架构
      • 1. HDFS(Hadoop分布式文件系统):
      • 2. MapReduce(分布式计算框架):
      • 3. HBase(分布式列存数据库):
      • 4. ZooKeeper(分布式协作服务):
      • 5. Hive/Impala(基于Hadoop的数据仓库):
      • 6. Pig(ad-hoc脚本):
      • 7. Sqoop(数据同步工具):
      • 8. Flume(日志收集工具):
      • 9. Mahout(数据挖掘算法库):
      • 10. YARN/Mesos(分布式资源管理器):
      • 11. Tachyon(超光速粒子):
      • 12. Spark(分布式计算框架):
      • 13. Kafka(分布式消息队列):
      • 14. Flink(分布式计算框架):
      • 15. Oozie(工作流调度器):
      • 16. Apache Phoenix:
      • 17. Apache Ambari:
      • 18. Apache Kylin:

1. Hadoop生态系统

1.1 架构

架构是一个系统的基础组织结构,包括系统的组件构成、组件之间的相互关系、系统和其所在环境的关系,以及指导系统设计和演化的相关准则

系统架构设计的目标主要包括:可靠性、安全性、可伸缩性、可扩展性、可维护性等。

研究大数据的技术架构,需要明确三个基本的观点:

  1. 对于大数据部署和应用来说,技术总是具体的,抽象讨论技术没有太多意义。
  2. 研究架构,需要理解各种不同架构的共同点,以便揭示大数据系统设计的内在规律和演化趋势,从而指明正确的系统建设方向。
  3. 大数据系统的最高抽象模式实际上就是大数据的基本系统架构,对这个顶层架构进行初次分解,就得到数据采集、数据存储、数据分析和数据应用四个方面,因此,技术架构也需要相应地从这四个方面描述。

大数据生态的主要组件及其关系

大数据生态

【Hadoop】Hadoop大数据架构及关键组件_第1张图片

大数据架构

【Hadoop】Hadoop大数据架构及关键组件_第2张图片
关键组件及作用如下:

1. HDFS(Hadoop分布式文件系统):

HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

Client:切分文件,访问HDFS,与NameNode交互,获取文件位置信息,与DataNode交互,读取和写入数据。
NameNode:master节点,在hadoop1.x中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。
DataNode:slave节点,存储实际的数据,汇报存储信息给NameNode。
Secondary NameNode:辅助NameNode,分担其工作量:定期合并fsimage和fsedits,推送给NameNode;紧急情况下和辅助恢复NameNode,但其并非NameNode的热备。

2. MapReduce(分布式计算框架):

MapReduce是一种计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。
Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。
Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。
Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。

3. HBase(分布式列存数据库):

HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

4. ZooKeeper(分布式协作服务):

ZooKeeper主要目标是解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

5. Hive/Impala(基于Hadoop的数据仓库):

Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。

Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。

6. Pig(ad-hoc脚本):

由yahoo开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具。
Pig定义了一种数据流语言——Pig Latin,他是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig-Latin)。其编译器将Pig Latin翻译成MapReduce程序设计,将脚本转换为MapReduce任务在Hadoop上执行,通常用于进行离线分析。

7. Sqoop(数据同步工具):

是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

8. Flume(日志收集工具):

Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。
Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成:
【Hadoop】Hadoop大数据架构及关键组件_第3张图片
Source:从客户端收集数据,并传递给Channel。
Channel:缓存区,将Source传输的数据暂时存放。
Sink:从Channel收集数据,并写入到指定地址。
Event:日志文件、avro对象等源文件。

9. Mahout(数据挖掘算法库):

Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现。已经包含了聚类、分类、推荐引擎(协同过滤)和频繁项集等数据挖掘算法。除了算法,Mahout还包含数据的输入/输出工具,与其他存储系统(如数据库、MongoDB等)集成的数据挖掘支持架构。

10. YARN/Mesos(分布式资源管理器):

YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。

Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。

11. Tachyon(超光速粒子):

是以内存为中心的分布式文件系统,拥有高性能和容错能力,能够为集群框架(Spark、MapReduce)提供可靠的内存级速度的文件共享服务。

12. Spark(分布式计算框架):

Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

  • Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器
  • Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
  • Driver: 运行Application 的main()函数
  • Executor:执行器,是为某个Application运行在worker node上的一个进程

Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

  • Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
  • Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
  • Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据,通过短时批处理实现的伪流处理。
  • MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
  • GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。

13. Kafka(分布式消息队列):

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。

生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。**KafKa内部分为很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。**生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。

14. Flink(分布式计算框架):

Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。
Flink VS Spark

  • Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
  • Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理

15. Oozie(工作流调度器):

Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

16. Apache Phoenix:

是HBase的SQL驱动(HBase 的SQL接口),Phoenix使用HBase支持通过JDBC的方式进行访问,并将SQL查询转换成HBase的扫描和相应的动作。

17. Apache Ambari:

是安装部署配置管理工具,其作用就是创建、管理、监视Hadoop的集群,是为了让Hadoop以及相关的大数据软件更容易使用一个Web工具。

18. Apache Kylin:

Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。
Apache Kylin™ 令使用者仅需三步,即可实现超大数据集上的亚秒级查询。

  1. 定义数据集上的一个星形或雪花形模型
  2. 在定义的数据表上构建cube
  3. 使用标准 SQL 通过 ODBC、JDBC 或 RESTFUL API 进行查询,仅需亚秒级响应时间即可获得查询结果
    Kylin 提供与多种数据可视化工具的整合能力,如 Tableau,PowerBI 等,令用户可以使用 BI 工具对 Hadoop 数据进行分析。
    【Hadoop】Hadoop大数据架构及关键组件_第4张图片

你可能感兴趣的:(Hadoop,大数据,Hadoop,Spark,Yarn,Flink)