块
1.块 block一般默认为128m,在hdfs-site.xml里可设置。
2.dfs.blocksize 134217728 128M 规格
3.在集群下副本dfs.replication 为3
通俗说明:
一缸水 260ml
瓶子 128ml规格
需要多少瓶子能装满
260 / 128 =2…4ml
p1 128ml 装满 p1 p1 蓝色
p2 128ml 装满 p2 p2 黄色
p3 4ml 未装满 但是也占用一个瓶子 p3 p3 红色
最终装3个瓶子【如下图】
在伪分布式部署:
dfs.replication 1
原因只有1个DN节点
Default block replication. 块副本数
The actual number of replications can be specified
when the file is created. The default is used
if replication is not specified in create time.
假如一个文件 260M 上传HDFS上
切分3个块,dfs.replication 3(副本数为3)
128M 128M 128M
128M 128M 128M
4M 4M 4M
面试题:
一个文件160M,块大小128M,副本数2份
请问:实际存储多少块,实际多少存储空间?
160/128=1…32M
1:128M 128M
2:32M 32M
实际存储多少块:160/128=1…32M 1+1=2 2=4
实际存储空间:1602=320M
256*2=512M
a.数据上传HDFS不可能凭空增加新的数据内容
b.dfs.blocksize 规格 未满一个规格 也会占用一个block文件
计算公式:实际块=floor(上传文件大小/128M)副本数
实际存储空间=上传文件大小副本数
小文件
定义:明显小于block size的文件 80%
危害:(瓶颈)
1)磁盘IO
2)task启动销毁的开销
3)资源有限
Hadoop中的目录、文件、blk都以元数据的方式存储下来的
200字节
生产上:
hdfs适合小文件存储吗? 不
假如不适合,为什么呢?
假如上传文件都是小文件 比如 3m 5m 6m 10m四个文件
dfs.blocksize 134217728 128M 规格
dfs.replication 3
块的数量 3+3+3+3=12块
假设在【上传前合并】这4个文件为 24M文件
块的数量 3块
块的元数据信息是记录在namenode 4G配置
假如已经在hdfs上 真的有小文件,该怎么办?
合并 启动一个服务 单独合并
目标 是为了小文件合并大文件,约定的:
尽量合并的大文件 <=128M blocksize 比如控制 110M
129M=128M 1M
SHELL脚本 10M 阈值
flume --》hdfs …
支架
HDFS架构
1.Namenode: 主 nn
存储:文件系统的命名空间:
a.文件的名称
b.文件的目录结构
c.文件的属性 权限 创建时间 副本数
d.文件对应被切割为哪些数据块+副本数–》数据块分布在哪些DN节点上
blockmap当然NN节点不会持久化存储这种映射关系
是通过集群启动和运行时,DN会定时发送blockreport给NN,
依次NN在内存中动态维护这种映射关系
p1 p1 p1
p2 p2 p2
p3 p3 p3
注意: 一个DN节点上不可能存储一个块的多个副本,只能1个
所在的路径:
[pxj@pxj31 /tmp/hadoop-pxj/dfs/name]$cd current/
[pxj@pxj31 /tmp/hadoop-pxj/dfs/name/current]$ll
总用量 8200
-rw-rw-r--. 1 pxj pxj 42 12月 1 01:31 edits_0000000000000000001-0000000000000000002
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 01:31 edits_0000000000000000003-0000000000000000003
-rw-rw-r--. 1 pxj pxj 42 12月 1 01:42 edits_0000000000000000004-0000000000000000005
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 01:54 edits_0000000000000000006-0000000000000000015
-rw-rw-r--. 1 pxj pxj 12352 12月 1 13:11 edits_0000000000000000016-0000000000000000119
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 13:11 edits_0000000000000000120-0000000000000000120
-rw-rw-r--. 1 pxj pxj 42 12月 1 13:36 edits_0000000000000000121-0000000000000000122
-rw-rw-r--. 1 pxj pxj 8813 12月 1 14:36 edits_0000000000000000123-0000000000000000196
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 14:36 edits_0000000000000000197-0000000000000000197
-rw-rw-r--. 1 pxj pxj 42 12月 1 14:44 edits_0000000000000000198-0000000000000000199
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 14:44 edits_0000000000000000200-0000000000000000200
-rw-rw-r--. 1 pxj pxj 42 12月 1 15:14 edits_0000000000000000201-0000000000000000202
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 15:14 edits_0000000000000000203-0000000000000000203
-rw-rw-r--. 1 pxj pxj 1048576 12月 1 23:47 edits_inprogress_0000000000000000204
-rw-rw-r--. 1 pxj pxj 1880 12月 1 15:14 fsimage_0000000000000000202
-rw-rw-r--. 1 pxj pxj 62 12月 1 15:14 fsimage_0000000000000000202.md5
-rw-rw-r--. 1 pxj pxj 1880 12月 1 23:47 fsimage_0000000000000000203
-rw-rw-r--. 1 pxj pxj 62 12月 1 23:47 fsimage_0000000000000000203.md5
-rw-rw-r--. 1 pxj pxj 4 12月 1 23:47 seen_txid
-rw-rw-r--. 1 pxj pxj 206 12月 1 23:47 VERSION
作用:
管理文件系统的命名空间。维护文件系统树的所有文件和文件夹。
这些信息以两个文件形式永久的保存在本地磁盘上:
镜像文件fsimage
编辑日志文件editlog
Datanode: 从 dn
存储:数据块和数据块校验和与NN通信
a.每隔3s发送心跳包给 nn,我还活者
dfs.heartbeat.interval 3
b.每隔一定的时间发生一次 blockreport
dfs.blockreport.intervalMsec 21600000ms=6h
dfs.datanode.directoryscan.interval 21600s=6h
hdfs debug
[pxj@pxj31 /tmp/hadoop-pxj/dfs/name/current]$hdfs debug
Usage: hdfs debug <command> [arguments]
These commands are for advanced users only.
Incorrect usages may result in data loss. Use at your own risk.
verifyMeta -meta <metadata-file> [-block <block-file>]
computeMeta -block <block-file> -out <output-metadata-file>
recoverLease -path <path> [-retries <num-retries>]
所在位置
[pxj@pxj31 /tmp/hadoop-pxj/dfs/data/current/BP-1997438793-192.168.25.31-1575134786543]$ll
总用量 4
drwxrwxr-x. 4 pxj pxj 64 12月 1 16:12 current
-rw-rw-r--. 1 pxj pxj 166 12月 1 01:30 scanner.cursor
drwxrwxr-x. 2 pxj pxj 6 12月 1 23:48 tmp
手动恢复【需要补充】
[ruoze@ruozedata001 current]$ hdfs debug recoverLease -path xxx -retries 10
自动恢复
待搭建集群后补充
但是有可能: 手动修复 + 自动修复都是失败的
数据仓库 数据质量 数据重刷机制
参考网站:
https://ruozedata.github.io/2019/06/06/%E7%94%9F%E4%BA%A7HDFS%20Block%E6%8D%9F%E5%9D%8F%E6%81%A2%E5%A4%8D%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5(%E5%90%AB%E6%80%9D%E8%80%83%E9%A2%98)/
SecondaryNamenode SNN(h+1机制)
1.存储: fsimage+editlog
2.作用: 定期合并 fsimage+editlog文件作为新的fsimage,推送给NN,
简称为checkpoint 检查点
检查点的设置配置
dfs.namenode.checkpoint.period 3600s
dfs.namenode.checkpoint.txns 1000000
备份机制原理图:
NN
edits_0000000000000000306-0000000000000000307
edits_0000000000000000308-0000000000000000324
edits_inprogress_0000000000000000325
fsimage_0000000000000000307
fsimage_0000000000000000307.md5
fsimage_0000000000000000324
fsimage_0000000000000000324.md5
SNN
edits_0000000000000000302-0000000000000000303
edits_0000000000000000304-0000000000000000305
edits_0000000000000000306-0000000000000000307
edits_0000000000000000308-0000000000000000324
fsimage_0000000000000000307
fsimage_0000000000000000307.md5
fsimage_0000000000000000324
fsimage_0000000000000000324.md5
fsimage_0000000000000000307 + edits_0000000000000000308-0000000000000000324
==>fsimage_0000000000000000324
解释部分:
第一步:NN先复制一份新的从edits_0000000000000000203-0000000000000000203成 edits_inprogress_0000000000000000204,并传到SNN的
edits_0000000000000000201-0000000000000000202
第二步:SNN的edit和fs进行合并成新的edits_0000000000000000201-0000000000000000202+fsimage_0000000000000000202=fsimage_0000000000000000202
第三步:fsimage_0000000000000000202+edits_inprogress_0000000000000000204=fsimage_0000000000000000203
总结:
1.roll edit
2.传输 fsimage+edits
3.merge
4.传输 fsimage.ckpt to nn
5.回滚 fsimage.ckpt==》fsimage
edit.new==> edit
改变HDFS的存储目录/tmp目录下想要改变到 当前用户/tmp
第一步:改变权限
[pxj@pxj31 /tmp/hadoop-pxj/dfs/namesecondary/current]$chmod -R 777 /home/pxj/tmp
第二步:cp /tmp
[pxj@pxj31 /tmp/hadoop-pxj/dfs/namesecondary/current]$cp -R /tmp/hadoop-pxj/dfs/ /home/pxj/tmp/
第三步:修改配置文件
[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$vim core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/home/pxj/tmp</value>
</property>
第四步:
测试:
[pxj@pxj31 /home/pxj/software]$hadoop fs -put hadoop-2.6.0-cdh5.16.2.tar.gz /
19/12/02 00:36:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj/software]$hadoop fs -ls /
19/12/02 00:37:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 3 items
drwxr-xr-x - pxj supergroup 0 2019-12-01 14:32 /a
-rw-r--r-- 1 pxj supergroup 434354462 2019-12-02 00:37 /hadoop-2.6.0-cdh5.16.2.tar.gz
drwx------ - pxj supergroup 0 2019-12-01 13:06 /tmp
[pxj@pxj31 /home/pxj/tmp/dfs/name/current]$ll
总用量 8264
-rw-rw-r--. 1 pxj pxj 42 12月 2 00:31 edits_0000000000000000001-0000000000000000002
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000003-0000000000000000003
-rw-rw-r--. 1 pxj pxj 42 12月 2 00:31 edits_0000000000000000004-0000000000000000005
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000006-0000000000000000015
-rw-rw-r--. 1 pxj pxj 12352 12月 2 00:31 edits_0000000000000000016-0000000000000000119
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000120-0000000000000000120
-rw-rw-r--. 1 pxj pxj 42 12月 2 00:31 edits_0000000000000000121-0000000000000000122
-rw-rw-r--. 1 pxj pxj 8813 12月 2 00:31 edits_0000000000000000123-0000000000000000196
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000197-0000000000000000197
-rw-rw-r--. 1 pxj pxj 42 12月 2 00:31 edits_0000000000000000198-0000000000000000199
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000200-0000000000000000200
-rw-rw-r--. 1 pxj pxj 42 12月 2 00:31 edits_0000000000000000201-0000000000000000202
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000203-0000000000000000203
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:31 edits_0000000000000000204-0000000000000000204
-rw-rw-r--. 1 pxj pxj 1048576 12月 2 00:37 edits_inprogress_0000000000000000205
-rw-rw-r--. 1 pxj pxj 1880 12月 2 00:31 fsimage_0000000000000000202
-rw-rw-r--. 1 pxj pxj 62 12月 2 00:31 fsimage_0000000000000000202.md5
-rw-rw-r--. 1 pxj pxj 1880 12月 2 00:31 fsimage_0000000000000000203
-rw-rw-r--. 1 pxj pxj 62 12月 2 00:31 fsimage_0000000000000000203.md5
-rw-rw-r--. 1 pxj pxj 4 12月 2 00:33 seen_txid
-rw-rw-r--. 1 pxj pxj 206 12月 2 00:31 VERSION
[pxj@pxj31 /home/pxj/tmp/dfs/name/current]$