HADOOP生态圈知识概述

HADOOP生态圈知识概述一.hadoop生态概况Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。Hadoop的核心是HDFS、YARN和Mapreduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:根据服务对象和层次分为:数据..

大家好,又见面了,我是你们的朋友全栈君。

. hadoop 生态概况

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。

Hadoop的核心是HDFS、YARN和Mapreduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:

HADOOP生态圈知识概述

根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。

HADOOP生态圈知识概述

接下来对Hadoop生态圈中出现的相关组件做一个简要介绍。

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

源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。

HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错性(fault-tolerant)的系统,能检测和应对硬件故障,用于在低成本的(low-cost)通用硬件上运行。

HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量(high throughput)应用程序数据访问功能,适合带有大型数据集(large data set)的应用程序。

它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上。

相关概念:

Client(客户端):切分文件,访问HDFS时,首先与NameNode交互,获取目标文件的位置信息,然后与DataNode交互,读写数据。

NameNode:master节点,每个HDFS集群只有一个,管理HDFS的名称空间和数据块映射信息,配置相关副本信息,处理客户端请求。

DataNode:slave节点,存储实际数据,并汇报状态信息给NameNode,默认一个文件会备份3份在不同的DataNode中,实现高可靠性和容错性。

Secondary NameNode:辅助NameNode,实现高可靠性,定期合并fsimage和fsedits,推送给NameNode;紧急情况下辅助和恢复NameNode,但其并非NameNode的热备份。

Hadoop 2为HDFS引入了两个重要的新功能 ——Federation高可用(HA)

Federation允许集群中出现多个NameNode,之间相互独立且不需要互相协调,各自分工,管理自己的区域。 DataNode 被用作通用的数据块存储设备。每个 DataNode 要向集群中所有NameNode 注册,并发送心跳报告,执行所有 namenode的命令。

HDFS中的高可用性消除了Hadoop 1中存在的单点故障,其中,NameNode故障将导致集群中断。HDFS的高可用性提供故障转移功能(备用节点从失败的主NameNode接管工作的过程)以实现自动化。

2、Mapreduce(分布式计算框架)

源自于google的MapReduce论文,发表于2004年12月,HadoopMapReduce是google MapReduce 克隆版。

MapReduce是一种基于磁盘的分布式并行批处理计算模型,用以进行大数据量的计算。它屏蔽了分布式计算框架细节,将计算抽象成map和reduce两部分。

其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。

MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理。

相关概念:

Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。

Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。

Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。

Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。

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

源自Google的Bigtable论文,发表于2006年11月,HBase是GoogleBigtable克隆版。

HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。

HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。

HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

4. Zookeeper(分布式协作服务)

源自Google的Chubby论文,发表于2006年11月,Zookeeper是Chubby克隆版

解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

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

由Facebook开源,最初用于解决海量结构化的日志数据统计问题。

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定义了一种数据流语言—PigLatin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。

其编译器将Pig Latin翻译成MapReduce程序序列将脚本转换为MapReduce任务在Hadoop上执行。通常用于进行离线分析。

7.Sqoop(数据ETL/同步工具)

Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。

Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

8.Flume(日志收集工具)

Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。

Flume是一个可扩展、适合复杂环境的海量日志收集系统,也可以用于收集其他类型数据。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。

同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。

Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成。

HADOOP生态圈知识概述

Source:从客户端收集数据,并传递给Channel。

Channel:缓存区,将Source传输的数据暂时存放。

Sink:从Channel收集数据,并写入到指定地址。

Event:日志文件、avro对象等源文件。

9. Oozie(工作流调度器)

Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。

Oozie工作流是放置在控制依赖DAG(有向无环图 DirectAcyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。

Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

10. Yarn(分布式资源管理器)

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

yarn是下一代 Hadoop 计算平台,yarn是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。

11. Mesos (分布式资源管理器)

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

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

Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目。

最早Spark是UC BerkeleyAMP lab所开源的类Hadoop MapReduce的一种基于内存的分布式并行计算框架。

Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。不同于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.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是真流处理。

14. Kafka(分布式消息队列)

Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。

活跃的流式数据在web网站应用中非常常见,这些数据包括网站的pv、用户访问了什么内容,搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。

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

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

15.Ambari(安装部署配置管理工具)

Apache Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,是为了让 Hadoop 以及相关的大数据软件更容易使用的一个web工具。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143301.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月21日 下午10:40
下一篇 2022年5月21日 下午10:40


相关推荐

  • #WPF#Dirkster.AvalonDock教程

    #WPF#Dirkster.AvalonDock教程https://blog.csdn.net/youyomei/article/details/103107304教程还不错,但是存在一个错误xmlns:avalon=”http://schemas.xceed.com/wpf/xaml/avalondock”改成如下xmlns:avalon=”https://github.com/Dirkster99/AvalonDock”

    2022年7月20日
    16
  • compile ffmpeg for armv7 armv7s[通俗易懂]

    1.下载ffmpeggitclonegit://source.ffmpeg.org/ffmpeg.gitffmpeg2.下载gas-preprocessor地址: https://github.com/yuvi/gas-preprocessor下载完后把gas-preprocessor.pl复制到/usr/bin/目录下,修改权限 chmod7773.解压ffm

    2022年4月9日
    46
  • c语言getchar()的用法_c=getchar()

    c语言getchar()的用法_c=getchar()文章目录getchar()函数定义函数返回值注意区分getchar和scanfgetchar的使用实例getchar()函数定义getchar()-字符输入函数,没有参数,从输入缓冲区里面读取一个字符-「一次只能读取一个字符」EOF(-1)-endoffile文件结束标志-键盘上用ctrl+z实现先查一下文档函数返回值该函数以无符号char强制转换为int的形式返回读取的字符,如果到达文件末尾或发生读取错误,则返回EOF(-1

    2022年10月18日
    4
  • Address Sanitizer 用法

    Address Sanitizer 用法AddressSanit ASan 是一个快速的内存错误检测工具 这里说明它的用法 参考资料 AddressSanit github com google sanitizers wiki AddressSanit 简介 AddressSanit ASan 是一个快速的内存错误检测工具 它非常快 只拖慢程序两倍左右 比起 Valgrind 快多了 它包括一个编译器 instrumentat 模块和一个提供 malloc free 替代项的运

    2026年3月18日
    2
  • Agent架构设计:智能体架构设计的9大核心技术全景深解析,附架构图,零基础小白收藏这一篇就够了!!

    Agent架构设计:智能体架构设计的9大核心技术全景深解析,附架构图,零基础小白收藏这一篇就够了!!

    2026年3月15日
    3
  • setPositiveButton,setNegativeButton,setNeutralButton各代表什么意思

    setPositiveButton,setNegativeButton,setNeutralButton各代表什么意思本质上都是三个Button并没有很大的区别:Positive:积极的Negative:否定的Neutral:中性的setPositiveButton表示设置弹框后的确定按钮。setNegativeButton表示设置弹框后的取消按钮,设置的是出现在最右边,一般把最右的button功能设置为“取消”,问也就是调用dlg.dismiss()。setNeutralButton:这个是相当于一个忽略操作的按钮。(中立)…

    2022年6月18日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号