Hadoop 学习笔记 生态

概论

HadoopApache下的开源项目

 

 

数据存储:

HDFS 分布式文件系统,负责存储数据,数据分散存储

NameNode

管理节点,存储元数据(文件对应的数据块位置、文件大小、文件权限等信息)

时负责读写调度和存储分配

DataNode

数据存储节点,每个数据块会根据设置的副本数进行分级复制,保证同一个文件的每个数据块副本都在不同机器上

 

 

 

数据分析:MapReduce计算引擎

离线计算(非实时计算)

 

 

MapRedue(一代)

分布式计算(多台运算加速)

Map阶段

多台机器同时读取这个文件内容的一个部分

Reducer阶段

Map阶段输出结果整合输出

 

TezSpark(二代)

 

 

Yarn(分布式资源管理器)

解决Hadoop扩展性

支持CPU和内存两种资源管理

资源管理由ResourceManagerRM)、ApplicationMasterAM)和NodeManagerNM)完成

RM负责对各个NM上的资源进行统一管理和调度

NM负责对资源供给和隔离

当用户提交一个应用程序时,会创建一个用以跟踪和管理这个程序的AM,它负责向RM申请资源,并要求NM启动指定资源的任务。这就是YARN的基本运行机制。

 

Yarn 作为一个通用的分布式资源管理器,它可以管理多种计算模型,如 SparkStormMapReduce Flink 等都可以放到 Yarn 下进行统一管理。

 

Spark(内存计算)

 

Spark 提供了内存中的分布式计算能力,相比传统的MapReduce 大数据分析效率更高、运行速度更快。总结一句话:以内存换效率。

 

传统的MapReduce 计算过程的每一个操作步骤发生在内存中,但产生的中间结果会储存在磁盘里,下一步操作时又会将这个中间结果调用到内存中,如此循环,直到分析任务最终完成。这就会产生读取成本,造成效率低下。

 

Spark 在执行分析任务中,每个步骤也是发生在内存之中,但中间结果会直接进入下一个步骤,直到所有步骤完成之后才会将最终结果写入磁盘。也就是说Spark 任务在执行过程中,中间结果不会落地,这就节省了大量的时间。

少量数据看不出来效率差别

 

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

基于面向列存储(又叫非关系型数据库、NoSQL)基于HDFS

实现了数据即是索引。因此,它的最大优点是查询速度快,这对数据完整性要求不高的大数据处理领域,比如互联网

 

Hbase继承了列存储的特性,它非常适合需对数据进行随机读、写操作、比如每秒对PB级数据进行几千次读、写访问是非常简单的操作。其次,Hbase构建在HDFS之上,其内部管理的文件全部存储在HDFS中。这使它具有高度容错性和可扩展性,并支持Hadoop mapreduce程序设计模型。

 

大数据适用于列存储

 

 Hive(数据仓库)

Hive 定义了一种类似SQL 的查询语言(HQL),它可以将SQL 转化为MapReduce 任务在Hadoop 上执行。这样,小李就可以用更简单、更直观的语言去写程序了。

 

Oozie(工作流调度器)

针对多个工作查询脚本任务调度

 

Oozie 是一个基于工作流引擎的调度器,它其实就是一个运行在Java Servlet 容器(如Tomcat)中的Javas Web 应用,你可以在它上面运行Hadoop Map Reduce Pig 等任务。

 

对于Oozie 来说,工作流就是一系列的操作(如Hadoop MRPig 的任务、Shell 任务等),通过Oozie 可以实现多个任务的依赖性。也就是说,一个操作的输入依赖于前一个任务的输出,只有前一个操作完全完成后,才能开始第二个。

 

Oozie 工作流通过hPDL 定义(hPDL 是一种XML 的流程定义语言),工作流操作通过远程系统启动任务。当任务完成后,远程系统会进行回调来通知任务已经结束,然后再开始下一个操作。

 

Sqoop Pig

把原来存储在MySQL 中的数据导入Hadoop HDFS 上,是否能实现呢?这当然可以,通过SqoopSQL-to-Hadoop)就能实现,它主要用于传统数据库和Hadoop 之间传输数据。数据的导入和导出本质上是MapreDuce 程序,充分利用了MR 的并行化和容错性。

 

 

通过Hive 可以把脚本和SQL 语言翻译成MapReduce 程序,扔给计算引擎去计算。Pig Hive 类似,它定义了一种数据流语言,即Pig Latin,它是MapReduce 编程的复杂性的抽象,Pig Latin 可以完成排序、过滤、求和、关联等操作,支持自定义函数。Pig 自动把Pig Latin 映射为MapReduce 作业,上传到集群运行,减少用户编写Java 程序的苦恼。

 

Flume(日志收集工具)

 

  • Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。
  • Flume 还具有能够将日志写往各种数据目标(文件、HDFS、网络)的能力。

 

Hadoop 平台,我们主要使用的是通过Flume 将数据从源服务器写入Hadoop HDFS 上。

 

 Kafka(分布式消息队列)

类似生产者、消费者问题

可以实时的处理大量数据以满足各种需求场景:比如基于 Hadoop 平台的数据分析、低时延的实时系统、Storm/Spark 流式处理引擎等。

 

ZooKeeper(分布式协作服务)

双机热备架构来说,双机热备主要用来解决单点故障问题,传统的方式是采用一个备用节点,这个备用节点定期向主节点发送ping 包,主节点收到ping 包以后向备用节点发送回复信息,当备用节点收到回复的时候就会认为当前主节点运行正常,让它继续提供服务。而当主节点故障时,备用节点就无法收到回复信息了,此时,备用节点就认为主节点宕机,然后接替它成为新的主节点继续提供服务。

 

这种传统解决单点故障的方法,虽然在一定程度上解决了问题,但是有一个隐患,就是网络问题,可能会存在这样一种情况:主节点并没有出现故障,只是在回复响应的时候网络发生了故障,这样备用节点就无法收到回复,那么它就会认为主节点出现了故障;接着,备用节点将接管主节点的服务,并成为新的主节点,此时,集群系统中就出现了两个主节点(双Master 节点)的情况,双Master 节点的出现,会导致集群系统的服务发生混乱。这样的话,整个集群系统将变得不可用,为了防止出现这种情况,就需要引入ZooKeeper 来解决这种问题。

 

ZooKeeper 是如何来解决这个问题的呢,这里以配置两个节点为例,假定它们是节点A”节点B”,当两个节点都启动后,它们都会向ZooKeeper 中注册节点信息。我们假设节点A”锁注册的节点信息是“master00001”节点B”注册的节点信息是“master00002”,注册完以后会进行选举,选举有多种算法,这里以编号最小作为选举算法,那么编号最小的节点将在选举中获胜并获得锁成为主节点,也就是节点A”将会获得锁成为主节点,然后节点B”将被阻塞成为一个备用节点。这样,通过这种方式ZooKeeper 就完成了对两个Master 进程的调度。完成了主、备节点的分配和协作。

 

如果节点A”发生了故障,这时候它在ZooKeeper 所注册的节点信息会被自动删除,而ZooKeeper 会自动感知节点的变化,发现节点A”故障后,会再次发出选举,这时候节点B”将在选举中获胜,替代节点A”成为新的主节点,这样就完成了主、被节点的重新选举。

 

如果节点A”恢复了,它会再次向ZooKeeper 注册自身的节点信息,只不过这时候它注册的节点信息将会变成“master00003”,而不是原来的信息。ZooKeeper 会感知节点的变化再次发动选举,这时候节点B”在选举中会再次获胜继续担任主节点节点A”会担任备用节点。

 

通俗的讲,ZooKeeper相当于一个和事佬的角色,如果两人之间发生了一些矛盾或者冲突,无法自行解决的话,这个时候就需要ZooKeeper 这个和事佬从中进行调解,而和事佬调解的方式是站在第三方客观的角度,根据一些规则(如道德规则、法律规则),客观的对冲突双方做出合理、合规的判决。

 

Ambari(大数据运维工具)

Ambari 是一个大数据基础运维平台,它实现了Hadoop 生态圈各种组件的自动化部署、服务管理和监控告警,Ambari 通过puppet 实现自动化安装和配置,通过Ganglia 收集监控度量指标,用Nagios 实现故障报警。目前Ambari 已支持大多数Hadoop 组件,包括HDFSMapReduceOozieHivePigHbaseZooKeeperSqoopKafkaSparkDruidStorm 等几十个常用的Hadoop 组件。

 

作为大数据运维人员,通过Ambari 可以实现统一部署、统一管理、统一监控,可极大提高运维工作效率。

 

 

 

posted @ 2021-01-19 19:46  醉酒拭风尘  阅读(154)  评论(0编辑  收藏  举报