1.hdfs命令
hdfs dfs -linux命令 操作是一样的
hadoop fs <==>hdfs dfs 等价的
2.查看当前版本 压缩情况
[ssn@localhost hadoop]$ hadoop checknative
2021-12-17 04:32:58,241 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
2021-12-17 04:32:58,247 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
2021-12-17 04:32:58,255 WARN zstd.ZStandardCompressor: Error loading zstandard native libraries: java.lang.InternalError: Cannot load libzstd.so.1 (libzstd.so.1: cannot open shared object file: No such file or directory)!
2021-12-17 04:32:58,265 WARN erasurecode.ErasureCodeNative: ISA-L support is not available in your platform... using builtin-java codec where applicable
2021-12-17 04:32:58,398 INFO nativeio.NativeIO: The native code was built without PMDK support.
Native library checking:
hadoop: true /home/ssn/app/hadoop-3.2.2/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
zstd : false
snappy: true /lib64/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: false libhadoop was built without ISA-L support
PMDK: false The native code was built without PMDK support.
如果压缩是false,一般需要自己编译,去支持压缩的
比如:
3.打印当前大数据环境类的路径
[ssn@localhost hadoop]$ hadoop classpath
/home/ssn/app/hadoop/etc/hadoop:/home/ssn/app/hadoop/share/hadoop/common/lib/*:/home/ssn/app/hadoop/share/hadoop/common/*:/home/ssn/app/hadoop/share/hadoop/hdfs:/home/ssn/app/hadoop/share/hadoop/hdfs/lib/*:/home/ssn/app/hadoop/share/hadoop/hdfs/*:/home/ssn/app/hadoop/share/hadoop/mapreduce/lib/*:/home/ssn/app/hadoop/share/hadoop/mapreduce/*:/home/ssn/app/hadoop/share/hadoop/yarn:/home/ssn/app/hadoop/share/hadoop/yarn/lib/*:/home/ssn/app/hadoop/share/hadoop/yarn/*
4.安全模式
hdfs dfsadmin [-safemode <enter | leave | get | wait>]
安全模式关闭:off状态,读写正常
查询log(日志)查看到safemode:on状态,必然集群是有问题的,这个时候可以手动从安全模式离开,就能正常提供服务了
安全模式下:可以读,不可以写
进入安全模式:
hdfs dfsadmin -safemode enter
离开安全模式
hdfs dfsadmin -safemode leave
做集群维护的时候,目标是不要有数据的写入,就可以进入安全模式
5.查看集群的状况
hdfs fsck /
The filesystem under path '/' is CORRUPT 受损
The filesystem under path '/' is HEALTHY 健康
6.集群平衡
DN1 DN2节点和节点之间的平衡
DN1:/data01 /data02 单个节点多盘的平衡(Hadoop2版本无此功能,Hadoop3版本有)
[ssn@localhost sbin]$ hdfs balancer -policy datanode -threshold 10
threshold 10.0 :
每个节点磁盘使用率-平均磁盘使用率<10%
举例:
DN1 90%-76%=14% 多了4%
DN2 80%-76%=4% 满足
DN3 60%-76%=-16% 少了16%
生产上:每天晚上业务低估时期,定时执行该脚本
官方是有脚本存在的
[ssn@localhost ~]cd /home/ssn/app/hadoop/sbin
[ssn@localhost sbin]cat start-balancer.sh
单个节点和多盘的平衡:
hdfs diskbalancer
命令帮助
dfs:disk.balancer.enabled : true
执行命令:先生产计划,再执行计划
hdfs diskbalancer -plan localhost
hdfs diskbalancer -execute localhost.plan.json
7.回收站
linux没有回收站,非要做回收站,如何实现?
[ssn@localhost hadoop]$ which rm
/bin/rm
a.狸猫换太子
官方文档配置参数 ,单位是分钟
生产上必须配置
保存7天参数配置:
[ssn@localhost ~]$ cd app/hadoop/etc/hadoop/
[ssn@localhost hadoop]$ vi core-site.xml
追加 <property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
配置完成,重启hadoop服务
测试:
[ssn@localhost hadoop]$ hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 1 ssn supergroup 51 2021-12-16 19:01 /test/1.log
[ssn@localhost hadoop]$ hdfs dfs -rm /test/1.log
2021-12-17 19:25:48,084 INFO fs.TrashPolicyDefault: Moved: 'hdfs://localhost:9000/test/1.log' to trash at: hdfs://localhost:9000/user/ssn/.Trash/Current/test/1.log
[ssn@localhost hadoop]$
[ssn@localhost hadoop]$ hdfs dfs -ls hdfs://localhost:9000/user/ssn/.Trash/Current/test/1.log
-rw-r--r-- 1 ssn supergroup 51 2021-12-16 19:01 hdfs://localhost:9000/user/ssn/.Trash/Current/test/1.log
[ssn@localhost hadoop]$ hdfs dfs -cat hdfs://localhost:9000/user/ssn/.Trash/Current/test/1.log
Eason
ssn
13
19zx
18lianwu
a b c d e
www.baidu.com
8.mapreduce
计算框架
map 映射:是指一组数据按照一定的规则映射成一组
reduce 规约:
举SQL例说明:
SQL:
id name
1 a
2 b
3 c
4 d
映射 select id +10,name from t;
规约 select name,sum(id)
from(
select id+10 as id,name from t
)group by name;
【shuffle 洗牌】:数据按照key进行网络传输规整一起,按照计算规则计算。
9.mapreduce on yarn架构设计
a.container 容器 虚拟化概念
是一定的内存和CPU的资源组合
b.主从架构
ResourceManager RM
NodeManager NM
reduce task 可能等到所有的map task跑完,才开始计算
也有可能 map task才跑到60%,就开始计算。主要看计算逻辑的嵌套。
9.2.1
client向rm提交应用程序(作业),其中包含application master和启动命令等;
9.2.2
applications manager会给这个作业,分配第一个container容器,来运行applicationmaster。
9.2.3
application master就向applications manager注册,就可以在web界面查看作业的运行状态。
9.2.4
application master采取轮询的方式通过【RPC】协议向resource scheduler去申请和领取资源
(哪台DN机器,领取多少内存 CPU)
9.2.5
一旦application master拿到资源列表,就和对应的DN机器进行通信,要求启动container来运行task任务。
9.2.6
nm为task任务设置好运行的环境(container容器),将任务启动命令写在脚本里,通过脚本启动task。
9.2.7
然后各个task任务,通过【rpc】协议向application master主程序汇报进度和状态,以此可以随时掌握task的运行状态。
当task任务运行失败,也会重启container任务。
9.2.8
当所有的任务完成,application master向applications manager申请注销和关闭作业。
这个时候在web可以看任务是否完成,成功还是失败。
总结:
启动主程序,领取资源;1-4
运行任务,直到完成; 5-8