导图社区 HDFS大数据理论知识点学习笔记
HDFS大数据理论知识点学习笔记,包括大数据概论、Hadoop框架的大数据生态、HDFS运作原理、Hadoop数据压缩、Hadoop优化等内容。
编辑于2022-11-02 09:58:38 广东HDFS大数据理论知识点学习笔记
大数据概论
概念
无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强决策力,洞察发现力和流程优化能力的海量、高增长和多样化的信息资产,主要解决数据存储和分析计算问题
特点(4V)
Volume(大量)
Velocity(高速)
Variety(多样)
Value(低价值密度)
大数据部门组织结构
小Tips:版本号的看法
1.x.y
1表示大版本更新
x表示小型功能更新
y表示bug fix
Hadoop框架的大数据生态
发展起源
GFS ---> HDFS
Map Reduce ---> MR
BigTable ---> HBase
Hadoop三大发行版
Apache
Cloudera
Hortonworks
Hadoop的优势
高可靠性-数据不易丢失
高扩展性-方便扩展节点
高效性-MapReduce思想下,协同工作
高容错性-失败任务重新分配
Hadoop组成
图示
HDFS(Hadoop Distributed File System)架构概述
NameNode(nn):目录(元数据)
DataNode(dn):数据
Secondary NameNode(2nn):辅助nn工作
YARN架构概述
Resource Manager(RM)
处理客户端请求
监控Nodemanager
启动或监控ApplicationMaster
资源的分配与调度
NodeManager(NM)
管理单个节点上的资源
处理来自Resouremanager的命令
处理来自ApplicationMaster的命令
ApplicationMaster(AM)
负责数据的切分
为应用程序申请资源分配任务
任务的监控与容器
Container
资源抽象-封装某个节点上的多维资源、如内存、CPU、磁盘、网络
图示
MapReduce架构概述
Map阶段并行处理输入数据
Reduce阶段对Map结果汇总
大数据技术生态系统
图示
HDFS运作原理
HDFS(Hadoop Distributed File System)概述
定义
分布式文件系统,适合一次写入,多次读出的场景,不支持文件的修改
特点
优点
高容错性(自动保存多个副本)
适合处理大数据
数据规模
文件规模
可构建在廉价机器上(万元级别)-与超算进行对比
缺点
不适合低延时数据访问(慢)
无法高效的对大量小文件进行存储
会占用大量namenode的内存
寻址时间超越读取时间
不支持并发写入、文件随机修改
一个文件只能有一个写,不允许多线程同时写
仅支持追加append,不支持随机修改,类似于数组,增加上限就重做
组成架构
NameNode(nn)
管理HDFS的名称空间
配置副本策略
管理数据块(Block)的映射信息
处理客户端读写请求
DataNode(Slave,NameNode下达命令,DataNode执行实际操作)
存储实际的数据块
执行数据块的读/写操作
Client
HDFS分布式存储,大文件,节点无法整存,Client把这种文件切块存到不同节点
文件切分-切成Block
与NameNode交互,获取文件的位置信息
与DataNode交互,读取或写入数据
提供命令管理HDFS,格式化NameNode
提供命令访问HDFS,提供增删改查
Secondary NameNode(并非NameNode的热备,不能马上替换NameNode并提供服务)
辅助NameNode,分担工作量,定期合并Fsimage和Edits,推送给NameNode
图示
HDFS文件块大小
块的大小可以通过配置参数(dfs.blocksize)来规定
默认大小Hadoop2.x版本中128M,老版本64M
HDFS读写流程
HDFS写数据的流程
文件
Client
DistributedFileSystem
权限不足或文件同名时无法上传
FSDataOutputStream
对DN1发起请求建立通道,DN1→DN2→DN3,应答后,传输Packet
NameNode
返回Distributed的请求,指明DN1,DN2,DN3
DN1是网络拓扑最近
DataNode
DN1
BLK1
DN2
BLK1
DN3
BLK1
DN4
BLK2
DN5
BLK2
DN6
BLK2
DN1,DN4网络拓扑最近,第二台选同一机架下其余节点,第三台选其他机架随机
总体思维图
HDFS读数据的流程
Client
DistributedFileSystem
申请下载文件
权限不足或没文件不可下载
FSDataInputStream
对DN1发起请求建立通道,DN1→DN2→DN3,应答后,传输Packet
NameNode
返回Distributed的请求,指明DN1,DN2,DN3
总体思维图
网络拓扑距离
图示
网络拓扑(Network Topology)结构是指用传输介质互连各种设备的物理布局
NameNode和SecondaryNameNode
NN与2NN工作机制
概述:NameNode元数据共两份(内存存在一份,磁盘中FsImage存在一份),但如果全部一起更新,效率太低,因此引入Edits文件(只进行追加操作),2NN定时将FsImage和Edits合并,并传入NN中,形成新的FsImage
总思维图
详细工作步骤
第一阶段:NameNode启动
第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
客户端对元数据进行增删改的请求。
NameNode记录操作日志,更新滚动日志。
NameNode在内存中对元数据进行增删改。
第二阶段:Secondary NameNode工作
Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
Secondary NameNode请求执行CheckPoint。
NameNode滚动正在写的Edits日志。
将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
生成新的镜像文件fsimage.chkpoint。
拷贝fsimage.chkpoint到NameNode。
NameNode将fsimage.chkpoint重新命名成fsimage。
Edits也清空
Fsimage和Edits解析
Fsimage
NameNode内存中元数据序列化后形成的文件。里面包含文件系统所有目录和inode的序列化信息
Edits
记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。
如何查看Fsimage和Edits文件
hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-2.7.2/fsimage.xml
hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-2.7.2/edits.xml
CheckPoint
hdfs-default.xml
通常情况下,SecondaryNameNode每隔一小时执行一次
一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次
NameNode故障处理
将SecondaryNameNode中数据拷贝到NameNode存储数据的目录
kill NameNode进程
删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
拷贝SecondaryNameNode中数据到原NameNode存储数据目录
scp -r atguigu@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/
重新启动NameNode
使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中。
修改hdfs-site.xml
<name>dfs.namenode.checkpoint.period</name>
<value>120</value>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value>
kill NameNode进程
删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件
scp -r atguigu@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./
rm -rf in_use.lock
导入检查点数据
bin/hdfs namenode -importCheckpoint
集群安全模式
NameNode与DataNode启动自启安全模式
NameNode启动,FsImage载入内存,执行Edits中各项操作,结束后创建新FsImage和Edits,开始监听DataNode请求
DataNode向NameNode发送最新的BLK信息
满足最小副本条件,整个文件系统中99.9%的BLK满足最小副本级别,NameNode就会在30秒后退出安全模式
刚刚格式化的HDFS不会进入安全模式
基本语法
bin/hdfs dfsadmin -safemode get
bin/hdfs dfsadmin -safemode enter
bin/hdfs dfsadmin -safemode leave
bin/hdfs dfsadmin -safemode wait
DataNode
DataNode工作机制
DataNode启动,向NameNode注册
注册成功后每1小时为一个周期,上报所有块信息
在平时,每3秒有一次心跳,心跳返回结果带有NameNode给DataNode的指令
总体思维图
数据完整性
计算数据完整性的流程
DataNode读取BLK的时候,计算CheckSum
一致则读取
不一致则计算其他DataNode的CheckSum
DataNode周期性验证CheckSum
使用crc校验
掉线时限参数设置
总体思维导图
hdfs-site.xml
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value> //单位为毫秒
<name>dfs.heartbeat.interval</name>
<value>3</value> //单位为秒
服役新数据节点
克隆主机,修改IP及名称
删除HDFS文件(/opt/module/hadoop-2.7.2/data和log)
source /etc/profile
启动DataNode和Yarn
上传LICENSE.txt到新节点
hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /
集群再平衡命令
./start-balancer.sh
退役旧数据节点
白名单(只有白名单才会允许访问NameNode)
在etc/hadoop目录下创建 dfs.hosts
touch dfs.hosts
vi dfs.hosts
添加主机名称
添加主机名称
添加主机名称
hdfs-site.xml配置文件中增加dfs.hosts属性
<name>dfs.hosts</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
分发配置文件
xsync hdfs-site.xml
刷新NameNode
hdfs dfsadmin -refreshNodes
更新ResourceManager节点
yarn rmadmin -refreshNodes
黑名单(退役通常使用黑名单)
在etc/hadoop目录下创建dfs.hosts.exclude文件
touch dfs.hosts.eclude
vim dfs.hosts.exclude
添加主机名称
添加主机名称
hdfs-site.xml配置文件中增加dfs.hosts.exclude属性
<name>dfs.hosts.exclude</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
刷新NameNode及ResourceManager
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
Datanode多目录配置
hdfs-site.xml
<name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
不会自动做数据均衡
HDFS高可用配置
HA概述
关键策略:消除单点故障,严格来说HA分为HDFS的HA和YARN的HA
NameNode如何影响HDFS集群
NameNode机器故障,需要重启
NameNode机器升级
如何进行HDFS高可用
配置Active/Standby两个NameNode,形成热备
HDFS-HA工作机制
工作要点
元数据管理方式
Edits
Active NameNode
读写
Standby NameNode
只读
如何共享Edits
QJM
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
Journal Node进行通信
NFS(Network File System)
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html
状态管理功能模块
zkfailover
两个NameNode能够ssh无密码登录
隔离(Fence)同一时刻仅有一个NameNode对外服务
自动故障转移
组件
Zookeeper
故障检测
现役NameNode选择
ZKFailoverController
健康监测
会话管理
基于Zookeeper选择
图示
Hadoop数据压缩
压缩概述
压缩的意义在于减少低层存储系统的读写字节数,I/O操作,网络数据传输
压缩格式
gzip
优缺点
优点
压缩率比较高
缺点
不支持split
应用场景
在应用中处理gzip格式的文件就和直接处理文本一样,所以压缩后在130M以内,均可以考虑使用gzip
Bzip2
优缺点
优点
超高压缩率
支持split
缺点
压缩速度慢
应用场景
数据用的较少的情况
Lzo
优缺点
优点
压缩率和压缩速度适宜
缺点
非hadoop自带
压缩率低于gzip
应用场景
主流,单个文件越大,lzo优点越明显
Snappy
优缺点
优点
压缩速度极快
缺点
不支持split
应用场景
Map到Reduce的中间数据压缩处理
各压缩格式对比
Hadoop优化
参数调优
datanode多目录
dfs.namenode.edits.dir与dfs.namenode.name.dir分开,达到最低写入延迟
dfs.namenode.handler.count
用来处理不同DataNode的并发心跳与客户端并发的元数据操作
Yarn
yarn.nodemanager.resource.memory-mb
yarn可使用的物理内存总量
yarn.scheduler.maximum-allocation-mb
单个任务可申请的最多物理内存量
yarn.scheduler.maximum-allocation-vcores
默认32
资源相关
mapreduce.map.memory.mb
MapTask可使用的资源上限,默认1024
mapreduce.reduce.memory.mb
ReduceTask可使用的资源上限,默认1024
mapreduce.map.cpu.vcores
默认1
mapreduce.reduce.cpu.vcores
默认1
mapreduce.reduce.shuffle.parallelcopies
Reduce到Map中取数据的并行数,默认5
mapreduce.reduce.shuffle.merge.percent
Buffer中的数据到多少比例开始写入磁盘,默认0.66
mapreduce.reduce.shuffle.input.buffer.percent
Buffer占Reduce可用内存的比例,默认0.7
mapreduce.reduce.input.buffer.percent
指定多少比例的内存来存放Buffer中的数据,默认0
Map
mapreduce.task.io.sort.mb
环形缓冲区,默认100m
mapreduce.map.sort.spill.percent
环形缓冲区溢出的阈值,默认80%
容错相关参数
mapreduce.map.maxattempts
mapreduce.reduce.maxattempts
mapreduce.task.timeout
MapReduce运行过慢的原因
硬件性能
I/O操作
数据倾斜
Map和Reduce数不合理
Map运行时太长
小文件过多
大量不可分块的超大文件
Spill次数过多
Merge次数过多
MapReduce优化方法
数据输入阶段
合并小文件,自定义Inputformat存储为SequenceFile
采用CombineFileInputFormat作为输入
Map阶段
增大环形缓冲区
增大溢写比例
减少merge次数
使用Combiner进行合并
Reduce阶段
Map及Reduce数合理设置
Map Reduce共存
规避使用Reduce
增大Reduce内存
I/O阶段
采用数据压缩
使用SequenceFile二进制文件
整体
增大MapTask和ReduceTask内存
增加Map和ReduceTask CPU核数
数据倾斜问题
概述
数据频率倾斜
数据量
数据大小倾斜
数据大小
优化方法
抽样和范围分区
自定义分区
Combine
采用MapJoin
HDFS小文件
小文件问题
大量占用NameNode的内存空间
索引文件过大使得索引速度变慢
解决方案
上传时将小文件合成大文件再上传
业务处理前使用MapReduce进行合并
MapReduce时,采用CombineTextInputFormat提高效率
开启JVM重用
mapreduce.job.jvm.numtasks