HDFS 命令

hdfs常用命令
1.查看hdfs根目录-ls
# 标准写法
hadoop fs -ls hdfs://ns1/
# 简写(推荐)
hadoop fs -ls /
# -h: 自适应显示文件大小
hadoop fs -ls -h /
# -R: 递归显示某一个目录下都有哪些文件
hadoop fs -ls -R /
2.上传文件到hdfs -put
# 上传linux本地文件到hdfs根路径
hadoop fs -put demo.txt /
# 还可以在上传文件(单个文件)的时候改名字
hadoop fs -put demo.txt /1.txt
hadoop fs -put demo.txt /student/demo.aaa
# 支持多文件上传
echo "hello world" >a.txt
echo "nihao xiaoyao" >b.txt
ll
hadoop fs -put a.txt b.txt /student
# 上传目录
mkdir ceshi
cd ceshi/
echo "hello" > aa.txt
echo "world" > bb.txt
ll
cd ..
hadoop fs -put ceshi /
​
# 覆盖上传
hadoop fs -put -f demo.log
3.hdfs写流程

客户端要把数据写入到datanode,有副本,存储多份,demo.log文件写入到s1,s2,s3,客户端要和namenode进行通信,客户端会发起rpc请求告诉namenode要上传数据,namenode就会计算文件大小和切分块数,比如是200M,就需要切分两块,第一块128M,第二块72M

不让三个副本都放在一台节点上原因:数据安全无法保证;三个副本放在一台节点上相当于覆盖,存的时候只有一块。

客户端通过给namenode发起一个rpc请求告知上传文件,namenode会根据这个文件判断hdfs中是否存过,存过会抛出异常,并且校验权限,两点都没问题的话,namenode就会返回第一块数据存放的位置。客户端就要执行写的操作,先把数据包保存到队列中,再按照就近原则的方式以packet形式写,先写给第一台节点,然后采用内部复制的形式复制给第二台和第三台,并且采用双工通道。当第三台复制完以后,会给第二台返回ack信号(告诉它写完啦),然后第二台给第一台返回ack信号,第一台再给客户端返回ack信号,此时队列中的数据包就可以删除了,如果这个过程中出现问题,那么队列中的数据包会发送给第一台,再次重新执行这个过程。

4.cat读取文件
echo "nihao hadoop" >> demo.txt
hadoop fs -put demo.txt /
hadoop fs -ls /
hadoop fs -cat /demo.txt
# cat不适合读取大文件
读流程

客户端连接namenode,发起rpc请求读取文件,namenode会检查权限并且检查文件是否存在,没有问题则会返回给客户端要读取文件所在的block块的位置。例如demo.txt,相当于切了一块(因不满足128M),一块有三个副本,分别存到三台datanode上,客户端开始读取(就近原则),读完以后会进行checksum校验(比如要读取的文件是128M,但读完以后是127M,因此需要checksum校验),如果校验不成功,那么这块数据在磁盘中可能有丢失或损坏,客户端会从其他副本再次读取,读取完接着校验,如果没问题会读取下一块数据(假设成批返回,找namenode获取下一批block块位置接着读取)

5.get下载文件/目录
# 下载hdfs文件到本地目录
hadoop fs -get /demo.txt ./
# 下载hdfs文件到本地目录并重命名
hadoop fs -get /demo.txt ./nihao.txt
6.cp拷贝文件/目录
# 从linux本地拷贝文件到hdfs需使用file:本地文件目录
hadoop fs -cp file:/home/hadoop/aa.txt /
hadoop fs -ls /
# 从hdfs内部拷贝文件
hadoop fs -cp /aa.txt /student
hadoop fs -ls /student
# 从hdfs内部拷贝文件到另一个目录并修改文件名
hadoop fs -cp /a.txt /student/demo.txt
7.mv剪切文件
# 剪切
hadoop fs -mv /b.txt /ceshi
# 查询
hadoop fs -ls /
hadoop fs -ls /ceshi
8.rm删除文件/目录
hadoop fs -rm /demo.txt
# 回收站目录/user/hadoop/.Trash/Current
# 从回收站还原
hadoop fs -mv /user/hadoop/.Trash/Current/demo.txt /
# 支持匹配模式删除txt结尾的,*代表通配符
hadoop fs -rm /student/*.txt
# 删除目录-rmdir(仅限于目录是空的),-rmr(递归删除)
hadoop fs -rmdir /student/ceshi
hadoop fs -rmr /student
# 跳过回收站直接删除
hadoop fs -rm -skipTrash /demo.txt
9.touchz创建空白文件/mkdir创建目录/tail读取文件尾部
# 创建空白文件
hadoop fs -touchz /aa.txt
​
# 同时创建多个目录
hadoop fs -mkdir /tmp1 /tmp2
# 同时创建父级目录
hadoop fs -mkdir -p /dir1/dir2/dir3
hadoop fs -mkdir -R /dir1
​
# 查看文件尾部信息(默认后1K的数据)
hadoop fs -tail /demo.txt
10.appendToFile追加写入文件
# 本地创建文件 note.txt
touch note.txt
# 写入hello
echo 'hello' >> note.txt
# 本地创建文件new.txt
touch new.txt
# 写入world
echo 'world' >> new.txt
# 将note.txt上传到hdfs中
hadoop fs -put note.txt /
# 将new.txt的内容追加到note.txt中
hadoop fs -appendToFile new.txt /note.txt
11.du获取逻辑空间文件/目录大小
# 显示hdfs根目录中各文件和文件夹大小
hadoop fs -du /
31  93  /aa.txt
2802    8406    /edits.txt
# 一个文件三个副本,第一个值是文件的大小,第二个是值是该文件在hdfs一共占用的大小
# 自适应显示hdfs根目录中各文件和文件夹大小
hadoop fs -du -h /
# 仅显示hdfs根目录大小,即各文件和文件夹大小之和
hadoop fs -du -s -h /
12.count 获取hdfs目录的物理空间信息
hadoop fs -count /
15  12  2942
# 目录的个数 文件的个数 总大小
hdfs高级命令
hadoop dfsadmin -report
-report: 查看文件系统的基本信息和统计信息
-safemode: 安全模式,安全模式是namenode的一种状态,在这种状态下,namenode不接受对元数据的更改(只读),不复制或删除块。namenode在启动时自动进入安全模式,当配置块的最小百分数满足最小副本数的条件时,会自动离开安全模式。(集群重启的时候datanode要向namenode汇报自身存储的信息,假设汇报完以后有些数据块丢失,此时整个集群就会进入安全模式,然后把丢失的数据块进行备份或复制使数据副本时刻达到三个副本,这样安全模式就会退出)
# 获取安全模式的信息
hadoop dfsadmin -safemode get
# 手动进入安全模式
hadoop dfsadmin -safemode enter
# 离开安全模式
hadoop dfsadmin -safemode leave

假设有一个文件块,一共三个副本,s1,s2,s3,datanode会向namenode发送协调报告,namenode会检查元数据信息(demo.log有1块,分别有三个副本b0-s1,b0-s2,b0-s3),等到datanode进行心跳响应时,namenode会进行校验,如果一台节点宕机,那么只收到两台节点汇报,相当于丢了一个副本的信息,此时namenode就会进入安全模式,把丢失的副本给其他服务器拷贝一份

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值