HDFS设计的主要目的是对海量数据进行处理,也就是说在其上能够储存很大量文件,HDFS提供多种的访问的策略,首先我们来认识其通过shell接口的访问方式。
hdfs shell与linux命令基本相同。
代码语言:javascript复制创建文件夹
hdfs dfs -mkdir /data
上传文件
hdfs dfs -put me.txt /data
//保留原文件
hdfs dfs -copyFromLocal weibo.txt /middle/weibo
//不保留原文件
hdfs dfs -moveFromLocal weibo.txt /middle/weibo
查看文件内容
hadoop dfs -text /middle/weibo/weibo.txt
文件复制到本地
hdfs dfs -get /middle/weibo/weibo.txt
hadoop fs -copyToLocal /middle/weibo/weibo.txt
删除文件或文件夹
hadoop fs -rmr /middle/weibo
集群间传数据
hadoop distcp hdfs://qq58053439:9000/weather hdfs://qq:9000/middle
HDFS fsck
- move: 移动损坏的文件到/lost found目录下
- delete: 删除损坏的文件
- openforwrite: 输出检测中的正在被写的文件
- list-corruptfileblocks: 输出损坏的块及其所属的文件
- files: 输出正在被检测的文件
- blocks: 输出block的详细报告 (需要和-files参数一起使用)
- locations: 输出block的位置信息 (需要和-files参数一起使用)
- racks: 输出文件块位置所在的机架信息(需要和-files参数一起使用
查看HDFS中某个文件的块block分布
代码语言:javascript复制hadoop fsck /your_file_path -files -blocks -locations -racks
检测存在那些坏块
代码语言:javascript复制 hdfs fsck /
删除坏块
代码语言:javascript复制hdfs fsck / -delete
HDFS balancer
机器其实非常容易出现机器与磁盘利用率不平衡的情况,比如在集群中添加新的数据节点。机器与磁盘利用率不平等会导致很多问题,比如程序无法更好的利用本地计算机的优势。
HDFS balancer可以使计算机达到平衡状态,如果磁盘利用率偏差小于10%,我们认为达到了平衡状态。可以使用下面命令
代码语言:javascript复制$HADOOP_HOME/bin/start-balancer.sh –t 10
另外需要注意的地方是,由于HDFS需要启动单独的Rebalance Server来执行Rebalance操作,所以尽量不要在NameNode上执行start-balancer.sh,而是找一台比较空闲的机器。 1) hadoop balance工具的用法: To start: bin/start-balancer.sh [-threshold <threshold>] Example: bin/ start-balancer.sh start the balancer with a default threshold of 10% bin/ start-balancer.sh -threshold 5 start the balancer with a threshold of 5%
To stop: bin/ stop-balancer.sh 影响hadoop balance工具的几个参数:
-threshold 默认设置:10,参数取值范围:0-100,参数含义:判断集群是否平衡的目标参数,每一个 datanode 存储使用率和集群总存储使用率的差值都应该小于这个阀值 ,理论上,该参数设置的越小,整个集群就越平衡,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。 dfs.balance.bandwidthPerSec 默认设置:1048576(1 M/S),参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢
加入和移除Datanode
增加
- 在一个节点中安装已存在的datanode安装包
- 如果需要连接yarn需要在yarn-site.xml文件中添加参数yarn.resourcemanager.nodes.include-path指定的文件中添加需要添加的NodeManager
- sbin/hadoop-deamon.sh start datanode
- yarn-daemon.sh start nodemanager
- hadoop dfsadmin
- report的输出来确定新节点是否已连接
删除
- 将datanode加入黑名单中,配置在dfs.hosts.exclude中
- bin/hadoop dfsadmin -refreshNodes
添加或者删除DataNode后,可能会需要调节已上传文件的副本数:
- hadoop fs -setrep -R replicationNumber /