Hadoop生态圈

Hadoop生态圈

1.图解

在这里插入图片描述

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

  • 源自Google的Chubby论文,发表于2006年11月,Zookeeper是Chubby克隆版
  • 解决分布式环境下的数据管理问题(统一命名,状态同步,集群管理,配置同步等)
  • Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作

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

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

4.Flume(日志收集工具)

  • Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点
  • Flume是一个可扩展、适合复杂环境的海量日志收集系统,也可以用于收集其他类型数据
  • Flume将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据
  • Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等
  • Flume还具有能够将日志写往各种数据目标(可定制)的能力
  • Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM
  • 单个Agent由Source、Sink和Channel三大组件构成
    在这里插入图片描述

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

  • Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据
  • 活跃的流式数据在web网站应用中非常常见,这些数据包括网站的pv、用户访问了什么内容,搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理
  • Kafka是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据,实现了主题、分区及其队列模式以及生产者、消费者架构模式
  • 生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件
  • KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间,生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming

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

  • Hadoop Distributed File System:分步式文件系统
  • HDFS源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版
  • HDFS是Hadoop体系中数据存储管理的基础
  • HDFS是高度容错性的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行
  • HDFS简化文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序
  • HDFS提供一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上
    在这里插入图片描述
  • Hadoop 2为HDFS引入了两个重要的新功能——Federation和高可用(HA)
  • Federation允许集群中出现多个NameNode,之间相互独立且不需要互相协调,各自分工,管理自己的区域;DataNode 被用作通用的数据块存储设备;每个 DataNode要向集群中所有NameNode注册,并发送心跳报告,执行所有 namenode的命令
  • HDFS中的高可用性消除了Hadoop 1中存在的单点故障,其中,NameNode故障将导致集群中断;HDFS的高可用性提供故障转移功能(备用节点从失败的主NameNode接管工作的过程)以实现自动化

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

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

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

  • Yarn是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的
  • Yarn是下一代 Hadoop 计算平台,是一个通用的运行时框架,用户可以编写自己的计算框架在该运行环境中运行

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

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

10.Mapreduce(分布式计算框架)

  • 源自于Google的MapReduce论文,发表于2004年12月,HadoopMapReduce是google MapReduce克隆版
  • MapReduce是基于磁盘的分布式并行批处理计算模型,用以进行大数据量的计算;它屏蔽了分布式计算框架细节,将计算抽象成Map+Reduce两部分
  • Map阶段并行处理输入数据,生成键-值对形式中间结果
  • Reduce阶段:对Map结果进行汇总,以得到最终结果
    在这里插入图片描述
  • MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理
  • 相关概念
1.Jobtracker
	master节点,只有一个
	管理所有作业,任务/作业的监控,错误处理等
	将任务分解成一系列任务,并分派给Tasktracker2.Tacktracker
	slave节点
	运行Map task和Reduce task,并与Jobtracker交互,汇报任务状态
3.Map task
	解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)
4.Reduce task
	从Map它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行

11.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

12.Pig(ad-hoc脚本)

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

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

  • Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”,它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目
  • 最早Spark是UC BerkeleyAMP lab所开源的类Hadoop MapReduce的一种基于内存的分布式并行计算框架
  • Spark提供了一个更快、更通用的数据处理平台
  • 和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍;不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法
  • 相关概念
1.Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker;在YARN模式中为资源管理器
2.Worker节点:从节点,负责控制计算节点,启动Executor或者Driver
3.Driver:运行Applicationmain()函数
4.Executor:执行器,是为某个Application运行在worker node上的一个进程
5.Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark CoreSpark SQL、Spark StreamingMLlibGraphX,开发者可以在同一个应用程序中无缝组合使用这些库
	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
1.Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan,所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的,但是相对来说在spark RDD中就没有了这块的优化了
Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理

14.Oozie(工作流调度器)

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

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

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

推荐系统架构

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值