hadoop hdfs文件读取写入流程

HDFS文件读取的过程

1).使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

2).Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;

3).客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.

4).读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;

5).当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。

6).读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。

HDFS写入文件的过程

HDFS写入文件的过程:

1).使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

2).Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;

3).当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。

4).开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。

5).最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。

6).如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。

 

HDFS的shell操作

1. 直接访问Hadoop程序

在/etc/prifile中加入

export HADOOP_HOME=/home/hduser/hadoop (hadoop的安装目录)
export PATH=$HADOOP_HOME/bin:$PATH

source /etc/profile 是环境变量生效

2. HDFS命令格式:

HDFS基本命令(在hadoop目录下执行为例)

bin/hadoop fs -cmd <args>

           cmd:具体的操作,基本上与UNIX的命令行相同

           <args>:有时需包含参数

             例如:bin/hadoop fs -ls /

3. 常见的hadoop命令解析:

put命令只能从本地的文件复制到HDFS上;

get命令将HDFS上的文件复制到本地;

cp命令只能在相同的文件系统上互相复制文件。这三个命令都可以复制多个文件。复制单个文件时,目标路径可以是目录也可以是文件,目标路径是目录时,文件名不改变,目标路径是文件时,可以修改文件名;复制多个文件时,目标路径必须是目录,文件名不能修改。

copyFromLocal命令,此命令与put命令相似,区别是此命令只能复制一个文件。目标路径是目录时,文件名不改变,目标路径是文件时,可以修改文件名。

copyToLocal命令,此命令与get命令相似,区别是此命令只能复制一个文件。目标路径是目录时,文件名不改变,目标路径是文件时,可以修改文件名。

mv命令只能在相同的文件系统上移动文件,可以移动多个文件。标路径是目录时,文件名不改变,目标路径是文件时,可以修改文件名。

以上所有目录必须是存在的。

4. 常见的hadoop命令示例

mkdir 使用方法:hadoop fs -mkdir <paths>
 
      示例:hadoop fs -mkdir /user
 
ls 列出path目录下的内容,包括文件名,权限,所有者,大小和修改时间
 
  hadoop fs -ls /
 
  hadoop fs -ls -R /
 
put 使用方法:hadoop fs -put <localsrc> ... <dst>
 
  从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
 
  hadoop fs -put localfile /user/ 拷贝localfile文件到hdfs的user目录下
 
  hadoop fs -put localfile1 localfile2 /user/ 同时拷贝localfile1和localfile2文件到hdfs的user目录下
 
  hadoop fs -put - /user/hadoopfile 在hadoopfile文件里手工录入内容(录入之前hadoopfile文件不存在),按Ctrl+C键录入结束 
 
get 使用方法:hadoop fs -get [-ignorecrc] [-crc]    <src> <localdst> 复制文件到本地文件系统
 
  示例:hadoop fs -get /user/hadoop/file localfile
 
cat 使用方法:hadoop fs -cat URI [URI ...]
 
  示例:hadoop fs -ls /user/hadoopfile 查看文件内容
 
rm 使用方法:hadoop fs -rm URI [URI ...]
 
  删除指定的文件。只删除非空目录和文件。请参考rmr命令了解递归删除。
 
  示例:hadoop fs -rm /user/read.txt 删除文件
 
  示例:hadoop fs -rm  -f /user/read.txt 强制删除文件
 
rmr 使用方法:hadoop fs -rmr URI [URI ...]
 
  示例:hadoop fs -rmr /user/     删除/usr/下所有的文件和目录
 
delete的递归版本。
 
  示例:hadoop fs -rm -r /user/hadoop/dir
 
getmerge 使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
 
  接受一个源目录和一个目标文件作为输入,并且将源目录中所有的文件连接成本地目标文件。addnl是可选的,用于指定在每个文件结尾添加一个换行符。
 
  示例:hadoop fs -getmerge /input2 file2.txt
 
mv 使用方法:hadoop fs -mv URI [URI ...] <dest>
 
  将文件从源路径移动到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
 
  不允许在不同的文件系统间移动文件。
 
  也可以重命名文件
 
  示例:hadoop fs -mv /hadoop/file1 /hadoop/file2
 
      hadoop fs -mv /hadoop/file1.txt  /hadoop/file1.txt.bak.0722  
 
stat 使用方法:hadoop fs -stat URI [URI ...]
 
  返回指定路径的统计信息。
 
  示例:hadoop fs -stat /input2
 
tail 使用方法:hadoop fs -tail [-f] URI
 
  将文件尾部1k字节的呢绒输出到stdout。支持-f选项,行为和Unix中一致。
 
  示例:hadoop fs -tail pathname
 
chmod 使用方法:hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
 
  设为所有人皆可读取
 
  chmod a+r file1.txt
 
chown 使用方法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI]
 
touchz 使用方法:hadoop fs -touchz URI [URI ...]
 
  创建一个0字节的空文件。
 
  示例:hadoop fs -touchz pathname
 
copyToLocal 使用方法:hadoop fs -copyToLocal [ignorecrc] [-crc] URI <localdst>
 
  除了限定目标路径是一个本地文件外,和get命令类似。
 
copyFromLocal 使用方法:hadoop fs -copyFromLocal <localsrc> URI
 
  除了限定源路径是一个本地文件外,和put命令相似。
 
cp 使用方法:hadoop fs -cp URI [URI ...] <dest>
 
  将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
 
  示例: hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
 
du 使用方法:hadoop fs -du URI [URI ...]
 
  显示目录中所有文件的大小
 
  示例:hadoop fs -du /user/hadoop/dir1
 
du -s 使用方法:hadoop fs -du -s <args>
 
  显示文件的大小
 
  常用:hadoop fs -du -h /srv/smart/hhh.txt
 
expunge 使用方法:hadoop fs -expunge
  清空回收站
回收站: hadoop fs -ls /安装目录下/.trash
       Hadoop文件删除后可以放在回收站内

 

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值