HDFS的文件拷贝
1、将本地的文件远程拷贝对对方主机
scp -r /root/test/ root@192.168.88.161:/root/ #拷贝目录
scp /root/test/a.txt root@192.168.88.161:/root/ #拷贝文件
scp /root/test/a.txt 192.168.88.161:/root/ #简化写法
2、将远程主机的文件拉取到本主机
scp -r root@192.168.88.161:/root/ /root/test/ #拉取目录
scp root@192.168.88.161:/root/ /root/test/a.txt #拉取文件
scp 192.168.88.161:/root/ /root/test/a.txt #简化写法
3、集群的hdfs之间进行文件拷贝
hadoop distcp hdfs://node1:8020/a.txt hdfs://node8:8020/dir
(重点)Arichive机制
-
概念
1、Arichive文件是一个打包文件,但是不会对文件进行压缩 2、Arichive文件归档之后,我们还可以透明的访问其中的每一个小文件 3、Archive主要解决HDFS不擅长存储小文件问题 4、Archive过程是一个MapReduce任务 5、Archive之后,原来的文件依然保留
-
操作
0、数据准备 hadoop fs -mkdir /config cd /export/server/hadoop-3.3.0/etc/hadoop hadoop fs -put *.xml /config 1、创建一个归档文件 #将/config目录的所有文件进行归档(打包),打包后的文件命名为test.har,并且把打包后的test.har存放在/outputdir目录 hadoop archive -archiveName test.har -p /config /outputdir 2、查看打包后的归档文件 hadoop fs -cat /outputdir/test.har/part-0 3、查看规定文件中所有小文件的名字 hadoop fs -ls har://hdfs-node1:8020/outputdir/test.har hadoop fs -ls har:///outputdir/test.har #如果客户端也是集群的某台主机,可以使用该简写方案 4、查看归档文件中某个小文件的内容 hadoop fs -cat har:///outputdir/test.har/core-site.xml
HDFS的权限
1、HDFS的权限有一个总开关,在hdfs-site.xml中,该开关开启,权限就会起作用
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
2、修改HDFS的权限
hadoop fs -chmod 777 /a.txt
、
(重点)HDFS的动态扩容和缩容
-
概念
1、在不影响当前集群正常运行的情况下,对集群的主机的数量进行增加或者减少
-
操作步骤1-动态上线
1、准备一台机器:node4,该机器要满足以下条件: 1)设置ip: 192.168.88.164 2)设置主机名: node4 3)安装已经安装JDK 4)设置时钟同步 5)关闭防火墙 2、在三台机器上设置域名映射 192.168.88.161 node1 node1.itcast.cn 192.168.88.162 node2 node2.itcast.cn 192.168.88.163 node3 node3.itcast.cn 192.168.88.164 node4 node4.itcast.cn 3、构建node4和其他主机的免密登录 3.1 在node4上生成公钥和私钥:ssh-keygen -t rsa 3.2 在node4上将公钥发送给node1:ssh-copy-id node1 3.3 在node1上将新的公钥发送给所有主机 scp /root/.ssh/authorized_keys node2:/root/.ssh scp /root/.ssh/authorized_keys node3:/root/.ssh scp /root/.ssh/authorized_keys node4:/root/.ssh 4、在node1中,编辑文件/export/server/hadoop-3.3.0/etc/hadoop/workers node1 node2 node3 node4 5、在node1上,将配置好的hadoop分发给node4 scp -r /export/server/hadoop-3.3.0/ node4:/export/server/ 6、在node4上配置/etc/profile环境变量,然后记着source export HADOOP_HOME=/export/server/hadoop-3.3.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 7、在node4,启动datanode hdfs --daemon start datanode 8、访问http://node1:9870页面的Datanodes菜单查看 9、在node1上设置DataNode负载均衡服务 hdfs dfsadmin -setBalancerBandwidth 104857600 #设置带宽 #设置负载均衡的意义:如果不同主机之间的存储比率超过%5,HDFS会自动的进行BLock块的再平衡 hdfs balancer -threshold 5 #设置负载均衡
-
操作步骤2-动态下线
1、编辑node1上配置文件,将node4添加到该文件,从此node4就上了集群的黑名单 vim /export/server/hadoop-3.3.0/etc/hadoop/excludes 2、在node1上,执行刷新命DataNode命令 hdfs dfsadmin -refreshNodes 3、访问http://node1:9870页面的Datanodes菜单查看状态 #在此刻如果你还想让node4上线,则需要去/export/server/hadoop-3.3.0/etc/hadoop/excludes文件删除node4,让它离开黑名单,然后刷新HDFS:hdfs dfsadmin -refreshNodes 即可 4、在node4上,关闭datanode hdfs --daemon stop datanode 5、在node1上,实现负载均衡 hdfs balancer -threshold 5
(重点)HDFS的高可用
HDFS3.0的纠删码机制
-
概述
1、传统的HDFS需要使用文件本身3倍的空间来存储数据,保证数据的可靠性 2、能不能有一种方法,既能不占用太多的冗余空间,又能保证可靠性,该方法就是纠删码机制 3、纠删码机制是Hadoop3.0以后加入的
-
纠删码操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXSn0xeX-1663574182206)(HDFS框架.assets/image-20220917163637510.png)]
1、策略解释 RS-10-4-1024k:使用RS编码,每10个数据单元(cell),生成4个校验单元,共14个单元,也就是说:这14个单元中,只要有任意的10个单元存在(不管是数据单元还是校验单元,只要总数=10),就可以得到原始数据。每个单元的大小是1M。 2、操作 2.1 查看当前系统支持的纠删码策略 hdfs ec -listPolicies #默认所有的纠删码策略都是关闭的 2.2 设置纠删码 #HDFS的纠删码是对目录进行设置的,通俗的讲,你需要对某一个目录设置纠删码 hdfs dfs -mkdir /rs-6-3 #在HDFS上创建测试目录 hdfs ec -getPolicy -path /rs-6-3 #查看该目录是否设置了纠删码 hdfs ec -enablePolicy -policy RS-6-3-1024k #启用纠删码 hdfs ec -setPolicy -path /rs-6-3 -policy RS-6-3-1024k #设置纠删码策略 9丢3 hdfs ec -getPolicy -path /rs-6-3 #查看是否设置成功 #执行该命令之后,发现不能成功,是因为当前的系统和Hadoop不支持ISA-L加速器 #需要做两件事:1、给三台虚拟机安装ISA-L加锁器 2、对Hadoop #源码重新编译,让其支持ISA-L加速器 #可以参考安装和编译文档 hadoop fs -put 1.txt /rs-6-3 解释: [root@node1 ~]# hdfs ec -listPolicies RS-10-4-1024k:必须保证有14台主机 RS-3-2-1024k: 必须保证有5台主机 RS-6-3-1024k: 必须保证有9台机器 XOR-2-1-1024k:必须保证有3个机架