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一种计算框架,而是朝着对多种框架的统一管理前进
优点:
-
资源利用率高
-
运维成本低
-
数据共享
对比:
| V1 | V2 | |
|---|---|---|
| 基本框架 | 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
// 获取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
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运行流程
-
JobClient 向YARY中提交应用程序,其中 包括ApplicationMaster 程序、启动ApplicationMaster的命令、用户程序、环境变量、作业信息、文件位置信息等
-
RecourseManager为该应用程序分配第一个 Container. 并与对应的 Node-Manager 通信(通过心跳方式),更求它在这个Container中启动应用程序的ApplicationMaster
-
ApplicationMaster首先向ReoourceManager注册,这样用 户可以直接通过ResourceManager查看应用程序的运行状态。然后它将为各个任务申请资源,并监控它的运行状,直到运行结束
-
ApplicationMaster 采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
-
一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务
-
NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中, 并通过运行该脚本启动任务。
-
各个任务通过某个RPC协议向AplcationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
-
应用程序运行完成后, 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条记录
-
去重模式:去重
-
数据重组:按照一定的规划整理数据。数据重组要求划分的分区数量已经确定,划分分区的条件已经确定