Hadoop 知识整理

hadoop知识点整理

第一章 大数据的概念

大数据是指无法用现有的软件工具提取、存储、搜索、共享、分析和处理的海量的复杂的数据图集。

特征

4个V

  • Volume:数据体量巨大

  • Variety:数据种类繁多

  • Value:数据价值密度低

  • Velocity:处理速度快

hadoop生态圈

大数据工具主要包括:Hadoop、Hbase、ZooKeeper、Hive、Mahout、Sqoop、Storm等

Hadoop

Doug Cutting开发,受到Map/Reduce启发,核心是MapReduce编程模型和HDFS分布式文件系统

采用分而治之的思想,Map用来切分大的数据,Reduce用来合并Map计算的结果。

HDFS 分布式文件系统,为海量数据提供存储服务,将大文件拆分为块,多节点存放,具有高吞吐量、高容错性的特点。

HBASE

HBASE是Apache开源的KV型数据库,是建立在HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

仅支持单行事务。

主要用来存储非结构化和半结构化的松散数据。

Hive

Apache Hive数据仓库软件提供对存储在分布式中的大型数据集的查询和管理,它本事是建立在Hadoop之上的

Storm

Apache Storm是一个免费、开源的分布式实时计算机系统,简化了数据流的可靠处理。

ZooKeeper

zooKeeper是一个高性能、分布式的开源分布式应用协调服务,他是storm、hbase的重要组件,它是一个为分布式应用提供一致性服务的软件。

服务端跑在JAVA上

ZooKeeper有两个角色,一个是leader,负责写服务和数据同步,剩下的是follower,提供读服务。

特点

  • 顺序一致性:按照客户端发送请求的顺序更新数据

  • 原子性

  • 单一性:无论客户端连接哪个server都看到同一个视图

  • 可靠性:一旦数据更新成功将一直保持,直到新的更新

  • 及时性:客户会在一个确定的时间内得到最新的数据

运用场景

  • 数据发布订阅

  • 名空间服务

  • 分布式通知

  • 分布式锁

  • 集群管理

sqoop

sqoop是Apache顶级项目,允许用户将数据从关系型数据库中抽取数据到Hadoop中

mahout

mahout是一个强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括分布式协同过滤的实现、分类、聚类等

Hadoop历史和版本

历史:

  • 2011年12月,Apache基金会发布了Apache Hadoop 版本1.0

  • 2013年8月,版本2.0.6可用

  • 2017年12月发布Apache Hadoop3

发行版:

Hadoop有许多变体:

  • Cloudera Hadoop分布:是Coludera Enterprise的核心,包括Apache Hadoop、Apache Spark,Apache Kafka 以及十多个其他紧密继承的领先开源项目

  • Hortonworks Hadoop分布:是基于YARN的安全性强、企业就绪的开源版本

  • MapR Hadoop分布:是Hadoop的完成整企业级发行版

  • PivotalHD:是领先的基于标准的Hadoop该发行版,为Business Data Lake架构奠定了基础

优势:

  • 高可靠性

  • 高拓展性

  • 高效性

  • 高容错性

第二章 Hadoop 组成与结构

Hadoop1的三大核心模块:

  • Common模块:支持其他模块的工具模块

  • HDFS模块:一个高可靠、高吞吐量的分布式文件系统

  • MapReduce模块:一个分布式的资源调度和离线并行计算系统

Hadoop2的组成:

MapReduce模块仅作为分布式计算框架存在,资源调度功能交给YARN来调度处理

HDFS

一个分布式文件系统。

HDF的设计适合一次写入多次读出的场景且不支持文件修改。适合用来做数据分析,并不适合做网盘使用。

Master-Slave结构,Master是NameNode,Slave是DataNode

client职责如下:

  • 文件切分

  • 与NameNode交互获取文件的位置信息

  • 与DataNode交互读取或写入数据

  • 提供一些明恋来管理HDFS,比如启动或者关闭HDFS

  • 可以通过一些命令来访问HDFS

NameNode职责如下:

  • 配置副本策略

  • 处理client读写请求

  • 管理block(数据块)映射信息,以元数据的形式存储在Fsimage镜像文件中

  • 管理HDFS命名空间

DataNode的职责:

  • 执行实际的数据块

  • 执行数据块的读写操作

SecondaryNameNode,第二名称节点,并非名称节点的热备,晋档NameNode重启或者热备NameNode激活时将宕机前所保留集群的快照发送给NameNode以恢复此前集群的状态。具体功能为:

  • 存辅NameNode,分担其工作量

  • 定期合并Fsimage和Edits,并推送给NameNode

  • 在紧急情况下可辅助恢复NameNode

优点:

  • 高容错性

  • 适合大数据处理

  • 支持流式数据访问

  • 可构建在廉价机器上

缺点:

  • 不适合低延时数据访问

  • 无法高效的对大量小文件进行存储

  • 不支持并发写入文件和随机修改

YARN架构

MRv1的局限:

  • 扩展性差

  • 可靠性差

  • 资源利用率低

  • 无法支持多种计算机框架

YARN是一个弹性计算平台,他的目标已经不局限于支持MapReduce一种计算框架,而是朝着对多种框架的统一管理前进

优点:

  • 资源利用率高

  • 运维成本低

  • 数据共享

对比:

V1V2
基本框架JobTracker由资源管理和作业控制两部分组成将JobTracker的两个功能拆分成两个独立的进程,资源管理进程负责整个集群的资源,而作业控制则是直接与应用程序相关的模块,每个进程只负责一个作业
编程模型与数据处理引擎MRv2重用了v1中的编程模型与数据处理引擎
运行时环境由JobTracker和TaskTracker两类服务组成,JT负责资源和任务的管理与调度,TT负责单个节点的资源管理和任务进行将资源部管理与应用程序管理分开,分别又YARN和ApplicationMaster负责

YARN基本架构

总体上仍然是Master/Slave架构

YARN的组成成分如下:

  • ResourceManager:一个全局的资源管理器,负责整个系统的资源管理与分配。它由两个组件构成:

    • 调度器(Scheduler):根据容量、队列等限制条件将资源分配给各个正在运行的应用程序

    • 应用程序管理器(Application Manager ASM):负责整个系统中所有应用程序

  • ApplicationMaster(AM)的主要功能有:

    • 与RM调度器协商以获取资源(Container)

    • 将得到的任务进一步分给内部任务

    • 与NM通信以启动/停止任务

    • 监控所有任务运行状态

  • NodeManager:是每个节点上资源和任务管理器

  • Container:是YARN山中的资源抽象,它封装了某个节点上的多维度资源

第三章 Hadoop运行模式与大数据技术框架

Hadoop的运行模式主要有四种:

  • 本地模式

  • 伪分布式

  • 全分布式

  • 高可用模式

伪分布式模式

Hadoop可以运行在单个节点上,其中每一个Hadoop守护进程运行在单独的Java进程中,这个模式称之为伪分布式模式。Hadoop所有进程都运行在一台服务器以模拟全分布式模式,常用于学习阶段。

后台的五个进程为:

  • NameNode

  • DataNode

  • SecondaryNameNode

  • ResourceManager

  • NodeManager

高可用模式

Hadoop是一种主从式架构,这样就会有单点故障的问题

HDFS

  • 数据块(block)

    • HDFS默认的最基本的存储单位是128MB的数据块

    • 128M为一块

    • 一个文件如果小于一个数据块的大小,并不占用整个数据块的空间

  • 存放策略(3副本)

    • 第一个和client同node

    • 第二个放在与第一个节点的不同机架中的随机的一个node

    • 第三个放在与第一个节点不同的机架中与第二个不同的随机node中

  • NameNode 和DataNode

    • HDFS体系结构中有两类节点,一类是NameNode ( Master) ,又叫”元数据节点”;另一类是DataNode (Slave) ,又叫”数据 节点”。

    • 元数据节点用来管理文件系统的命名空间,作用如下:

      • 其将所有的文件和文件夹的元数据保存在一个文件 系统树中

      • 这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log)

      • 还保存了一个文件包括哪些数据块,分布在哪些数据节点上,然而这些信息并不存储在硬盘上,而是在系统启动的时候从数据节点收集而成的

    • 数据节点是文件系统中真正存储数据的地方,作用如下:

      • 客户端(clien)或者 元数据信息(namenode)可以向数据节点请求写入或者读出数据块

      • 周期性的向元数据节点回报其存储的数据块信息

    • hadoop.tmp.dir,临时目录,其他临时目录的父目录,默认 /tmp/hadoop-${user.name},在core-site.xml中配置

    • 元数据节点目录结构,在hdfs-site.xml中配置dfs.name.dir参数,以,分隔,默认在{hadoop.tmp.dir}/dir/name

  • 数据节点目录结构

    • hdfs-site.xml中配置参数dfs.data.dir,以,分隔
  • HDFS通信协议

    • 所有HDFS通信协议都是构建在TCP/IP协议上的
  • HDFS安全模式

    • Namenode启动后会进入一种称为安全模式的特殊状态。处于安全模式的Namenode是不会进行数据块的复制的。Namenode从所有的DataNode接受心跳信号和块状态报告

Name Node、DataNode 和Client

  • Namencodte 是分布式文件素统中的管理者, 主要负责管理 文件系统的命名空间、集群配置信息和存储块的复制等。NameNode 会将文件系统的Meta-data 存储在内存中,这些信息主要包括了文件信息,每个文件对应的文件块的信息和每个 文件块DataNode的信息等。

  • DataNode是文件存储的基本单元, 它将Block 存储在本地文件系统中,保存了Block 的meta-data,同时 周期性地将所有存在的Block信息发送给NameNode.

  • Client 就是需要获取分布式文件系统文件的应用程序。

  • Client读取文件信息

Hadoop Shell命令

实际上是属性,命令为:hadoop fs -xx

  • cat:

  • chgrp: change group

  • chmod:

  • chown

  • copyFromLocal

  • copyToLocal

  • cp: copy

  • du:显示目录中所有文件的大小

  • dus:显示单个文件大小

  • expunge:清空回收站

  • get:复制到本地

  • getmerge:将 source dir 中的文件链接成 local target dir

  • ls

  • lsr:递归ls

  • mkdir

  • movefromLocal

  • mv

  • put:本地到远程

  • rm

  • rmr:递归rm

  • setrep:改变副本数

  • stat:返回指定路径的统计信息

  • tail:将尾部1kb的字节输出到stdout

  • test:检测文件是否存在

  • text:将源文件输出为文本格式

  • touchz:新建一个0自己的文件

Hadoop管理命令:

  • distcp:分布式拷贝(集群之间)

  • fsck:检查整个文件系统的健康情况

  • jar:运行java文件

  • job:用于和MapReduce交互

  • balancer:运行集群平衡工具

  • dfsadmin:运行一个dfs admin客户端

  • namenode: 运行namenode

java接口

Hadoop中关于文件操作类基本都在org.apache.hadoop.fs包中

Hadoop类库中最终面向用户提供接口是FileSystem

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 获取FileSystem具体类
static FileSystem get(Configuration conf);
// 写文件
public FSDataOutputStream create(Path f) throws IOException;
//读文件
// 上传文件到HDFS
public void copyFileLocalFile(Path src,Path dist);
// 重命名文件
public abstract boolean rename(Path src, Path dist);
// 删除文件&目录
public abstract boolean delete(Path f, boolean recursive) throws IOException;
// 创建目录
public boolean mkdirs(Path f) throws IOException;
// 遍历目录
public abstract FileStatus[] listStatus(Path f) throws FileNotFoundException, IOException

MapReduce

1
2
3
4
public void map(Object Key,Text value,Context context)
throws IOExcetion, InterruptedException{

}

MapReduce工作原理

MapReduce框架的运作完全基于“键值对”,即数据的输入是一批“键值对” (key-value) ,生成的结果也是批“键值对”,只是有时候它们的类型不一样而已。Key和value的类由于需要支持被序列化 (Serealire) 操作,所以它们必须要实现Writable 接口,而且key的类还必须实现WirtableComparable接口,使得可以让框架对数据集的执行排序操作,MapRedtre运行机制,按照时间顺序包括:输入分片(input split)、map 阶段、combiner 阶段、shuffle阶段和reduce阶段。

在进行map计算之前,MapReduce会根据输入文件计算输入分片

YARN运行流程

  1. JobClient 向YARY中提交应用程序,其中 包括ApplicationMaster 程序、启动ApplicationMaster的命令、用户程序、环境变量、作业信息、文件位置信息等

  2. RecourseManager为该应用程序分配第一个 Container. 并与对应的 Node-Manager 通信(通过心跳方式),更求它在这个Container中启动应用程序的ApplicationMaster

  3. ApplicationMaster首先向ReoourceManager注册,这样用 户可以直接通过ResourceManager查看应用程序的运行状态。然后它将为各个任务申请资源,并监控它的运行状,直到运行结束

  4. ApplicationMaster 采用轮询的方式通过RPC协议向ResourceManager申请和领取资源

  5. 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务

  6. NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中, 并通过运行该脚本启动任务。

  7. 各个任务通过某个RPC协议向AplcationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

  8. 应用程序运行完成后, ApplicationMaster向ResourceManager注销并关闭自己

作业关键过程详解

map:map任务最终是交给Map任务执行器

Reduce:从所有map节点取到属于自己的map输出

Partitioner:当Mapper处理好数据后,需要使用Partitioner(分区器)确定怎样合理地将Mapper输出分配到Reduce上

Combiner:相当于一个本地的Reduce,主要是对Mapper输出的大量本地文件进行一次合并。Combiner函数执行时机可能是在map的merge操作完成之前

MapReduce各种输入输出

InputFormat:负责处理MR的输入部分,来决定Map的数量,InputFormat

FileInputFormat:是所有以文件作为数据源的InputFormat实现的基类,FileInputFormat保存作为job输入的所有文件

MapReduce 设计模式

  • 过滤器模式:设定某种条件,当负责条件时保留数据,不符合条件时丢弃数据

  • Top N:根据数据集的排名,获取前N条记录

  • 去重模式:去重

  • 数据重组:按照一定的规划整理数据。数据重组要求划分的分区数量已经确定,划分分区的条件已经确定


Hadoop 知识整理
2023/06/04/subject/hadoop/
作者
charlesix59
发布于
2023年6月4日
许可协议