HDFS知识点.md

版本 hadoop-2.7.2

HDFS 运行模式

core-default.xml 中 fs.defaultFs
本地模式 fs,defaultFs=file:/// (默认)
分布式模式 fs.defaultFs=hdfs://

MR运行模式

core-default.xml 中 fs.defaultFs
本地模式 mapreduce.framework.name=local (默认)
分布式模式 mapreduce.framework.name=yarn
本地模式指在本地运行

hadoop 配置文件组成

4个默认配置文件
4个用户可以自定义的配置文件
用户自定义配置文件会覆盖同名默认配置文件中的参数
hadoop启动先加载默认配置文件 后加载自定义配置文件

默认配置文件

位置 HADOOP_HOME/share/xxx.jar/xxx-default.xml
core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml

用户配置文件

core-site.xml
hdfs-site.xml
maperd-site.xml
yarn-site.xml

常用命令

hadoop fs : 可以操作本地文件系统模式的的hdfs 还可以分布式文件系统
hdfs dfs :只能操作分布式文件系统
调整副本数
hadoop fs -setrep 1 /wcinput

通讯协议

Client 与 NameNode 通讯使用RPC (远程调用协议)

hdfs 块大小

dfs.blocksize = 128m
1.x版本默认64m 2.x版本默认128m
基于最佳传输损耗理论:再一次传输中,寻址的时间占用传输时间1%时,本次传输的损耗最小,为最佳性价比传输
文件每次校验为64k 需64K倍数
普通磁盘传输速率大概为100m/s
若固态硬盘可调整到256m
影响速度的3大问题 1.网络io 2.寻址 3.校验

传输

pipeline 传输通道
packcet 小包64k传输
chunk 小块512b +4b 校验
Clinet 传输packcet完成后 DN会发送ack到客户端确认消息

HDFS的写数据流程

  1. 服务端启动HDFS中的NN和DN进程
  2. 客户端创建一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件
  3. NN处理请求,检查客户端是否有权限上传,路径是否合法等
  4. 检查通过,NN响应客户端可以上传
  5. 客户端根据自己设置的块大小,开始上传第一个块,默认0-128M,
    NN根据客户端上传文件的副本数(默认为3),根据机架感知策略选取指定数量的DN节点返回
  6. 客户端根据返回的DN节点,请求建立传输通道
    客户端向最近(网络举例最近)的DN节点发起通道建立请求,由这个DN节点依次向通道中的(距离当前DN距离最近)
    下一个节点发送建立通道请求,各个节点发送响应 ,通道建立成功
  7. 客户端每读取64K的数据,封装为一个packet(数据包,传输的基本单位),将packet发送到通道的下一个节点
    通道中的节点收到packet之后,落盘(检验)存储,将packet发送到通道的下一个节点!
    每个节点在收到packet后,向客户端发送ack确认消息!
  8. 一个块的数据传输完成之后,通道关闭,DN向NN上报消息,已经收到某个块
  9. 第一个块传输完成,第二块开始传输,依次重复⑤-⑧,直到最后一个块传输完成,NN向客户端响应传输完成!
    客户端关闭输出流

异常写流程

1-6 见上 HDFS的写数据流程

  1. 客户端每读取64K的数据,封装为一个packet,封装成功的packet,放入到一个队列中,这个队列称为dataQuene(待发送数据包)
    在发送时,先将dataQuene中的packet按顺序发送,发送后再放入到ackquene(正在发送的队列)。
    每个节点在收到packet后,向客户端发送ack确认消息!
    如果一个packet在发送后,已经收到了所有DN返回的ack确认消息,这个packet会在ackquene中删除!
    假如一个packet在发送后,在收到DN返回的ack确认消息时超时,传输中止,ackquene中的packet会回滚到
    dataQuene。

重新建立通道,剔除坏的DN节点。建立完成之后,继续传输!
只要有一个DN节点收到了数据,DN上报NN已经收完此块,NN就认为当前块已经传输成功!
NN会自动维护副本数!

NameNode工作原理

NN 存储元数据 负责接收客户端请求 、接收DN上报的信息,分配DN任务(维护副本数)
元数据存储在fsimage文件+edits文件中

fsimage (元数据快照文件)
路径:data/tmp/dfs/name/current

  1. 第一次格式化NN时,会创建NN工作目录 生成 fsimage_0000000000000文件
  2. 当NN启动时,会将所有edits文件和fsimages文件加载到内存并合并得到最新的元数据。并将新元数据持久化磁盘生成新的fsimage文件
  3. 如果启动了2NN 也会辅助NN合并元数据,会将合并后的元数据发送到NN

edits (元数据日志文件)

查看edits文件

hdfs oev -i edits_improgress_00000000000000000001 -o ~/edit.xml

NameNode总结

NN主要存储元数据

存储元数据分为2种:1. inodes:记录文件属性和文件由哪些块组成 2. 块位置的映射信息:由NN启动后,接收DN的上报,动态生成

2种存储文件的格式 edits 和fsimage

edits在NN启动后,保存新写入的命令,当满足checkpoint条件时(1H或1000w txid数据)时会进行edits与fsimage合并,合并后的元数据会持久化新的fsimage中间中

在NN启动时会先加载fsimage 之后加载edits,合并生成最新的元数据,并记录checkpoint

安全模式

在NN启动时会将所有元数据加载完成后,等待DN上报块的信息

当NN所保存所有块的最小副本数(默认为1)/块的总数>0.999 时,NN会自动离开安全模式

在安全模式中,客户端只能进行有限读操作,不能写

默认1小时或100万条记录会进行fsimage和edits合并操作

使用 hdfs dfsadmin -safemode wait|leave|enter 可进入或退出安全模式,也可使写入文件暂存缓冲区待退出安全模式时候进行写入hdfs

NameNode从节点

Secondary NameNode

元数据多目录配置

防止元数据丢失 hdfs-site.xml

<property>
	<name>dfs.namenode.name.dir</name>
   <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>

DataNode

  1. DataNode 启动后向Namenode注册,上报block信息
  2. 之后每隔1小时上报一次块信息(前报时会进行块校验,查看是否损坏)
  3. 每3秒向NN发送一次心跳,同时NN会返回带有该DN的相关命令
  4. 默认超过10分钟没有收到DN心跳,则认为该节点不可用

DataNode 多目录

hdfs-site.xml

<property>
	<name>dfs.datanode.data.dir</name>
   <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

块校验

通过CheckSum(校验和)

奇偶校验缺点不能完全确定是否准确

hdfs 采用 **crc校验 **

服役新节点

一般磁盘超过70% 需要扩容节点操作

  1. 配置新节点和原有hadoop集群的hosts映射信息

  2. 配置新节点hadoop 配置文件NN和YARN地址

  3. NN中slaves加入新节点

  4. 启动新节点DN

退役旧节点

白名单

只有在白名单中的节点才能访问NN,创建白名单文件witenamelist写入允许访问的节点名称,在hdfs-site.xml 中加入配置

<property>
	<name>dfs.hosts</name>
    <value>/opt/hadoop-2.7.2/etc/hadoop/witenamelist</value>
</property>

通常情况下需要重启生效,hadoop提供了 刷新命令 hdfs dfsadmin refreshNodes

黑名单

退役节点,移交块信息

同样编辑黑名单文件blacknamelist写入需要退役的节点名称,在hdfs-site.xml中加入配置

<property>
	<name>dfs.exclude</name>
    <value>/opt/hadoop-2.7.2/etc/hadoop/blacknamelist</value>
</property>

执行刷新命令 hdfs dfsadmin refreshNodes

集群间数据拷贝

bin/hadoop dictcp hdfs://hadoop1:9000/test/1.txt hdfs://hadoop2:9000/test/1.txt

har归档

解决小文件上传

  1. 从源头上解决

    在上传时候把小文件 打成tar.gz

  2. 如果已经上传到了hdfs,可以使用在线归档

    在线归档的功能实际是MR程序 ,可以使用命令把多个小文件归档成归档文件

    hadooparchive -archiveName test.har -p /hello hi1 hi2 hi3 hi4 hi5 /

    查看归档文件 hadoop fs -ls har://test2.har

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值