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 groupchmod
:chown
copyFromLocal
copyToLocal
cp
: copydu
:显示目录中所有文件的大小dus
:显示单个文件大小expunge
:清空回收站get
:复制到本地getmerge
:将 source dir 中的文件链接成 local target dirls
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 |
|
MapReduce
1 |
|
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条记录
去重模式:去重
数据重组:按照一定的规划整理数据。数据重组要求划分的分区数量已经确定,划分分区的条件已经确定