常用的HDFS操作

利用Hadoop提供的shell命令完成任务

提示:

  1. 部分Shell命令的参数路径只能是本地路径或者HDFS路径.
  2. 若Shell命令的参数既可以是本地路径,也可以是HDFS路径时,注意区分。为保证操作正确,可指定路径前缀hdfs:/// 或者file:///
  3. 注意区分相对路径与绝对路径 (hdfs中默认相对路径起始为/user/hadoop)

(1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有文件

Shell命令:
检查文件是否存在:./hdfs dfs -test -e text.txt (执行完这一句无输出结果,需要输入命令 “echo $?” 存在为0,不存在为1)
追加命令:./hdfs dfs -appendToFile local.txt text.txt(将本地文件追加到原有文件末尾 若hdfs中存在text.txt则直接附加,若不存在则自动新建一个名字为text.txt的文本)
覆盖命令1:./hdfs dfs -copyFromLocal -f local.txt text.txt(将本地文件上传到hdfs 若hdfs中存在text.txt则直接覆盖,若不存在则自动新建一个名字为text.txt的文本)
覆盖命令2:./hdfs dfs -cp -f file:///home/work/local.txt text.txt(注意参数的路径是本地的还是hdfs的,由前面的覆盖后面的)
可以使用如下命令实现:(在终端输入或者写成shell脚本执行)

#!/bin/bash
if $(./hdfs dfs -test -e text.txt)
then $(./hdfs dfs -appendToFile local.txt text.txt)
else $(./hdfs dfs -copyFromLocal -f local.txt text.txt)
fi

(2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名

shell命令:
下载命令:./hdfs dfs -copyToLocal text.txt ./text2.txt(将hdfs上名为text.txt的文件下载到本地并命名为text2.txt 如果text2.txt在本地已存在 不会自动覆盖,若要强行覆盖,则要加一个 -f 参数 )
可以使用如下命令

#!/bin/bash
if $(hdfs dfs -test -e text1.txt)
then
if [ -e text1.txt ]
then $(hdfs dfs -copyToLocal text1.txt ./text2.txt)
else $(hdfs dfs -copyToLocal text1.txt ./text1.txt)
fi
fi

(3)将HDFS中指定文件的内容输出到终端中

Shell命令:
hdfs dfs -cat text.txt

(4)显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息

Shell 命令:
hdfs dfs -ls -h text.txt

(5)给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息

hdfs dfs -ls -R -h /user/hadoop

(6)提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录

Shell命令:
hdfs dfs -mkdir [-p] dir1/dir2(创建目录 -p 是递归创建父目录)
hdfs dfs -touchz filename(创建一个0长度的文件)
hdfs dfs -rm dir1/dir2/filename(删除指定路径文件)
可以使用如下命令:

#!/bin/bash
if $(hdfs dfs -test -d dir1/dir2);
then $(hdfs dfs -touchz dir1/dir2/filename);
else $(hdfs dfs -mkdir -p dir1/dir2 &&hdfs dfs -touchz dir1/dir2/filename)
fi

(7)提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录

Shell命令:
创建目录:hdfs dfs -mkdir -p dir1/dir2
删除目录:hdfs dfs -rmdir dir1/dir2 (如果目录非空则会提示not empty ,不执行删除)
强制删除目录:hdfs dfs -rm -R dir1/dir2

(8)向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾

Shell命令:
追加到文件末尾:hdfs dfs -appendToFile local.txt text.txt
追加到文件开头:(没有直接的命令可以操作,方法之一是先移动到本地进行操作,再进行上传覆盖):

hdfs dfs -get text.txt (将文件或目录从HDFS中的路径拷贝到本地文件路径)
cat text.txt >> local.txt(将text.txt内容加到local.txt后)
hdfs dfs -copyFromLocal -f local.txt text.txt(将local.txt 上传到hdfs 相当于把local.txt的内容加到了原来hdfs中的text.txt的前面)

(9)删除HDFS中指定的文件

Shell命令:
hdfs dfs -rm text.txt

(10)在HDFS中,将文件从源路径移动到目的路径。

Shell命令:
hdfs dfs -mv text.txt text2.txt (更改文件名,注意更改的目的文件名不能为目录名)
hdfs dfs -mv text.txt dir1/dir2(如果后面的参数是一个目录名则是移动)

(11) 其他常用命令

1.hdfs dfs -put text.txt dir1/dir2 (将本地文件或目录上传到HDFS中的路径)
2.hdfs dfs -du [-s] [-h]dir1 /hdfs dfs -du filename(显示给定目录中包含的文件和目录的大小或文件的长度,用字节大小表示,文件名用完整的HDFS协议前缀表示,以防它只是一个文件。)
-s选项将显示文件长度的汇总摘要,而不是单个文件。
-h选项将以“人类可读”的方式格式化文件大小
3.hdfs dfs -tail filename (显示文件最后1kb内容到标准输出)
4.hdfs dfs -stat filename(显示文件所占块数(%b),文件名(%n),块大小(%n),复制数(%r),修改时间(%y%Y) )
5.hdfs dfs -getmerge dir1 local.txt 将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件(把两个文件的内容合并起来)
注:合并后的文件位于当前目录,不在hdfs中,是本地文件
在这里插入图片描述
6.hdfs dfs -cat < srcpath> | grep (从hdfs上过滤包含某个字符的行内容)
在这里插入图片描述

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值