HDFS命令以级MapReduce

本文深入探讨HDFS的命令、读写流程及其优缺点,包括SecondaryNameode的作用。此外,介绍了MapReduce编程思想和Hadoop自带的wordcount任务。
摘要由CSDN通过智能技术生成

1、HDFS命令

#列出hdfs目录信息
hadoop fs -ls / 
#递归列出hdfs目录信息
hadoop fs -lsr /
#在hdfs上创建目录
hadoop fs -mkdir /user/hadoop 
#上传本地文件到hdfs当中
hadoop fs -put a.txt /user/hadoop/ 
hadoop fs -get /user/hadoop/a.txt /     
#查看hdfs文件内容
hadoop fs -cat /user/hadoop/a.txt 
#删除文件、目录
hadoop fs -rm /user/hadoop/a.txt
hadoop fs -rmr /user/hadoop/a.txt 

#复制
hadoop fs -cp src dst 
#移动
hadoop fs -mv src dst 


#hadoop fs -text /user/hadoop/a.txt 
#hadoop fs -copyFromLocal localsrc dst 与hadoop fs -put功能类似。 
#hadoop fs -moveFromLocal localsrc dst 将本地文件上传到hdfs,同时删除本地文件

2、HDFS读写流程

摘要:HDFS各节点间通信使用PRC协议。首先了解什么叫RPC,为什么使用RPC。

RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

2.1 HDFS写流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Z5keCEi-1603966783241)(IMGS/写.jpg)]

客户端要向HDFS写数据,首先要跟NameNode通信以确认可以写文件并获得接收文件block的DataNode,然后客户端按顺序将文件block传递给相应DataNode,并由接收到block的DataNode负责向其他DataNode复制block副本。

1)客户端Client跟NameNode通信请求上传文件,NameNode检查目标文件是否存在,父目录是否存在

2)NameNode响应客户端,返回是否可以上传

3)Client会先对文件进行切分,比如一个block块128M,文件200M就会被切分成2个块,一个128M,一个72M。请求第一个block该传输到哪些DataNode服务器上

4)NameNode返回DataNode服务器地址。(机架感知)

5)Client请求第一台DataNode上传数据 (RPC调用,建立管道pipeline) ,第一个DataNode收到请求会继续调用第二个DataNode,然后第二个调用第三个DataNode, 将整个pipeline建立完成,逐级返回客户端。

6) 当一个block传输完成时,Client再次请求NameNode上传第二个block的服务器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQi2CJUj-1603966783245)(IMGS/写2.jpg)]

详细说明:

1、客户端访问NameNode,NameNode检查路径和权限,如果路径中有与要上传的文件重名的文件就不能上传了,不能覆盖,如果没有才创建,创建名为file.copying的临时文件;

2、NameNode触发副本放置策略,如果客户端在集群内的某一台机器,那么副本第一块放置在该服务器上,然后再另外挑两台服务器;如果在集群外,namenode会根据策略先找一个机架选出一个datanode,然后再从另外的机架选出另外两个datanode,然后namenode会将选出的三个datanode按距离组建一个顺序,然后将顺序返回给客户端;

3、客户端会根据返回的三个节点和第一个节点建立一个socket连接(只会和第一个节点建立),第一个节点又会和第二个节点建立socket连接,由第二个节点又会和第三个节点建立一个socket连接,这种连接的方式叫Pipeline;

4、客户端会将block切分成package(默认是64kB),以流式在pipeline中传输

好处:(1)速度快:时间线重叠(其实流式也是一种变异的并行);

(2)客户端简单:副本的概念是透明的;

5、由DataNode完成接收block块后,block的metadata(MD5校验用)通过一个心跳将信息汇报给NameNode;

6、如果再pipeline传输中,任意节点失败,上游节点直接连接失败节点的下游节点继续传输,最终在第5步汇报后,NameNode会发现副本数不足,一定会出发DataNode复制更多副本,客户端Client副本透明;

7、client一直重复以上操作,逐一将block块上传,同时DataNode汇报block的位置信息,时间线重叠;

8、最终,如果NameNode收到了DataNode汇报的所有块的信息,将文件的.copying去掉,文件可用

2.2 HDFS读流程

img

客户端将要读取的文件路径发送给NameNode,NameNode获取文件的元信息返回给客户端,客户端根据返回的信息找到DataNode 逐个获取文件的block 并在客户端本地进行数据合并从而获得整个文件。

1)客户端跟NameNode通信查询元数据(block所在的DataNode节点),找到文件块所在的DataNode的服务器

2)挑选一台DataNode(就近原则,然后随机)服务器,请求建立socket流

3)DataNode开始发送数据

4)客户端以packet(数据包: 一个packet为64kb )为单位接收,先在本地缓存然后写入到目标文件中,后面的block块就相当于append(追加)到前面的block块,最后合成最终需要的文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvFTqUPy-1603966783249)(/IMGS/读2.jpg)]

详细说明:

  1. 客户端调用FileSystem 实例的open 方法,获得这个文件对应的输入流InputStream。
  2. 通过RPC 远程调用NameNode ,获得NameNode 中此文件对应的数据块保存位置,包括这个文件的副本的保存位置( 主要是各DataNode的地址) 。
  3. 获得输入流之后,客户端调用read 方法读取数据。选择最近的DataNode 建立连接并读取数据。
  4. 如果客户端
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值