一.hdfs命令
hdfs dfs -linux命令,操作是一样的
su - hadoop001
①which hadoop ②which hdfs
hadoop 回车 hdfs 回车
hadoop与hdfs对比
对比hadoop命令和hdfs命令,发现有些不一样。
hadoop fs 等价于 hdfs dfs命令
(一).hadoop命令
1. 查看当前版本 压缩情况
hadoop checknative #查看当前版本压缩情况
当前版本压缩情况
2021-12-13 22:48:33,578 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
2021-12-13 22:48:33,583 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
2021-12-13 22:48:33,590 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-13 22:48:33,598 WARN erasurecode.ErasureCodeNative: ISA-L support is not available in your platform... using builtin-java codec where applicable
2021-12-13 22:48:33,796 INFO nativeio.NativeIO: The native code was built without PMDK support.
Native library checking:
hadoop: true /home/hadoop001/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,一般需要自己编译,支持压缩;如果使用CDH系列的,不用担心。
【注意】压缩的版本:snappy
2. hadoop classpath
hadoop classpath #打印当前类的路径
当前类的路径
/home/hadoop001/app/hadoop/etc/hadoop:/home/hadoop001/app/hadoop/share/hadoop/common/lib/*:/home/hadoop001/app/hadoop/share/hadoop/common/*:/home/hadoop001/app/hadoop/share/hadoop/hdfs:/home/hadoop001/app/hadoop/share/hadoop/hdfs/lib/*:/home/hadoop001/app/hadoop/share/hadoop/hdfs/*:/home/hadoop001/app/hadoop/share/hadoop/mapreduce/lib/*:/home/hadoop001/app/hadoop/share/hadoop/mapreduce/*:/home/hadoop001/app/hadoop/share/hadoop/yarn:/home/hadoop001/app/hadoop/share/hadoop/yarn/lib/*:/home/hadoop001/app/hadoop/share/hadoop/yarn/*
(二).hdfs命令
1.hdfs dfsadmin
hdfs dfsadmin #(管理员的命令)
hdfs dfsadmin相关命令
比如:hdfs dfsadmin -report #报告当前集群的情况
当前集群的情况
2. 安全模式
hdfs dfsadmin [-safemode <enter | leave | get | wait>]
安全模式关闭 : 读写正常
【问题】安全模式打开时,能进行读写操作吗?
答:只能读不能写
验证:
hdfs dfsadmin -safemode enter #进入安全模式
hdfs dfs -put 1.log /tmp
hdfs dfs -cat /tmp/1.log
安全模式打开与关闭对比
由此可以看出,安全模式打开的情况下,只能读不能写。
生产上,如果通过log 查看到 safemode: on,必然集群是有问题的,这个时候可以手动从安全模式离开,然后就能正常对外提供服务,具体命令如下:
hdfs dfsadmin -safemode leave #离开安全模式
做集群维护的时候,目标是不要有数据写入,那进入安全模式。另外在生产上如果block块丢失过多,会自动进入安全模式。
2.检查
hdfs fsck #对dfs做系统检查
hdfs fsck相关命令
比如显示:Target Replicas is 3 but found 1-2 live replica(s) 说明丢失1-2副本。
3.集群平衡
3.1 DN1 DN2-节点与节点之间的平衡
用cat start-balancer.sh 和cat stop-balancer.sh查看脚本
balancer run a cluster balancing utility
hdfs balancer -policy datanode -threshold 10
threshold = 10.0
这里的10代表每个节点磁盘使用率减去平均磁盘使用率最后的结果小于10%
假如
DN1 磁盘占用了 90%; -76% = 14% 多了4%
DN2 磁盘占用了80%; -76% = 4% 满足
DN3 磁盘占用了 60%
平均磁盘使用率为:76% ,对于:
DN1 90% -76% = 14% 多了4%
DN2 80% -76% = 4% 满足
DN3 60% -76% = -16% 少了 -16%
其中DN1多了4%;DN2满足小于10%的条件;DN3少了16%,然后会根据它自己的算法去均衡磁盘,均衡到阈值10%以下。一般这里面有一个shell脚本,【建议】生产上,每天晚上业务低谷时期,定时执行该脚本去均衡磁盘。
3.2 DN1内部 /data01(1T) /data02(2T)-单个节点多盘的平衡
【注意】2.x版本没有这个功能
diskbalancer Distributes data evenly among disks on a given node
默认参数设置:dfs.disk.balancer.enabled : true 【注意】2.x版本这里的默认参数是false
hdfs diskbalancer --help #命令帮助,事半功倍!!!
hdfs diskbalancer相关命令(query查询)
多看看官方文档:Hadoop – Apache Hadoop 3.3.1
执行命令: 先生成计划 再执行
hdfs diskbalancer -plan ruozedata001 #生成计划
hdfs diskbalancer -execute ruozedata001.plan.json #执行计划
4.回收站
【问题】Linux 有回收站?
答:没有,但是非要做,怎么办?
参考网站:Linux删除文件实现回收站功能 - 方面盘 - 博客园 (cnblogs.com)
hdfs是有回收站的
验证:
cd ~/data/input
hdfs dfs -put 1.log /
hdfs dfs -rm /1.log
没有配置,直接删除
配置回收站:
cd ~/app/hadoop/etc/hadoop
vi core-site.xml 进入之后,新增配置:
<property>
<name>fs.trash.interval</name>
<value>10080</value> #保留块的时间,单位:min
</property>
配置回收站
配置结束后,重新启动:
cd ~/app/hadoop
sbin/stop-dfs.sh
sbin/start-dfs.sh
【注意】重启之后可能又会自动进入到安全模式,可以通过log日志查看
ll ~/app/hadoop/logs
tail -200f xxx.log
显示:The report.....
原因:块丢失
hdfs fsck / #查看块丢失详情
hdfs dfsadmin -safemode leave #离开安全模式
验证:
hdfs dfs -put 1.log /
hdfs dfs -rm /1.log
此时删除把文件Moved到了回收站
hdfs dfs -ls hdfs://comerdata001:9000/user/hadoop001/.Trash/Current/1.log
hdfs dfs -cat hdfs://comerdata001:9000/user/hadoop001/.Trash/Current/1.log
查看回收站内容
生产上一定要配置回收站哟!!!
二.mapreduce 计算框架
map 映射: 是指一组数据按照一定的规则映射成一组
select id+10 as id ,name from t;
reduce 规约: 汇总
select name,sum(id) from
(select id+10 as id,name from t
) group by name;
例SQL:
id 1 2 3 4
name a b c d
【huffle 洗牌】: 数据按照key(group by后面的数据)进行网络传输规整到一起,按照计算规则计算。
三.mapreduce on yarn架构设计【面试题】
1. container 容器 虚拟化概念
container 容器 虚拟化概念是一定的内存和CPU的资源组合。
【问题】container容器是有几组参数进行CPU和内存配置。
2.主从架构
resourcemanager rm
nodemanager nm
【经典面试题】生产上的reduce task任务可能等到所有的map task跑完,才开始计算;
也有可能map task才跑60%,就开始计算。 主要看计算逻辑的嵌套。
3.mapreduce on yarn架构图(一主两从)
mapreduce on yarn架构图(一主两从)
【面试题】mapreduce on yarn架构流程:
①client向rm提交应用程序(作业),其中包含application master和启动命令等。
②applications manager会给这个作业,分配第一个container容器,来运行applicationmaster。
③application master就向applications manager注册,就可以在web界面查看作业的运行状态。
④application master采取轮询的方式通过【RPC】协议向resource scheduler去申请和领取资源
(哪台DN机器,领取多少内存 CPU)
⑤一旦application master拿到资源列表,就和对应的DN机器进行通信,要求启动container来运行task任务。
⑥nm为task任务设置好运行的环境(container容器),将任务启动命令写在脚本里,通过脚本启动task。
⑦然后各个task任务,通过【rpc】协议向application master主程序汇报进度和状态,以此可以随时掌握task的运行状态。
当task任务运行失败,也会重启container任务。
⑧当所有的任务完成,application master向applications manager申请注销和关闭作业。
这个时候在web可以看任务是否完成,成功还是失败。
总结:
启动主程序,领取资源;①-④
运行任务,直到完成; ⑤-⑧