hadoop读写流程、副本机制、安全模式、平衡节点

一、副本放置策略

如图:

在这里插入图片描述
解释:
第一个副本:
假如上传节点为DN节点,优先放置本节点;
否则就随机挑选一台磁盘不太慢 CPU不太繁忙的节点;

第二个副本:
放置在于第一个副本的不同的机架的节点上

第三个副本:
放置于第二个副本相同机架的不同节点上

CDH机架有一个默认机架 虚拟的概念;
CDH一般不调整这种默认机架

二、HDFS读写流程

写流程

如图:
在这里插入图片描述
解释:
hadoop fs -put xxx.log /
无感知
FSDataOutputStream

1.第一步

Client调用FileSystem.create(filePath)方法,
与NN进行【rpc】通信,check是否存在及是否有权限创建;
假如不ok,就返回错误信息;
假如ok,就创建一个新文件,不关联任何的block块,返回
一个FSDataOutputStream对象;

2.第二步:

Client调用FSDataOutputStream对象的write()方法,
先将第一块的第一个副本写到第一个DN,第一个副本写完;
就传输给第二个DN,第二个副本写完;
就传输给第三个DN,第三个副本写完。

就返回一个ack packet确认包给第二个DN,第二个DN接收到
第三个的ack packet确认包加上自身ok,就返回一个ack packet确认包
给第一个DN,第一个DN接收到
第二个DN的ack packet确认包加上自身ok,就返回ack packet确认包
给FSDataOutputStream对象,标志第一个块 3个副本写完。

然后余下的块依次这样写;

第三步

当向文件写入数据完成后,
Client调用FSDataOutputStream.close()方法,关闭输出流。
再调用FileSystem.complete()方法,告诉NN该文件写入成功。

读流程

在这里插入图片描述
解释:

Client调用FSDataInputStream对象read()方法;
a.与第一个块最近的DN进行read,读取完成后,会check;
假如ok,就关闭与当前DN的通信;假如失败,会记录
失败块+DN信息,下次不会再读取;那么会去该块的
第二个DN地址读取。
b.然后去第二个块的最近的DN上通信读取,check后,关闭通信。
c.假如block列表读取完成后,文件还未结束,
就再次FileSystem会从NN获取该文件的下一批次的block列表。
(感觉就是连续的数据流,对于客户端操作是透明无感知的)
d.Client调用FSDataInputStream.close()方法,关闭输入流。

三、pid文件

没修改配置文件时,默认在/tmp下,但由于Linux系统存在clear机制(一个月删除),PID文件影响程序的启动和关闭

mkdir /home/pxj/tmp
chmod -R 777 /home/pxj/tmp
hadoop-env.sh
export HADOOP_PID_DIR=/home/pxj/tmp

yarn-env.sh
export YARN_PID_DIR=/home/pxj/tmp

四、常规命令

hadoop fs==> hdfs dfs
[-cat [-ignoreCrc] …]
[-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…]
[-chown [-R] [OWNER][:[GROUP]] PATH…]

[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [ …]]

[-put [-f] [-p] [-l] … ]
[-get [-p] [-ignoreCrc] [-crc] … ]
[-copyFromLocal [-f] [-p] [-l] … ]
[-copyToLocal [-p] [-ignoreCrc] [-crc] … ]

[-rm [-f] [-r|-R] [-skipTrash] …]

hadoop fs -cat
[pxj@pxj31 /home/pxj]$hadoop fs -cat /a/1.log
19/12/07 21:58:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
pxj
wfy
cdr
lzh
zcl
zmj
lx
bjs
crh
dd
yy
kk
llll
uu
pp
jjj
hadoop fs -chmod
[pxj@pxj31 /home/pxj]$hadoop fs -ls /
19/12/07 22:00:12 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 4 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
drwxr-xr-x   - pxj supergroup          0 2019-12-07 22:00 /test
drwx------   - pxj supergroup          0 2019-12-01 13:06 /tmp
[pxj@pxj31 /home/pxj]$hadoop fs -chmod 777 /test
19/12/07 22:01:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$hadoop fs -ls /test
19/12/07 22:01:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$

[pxj@pxj31 /home/pxj]$hadoop fs -ls /
19/12/07 22:00:12 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 4 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
drwxr-xr-x   - pxj supergroup          0 2019-12-07 22:00 /test
drwx------   - pxj supergroup          0 2019-12-01 13:06 /tmp
hadoop fs -chmod
[pxj@pxj31 /home/pxj]$hadoop fs -chmod 777 /test
19/12/07 22:01:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$hadoop fs -ls /test
19/12/07 22:01:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$
hadoop fs -ls
[pxj@pxj31 /home/pxj]$hadoop fs -ls /
19/12/07 22:00:12 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 4 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
drwxr-xr-x   - pxj supergroup          0 2019-12-07 22:00 /test
drwx------   - pxj supergroup          0 2019-12-01 13:06 /tmp
hadoop fs -chown -R
[pxj@pxj31 /home/pxj]$hadoop fs -chown -R wfy:wfy /test
19/12/07 22:04:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$hadoop fs -ls  /
19/12/07 22:04:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 4 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
drwxrwxrwx   - wfy wfy                 0 2019-12-07 22:00 /test
drwx------   - pxj supergroup          0 2019-12-01 13:06 /tmp

hadoop fs -put
[pxj@pxj31 /home/pxj]$hadoop fs -put slaves1  /test
19/12/07 22:11:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$hadoop fs -ls  /test
19/12/07 22:11:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rw-r--r--   1 pxj wfy          6 2019-12-07 22:11 /test/slaves1
hadoop fs -get
[pxj@pxj31 /home/pxj]$hadoop fs -get /test/slaves1 ./aa
19/12/07 22:13:35 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$ll
总用量 8
-rw-r--r--. 1 pxj pxj   6 12月  7 22:13 aa
drwxrwxr-x. 3 pxj pxj  50 12月  1 00:40 app
drwxrwxr-x. 2 pxj pxj  19 12月  1 13:01 data
drwxrwxr-x. 2 pxj pxj   6 12月  1 00:05 lib
drwxrwxr-x. 2 pxj pxj   6 12月  1 00:05 log
-rw-r--r--. 1 pxj pxj   6 12月  1 01:49 slaves1
drwxrwxr-x. 2 pxj pxj  43 12月  1 00:37 software
drwxrwxr-x. 2 pxj pxj   6 12月  1 00:05 sourcecode
drwxrwxrwx. 4 pxj pxj 207 12月  7 19:50 tmp
hadoop fs -copyFromLocal
[pxj@pxj31 /home/pxj]$hadoop fs -copyFromLocal slaves1  /test/slaves27
19/12/07 22:16:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$hadoop fs -ls /test
19/12/07 22:16:58 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 pxj wfy          6 2019-12-07 22:11 /test/slaves1
-rw-r--r--   1 pxj wfy          6 2019-12-07 22:16 /test/slaves27
hadoop fs -copyToLocal
[pxj@pxj31 /home/pxj]$hadoop fs -copyToLocal /test/slaves27 ./test_copy
19/12/07 22:18:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[pxj@pxj31 /home/pxj]$ll
总用量 12
-rw-r--r--. 1 pxj pxj   6 12月  7 22:13 aa
drwxrwxr-x. 3 pxj pxj  50 12月  1 00:40 app
drwxrwxr-x. 2 pxj pxj  19 12月  1 13:01 data
drwxrwxr-x. 2 pxj pxj   6 12月  1 00:05 lib
drwxrwxr-x. 2 pxj pxj   6 12月  1 00:05 log
-rw-r--r--. 1 pxj pxj   6 12月  1 01:49 slaves1
drwxrwxr-x. 2 pxj pxj  43 12月  1 00:37 software
drwxrwxr-x. 2 pxj pxj   6 12月  1 00:05 sourcecode
-rw-r--r--. 1 pxj pxj   6 12月  7 22:18 test_copy
drwxrwxrwx. 4 pxj pxj 207 12月  7 19:50 tmp

开启回收站

[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$vim core-site.xml 
<property>
        <name>hadoop.tmp.dir</name>
        <value>70000</value>
    </property>
切记检查生产环境是否开启回收站,CDH默认是开启的
开了回收站,慎用 -skipTrash
hdfs dfs -put -skipTrash /rz.log
hadoop fs -rm
[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hadoop fs  -rm /test/slaves1
19/12/07 22:51:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/12/07 22:51:36 INFO fs.TrashPolicyDefault: Moved: 'hdfs://pxj31:9000/test/slaves1' to trash at: hdfs://pxj31:9000/user/pxj/.Trash/Current/test/slaves1
[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hadoop fs -ls /user/pxj/.Trash/Current/test/
19/12/07 22:52:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rw-r--r--   1 pxj wfy          6 2019-12-07 22:11 /user/pxj/.Trash/Current/test/slaves1

跳过垃圾回收站

[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hadoop fs -rm  -skipTrash   /test/slaves27
19/12/07 22:53:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Deleted /test/slaves27

五、安全模式

如果NN log显示 进入 safe mode,
正常手动让其离开安全模式。很少做
进入安全模式

[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hdfs dfsadmin -safemode enter
19/12/07 22:57:43 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Safe mode is ON
[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hadoop fs  -put core-site.xml  /
19/12/07 22:59:28 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: Cannot create file/core-site.xml._COPYING_. Name node is in safe mode.
[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hadoop fs -cat /a/1.log
19/12/07 23:00:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
pxj
wfy
cdr
lzh
zcl
zmj
lx
bjs
crh
dd
yy
kk
llll
uu
pp
jjj

结论:安全模式:只对写有影响

离开安全模式

[pxj@pxj31 /home/pxj/app/hadoop/etc/hadoop]$hdfs dfsadmin -safemode leave
19/12/07 23:01:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Safe mode is OFF

集群健康

hdfs fsck

[pxj@pxj31 /home/pxj]$hdfs fsck /

19/12/08 00:44:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connecting to namenode via http://pxj31:50070/fsck?ugi=pxj&path=%2F
FSCK started by pxj (auth:SIMPLE) from /192.168.25.31 for path / at Sun Dec 08 00:44:30 CST 2019
...........Status: HEALTHY
 Total size:    434731430 B
 Total dirs:    17
 Total files:   11
 Total symlinks:        0
 Total blocks (validated):  13 (avg. block size 33440879 B)
 Minimally replicated blocks:   13 (100.0 %)
 Over-replicated blocks:    0 (0.0 %)
 Under-replicated blocks:   0 (0.0 %)
 Mis-replicated blocks:     0 (0.0 %)
 Default replication factor:    1
 Average block replication: 1.0
 Corrupt blocks:        0
 Missing replicas:      0 (0.0 %)
 Number of data-nodes:      1
 Number of racks:       1
FSCK ended at Sun Dec 08 00:44:30 CST 2019 in 23 milliseconds
重点关注:

Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
各DN节点的数据均衡
剖析[pxj@pxj31 /home/pxj/app/hadoop/sbin] . / s t a r t − b a l a n c e r . s h 脚 本 真 正 执 行 的 关 键 在 : " ./start-balancer.sh 脚本 真正执行的关键在:" ./startbalancer.sh"HADOOP_PREFIX"/sbin/hadoop-daemon.sh --config H A D O O P C O N F D I R − − s c r i p t " HADOOP_CONF_DIR --script " HADOOPCONFDIRscript"bin"/hdfs start balancer $@
阀值:threshold = 10.0
举例:90+60+80=230/3=76%
所有节点的磁盘used与集群的平均used之差要小于这个阈值
90-76=14
60-76=16
80-76=4
在这里插入图片描述

设置阀值:
dfs.datanode.balance.bandwidthPerSec 30m(带宽生产)
执行:执行完会自动结束

[pxj@pxj31 /home/pxj/app/hadoop/sbin]$./start-balancer.sh 
[pxj@pxj31 /home/pxj/app/hadoop/sbin]$./start-balancer.sh -threshold 5
starting balancer, logging to /home/pxj/app/hadoop-2.6.0-cdh5.16.2/logs/hadoop-pxj-balancer-pxj31.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
[pxj@pxj31 /home/pxj/app/hadoop/sbin]$stop-balancer.sh
no balancer to stop

在生产上建议操作(需要根据实际情况):
crontab job 每天凌晨20分调度
每天调度,数据平衡 毛刺修正
一个DN节点的多个磁盘的数据均衡
参考网站:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSDiskbalancer.html
df -h
/data01 90%
/data02 60%
/data03 80%
/data04 0%

dfs.disk.balancer.enabled must be set to true in hdfs-site.xml.

hdfs diskbalancer -plan pxj31001 生成pxj31.plan.json
hdfs diskbalancer -execute pxj31.plan.json 执行
hdfs diskbalancer -query pxj31001 查询状态

什么时候手动或调度执行?
a.新盘加入
b.监控服务器的磁盘剩余空间 小于阈值 10%,发邮件预警 手动执行

dfs.datanode.data.dir /data01,/data02,/data03,/data04 comma-delimited

为什么 DN的生产上挂载多个物理的磁盘目录
/data01 disk1
/data02 disk2
/data03 disk3
为了高效率写 高效率读
提前规划好2-3年存储量 ,避免后期加磁盘维护的工作量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值