Hadoop是什么?
- Hadoop是一个由Apache机机会所开发的分布式系统基础架构,主要解决海量数据的存储和海量数据分析计算问题。
- 广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈
- Hadoop的优势(4高)可靠、可扩、高效、容错
- 高可靠性:Hadoop底层维护了数据副本,所以即使Hadoop某个计算元素或存储出现故障也不会导致数据的丢失
- 高扩展性:在集群见分配任务和数据,可以方便的扩展数以千计的节点
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度
- 高容错性:能够自动将失败的任务重新分配
Hadoop组成
Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源调度,耦合性较大;
Hadoop2.x时代,增加了Yarn,Yarn只负责资源调度,MapReduce只负责运算;
Hadoop3.x时代,在组成上与Hadoop2.x没有变化。
HDFS架构概念
HDFS(Hadoop Distrbuted File System)是一个分布式文件系统
HDFS角色:
NameNode:存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、权限),以及每个文件的块列表和块所在的DataNode等。
- 管理HDFS的名称空间;
- 配置副本策略;
- 管理数据块(Block)信息;
- 处理客户端读写请求;
DataNode:在本地文件系统存储数据块和数据块的校验和。
- 存储实际的数据块;
- 执行数据块儿的读/写操作;
SecondaryNameNode:每隔一段时间对NameNode元数据备份,并非NameNode的热备,当NameNode挂掉的时候,并不能替换NameNode提供服务。
- 辅助NameNode分担其工作量,定期合并Fsimage和Edits,并将合并好的Fsimage推送给NameNode;
- 在紧急情况下,可辅助恢复NameNode,但是并不能恢复至最新状态;
YARN架构概念
YARN是一种资源协调者,是Hadoop的资源管理器。
YARN角色:
- ResourceManeger:整个集群资源(CPU、内存等)的老大;
- ApplicationMaster:单个任务的老大;
- NodeManager:单个服务器节点资源老大;
- Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等
说明:
- 客户端可以有多个
- 集群上可以运行多个ApplicationMaster
- 每个NodeManager上可以有多个Container
MapReduce架构概念
MapReduce是一个分布式计算框架,主要由编程模型和运行时环境两部分组成。
MapReduce编程模型由两个阶段组成:Map和Reduce,用户可只需编map()和reduce()两个函数即可完成简单的分布式程序的设计。
- Map阶段并行处理输入数据
- Reduce阶段对Map阶段的结果进行汇总
HDFS、YARN、MapReduce三者之间的关系
- 客户端Client提交任务到资源管理器(ResourceManager)
- 资源管理器接收到任务后去NodeManeger节点开启任务(ApplicationMaster)
- ApplicationMaster向ResourceManager申请资源
- 若有资源ApplicationMaster负责开启任务MapTask
- 每个mapTask独立工作,各自负责检索各自对应的DataNode,将结果记录到HDFS
- DataNode负责存储,NameNode负责记录,SecondaryNameNode负责备份。
大数据技术生态
技术名词解释:
- Sqoop:Sqoop是一款开源的工具,主要用与在Hadoop、Hive与传统数据库间进行数据传递,可以将一个关系型数据库(例如:MySQL、Oracle等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。
- Flume:Flume是Cloudera提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接收方(可定制)的能力。专业的日志处理系统。
- Kafka:Kafka是一种高吞吐的分布式发布订阅消息系统。
有以下特征:- 同时为发布和订阅提供高吞吐量:通过I/O的磁盘数据结构提供消息的持久化,这种结构对于数以TB的消息存储也能够保持长时间的稳定性能,即使是非常普通的硬件,Kafka可以支持每秒数百万的消息
- 消息持久化:将消息持久化到磁盘,可用于批量消费;
- 分布式支持服务间的消息分区及分布式消费,同时保证每个partition内的消息顺序传输;
- 消费者采用pull(拉)的模式:消息被处理的状态是在consumer端维护,而不是在服务端维护;
- 支持online(在线)和offline(离线)的场景:同时支持离线数据处理和实时数据处理;
- Spark:Spark是当前最流行的开源大数据内存计算框架,可以基于Hadoop上存储的大数据进行计算。
- Flink:Flink是当前很流行的实时计算框架,全面对标Spark。Flink支持实时计算和离线计算。
- Oozie:Oozie是一个管理Hadoop作业和工作流程的调度管理系统,Oozie是轻量级的,功能是最丰富的(Oozie、Azlaban、crontab)。
- Azkaban:Azkaban任务调度系统,使用起来比较方简单。
- HBase:HBase是一个分布式的、面向列的开源数据库,HBase不同于一般的关系型数据库,它是一个适合于非结构化数据存储的数据库。
- Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,十分适合数据仓库的统计分析。
- ZooKeeper:ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
推荐系统项目架构
如若总结有误欢迎指正😊