Shell 命令说明

HDFS 是存取数据的分布式文件系统,那么对 HDFS 的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对 HDFS 的操作命令类似于 Linux 的 shell 对文件的操作,如 lsmkdirrm

文件系统 shell 包括与 Hadoop 分布式文件系统(HDFS)以及 Hadoop 支持的其他文件系统(如本地 FSHFTP FSS3 FS 等)直接交互的各种类似 shell 的命令

所有 FS shell 命令都将路径 URL 作为参数。URL 格式为 scheme://authority/path 。对于 HDFS ,该 schemehdfs ,对于本地 FS ,该 schemefileschemeauthority 是可选的。如果未指定,则使用配置中指定的默认方案

注:使用的 Hadoop 版本为 2.7.52.x 的命令可以兼容 1.x 的,但是 3.x 不兼容 1.x

# 远程文件系统
hdfs dfs -ls  hdfs://namenode:host/parent/child

# 本地文件系统
hdfs dfs -ls file:///root/ 

# 未指定 schema 时,由于 core-site.xml 中的 fs.defaultFS 中有配置,所以我们可以不加 schema 就能远程访问 hdfs
hdfs dfs -ls  /parent/child    

Hadoop提供了文件系统的 shell 命令行客户端,使用方法如下

# 1.x 版本的命令格式
hadoop fs <arg>

# 2.x 版本的命令格式
hdfs dfs <arg>

Shell 命令选项

选项名称使用格式含义
-ls-ls <路径>查看指定路径的当前目录结构
-lsr-lsr <路径>递归查看指定路径的目录结构(包含子集)
-du-du <路径>统计目录下个文件大小
-dus-dus <路径>汇总统计目录下文件(夹)大小
-count-count [-q] <路径>统计文件(夹)数量
-mv-mv <源路径> <目的路径>移动
-cp-cp <源路径> <目的路径>复制
-rm-rm [-skipTrash] <路径>删除文件/空白文件夹
-rmr-rmr [-skipTrash] <路径>递归删除
-put-put <多个linux上的文件> <hdfs路径>上传文件
-copyFromLocal-copyFromLocal <多个linux上的文件> <hdfs路径>从本地复制
-moveFromLocal-moveFromLocal <多个linux上的文件> <hdfs路径>从本地移动
-get-get <源路径> <linux路径>从hdfs中获取文件到本地
-getmerge-getmerge <源路径> <linux路径>合并到本地
-cat-cat <hdfs路径>查看文件内容
-text-text <hdfs路径>查看文件内容
-copyToLocal-copyToLocal [-ignoreCrc] [-crc] [hdfs源路径] [linux目的路径]从本地复制
-moveToLocal(未实现)-moveToLocal [-crc] <hdfs源路径> <linux目的路径>从本地移动
-mkdir-mkdir <hdfs路径>创建空白文件夹
-setrep-setrep [-R] [-w] <副本数> <路径>修改副本数量
-touchz-touchz <文件路径>创建空白文件
-appendToFilehdfs dfs -appendToFile 2.txt /aaa/a.txt (2.txt 追加到a.txt 中)指定文件追加内容
-stat-stat [format] <路径>显示文件统计信息
-tail-tail [-f] <文件>查看文件尾部信息
-chmod-chmod [-R] <权限模式> [路径]修改权限
-chown-chown [-R] [属主][:[属组]] 路径修改属主
-chgrp-chgrp [-R] 属组名称 路径修改属组
-help-help [命令选项]帮助

Shell 命令概览

显示文件列表:-ls

# 格式:hdfs dfs -ls  URI
# 作用:类似于Linux的ls命令,显示文件列表

# 显示根路径下的文件列表
hdfs dfs -ls  /

显示文件列表:-lsr

# 格式  : hdfs  dfs -lsr URI
# 作用  : 在整个目录下递归执行ls, 与UNIX中的ls-R类似

# 递归查看根路径下的文件列表
hdfs dfs -lsr  /

创建文件夹:-mkdir

# 格式 :hdfs  dfs [-p] -mkdir <paths>
# 作用 : 以<paths>中的URI作为参数,创建目录。使用-p参数可以递归创建目录

# 创建单级文件目录
hdfs dfs -mkdir /dir1
hdfs dfs -mkdir /dir2
# 创建多级文件目录
hdfs dfs -p -mkdir /dir3/dir4/dir5

文件上传:-put

# 格式 : hdfs dfs -put <localsrc >  ... <dst>
# 作用 : 将单个的源文件src或者多个源文件srcs从本地文件系统拷贝到目标文件系统中(<dst>对应的路径)。也可以从标准输入中读取输入,写入目标文件系统中

# 创建文件
echo “Hello World” >> /root/1.txt
# 将本地文件上传到 hdfs
hdfs dfs -put  /root/1.txt  /dir1

文件移动:-moveFromLocal

# 格式: hdfs  dfs -moveFromLocal  <localsrc>   <dst>
# 作用:  和put命令类似,但是源文件localsrc拷贝之后自身被删除

# 创建文件
echo “Hello World” >> /root/2.txt
# 将文件从本地移动至 hdfs
hdfs  dfs -moveFromLocal  /root/2.txt  /

文件下载:-get

# 格式:hadoop fs  -get [-ignorecrc ]  [-crc]  <src> <localdst>
# 作用:将文件拷贝到本地文件系统。 CRC 校验失败的文件通过-ignorecrc选项拷贝。 文件和CRC校验和可以通过-CRC选项拷贝
  
hdfs dfs -get /2.txt  /export/data

文件合并:-getmerge

# 格式: hdfs dfs -getmerge -nl  < hdfs dir >  < local file >
# 功能:合并下载多个文件
# 参数: 加上nl后,合并到local file中的hdfs文件之间会空出一行

# 合并多个文件并将合并后的文件下载
hdfs dfs -getmerge  /aaa/log.*  ./log.sum
hdfs dfs -getmerge a.txt b.txt ./abc.txt

# 合并多个文件并指定文件间的分隔符为空行,最后下载合并后的文件
hdfs dfs -getmerge -nl a.txt b.txt ./abc.txt

文件移动:-mv

# 格式  : hdfs  dfs -mv URI   <dest>
# 作用: 将hdfs上的文件从原路径移动到目标路径(移动之后文件删除),该命令不能夸文件系统
 
# 将 a.txt 文件从 dir1 目录下移动到 dir2 目录下
hdfs  dfs  -mv  /dir1/a.txt   /dir2

文件删除:-rm

# 格式: hdfs dfs -rm [-r] 【-skipTrash】 URI 【URI 。。。】
# 作用: 删除参数指定的文件和目录,参数可以有多个,删除目录需要加-r参数
# 如果指定-skipTrash选项,那么在回收站可用的情况下,该选项将跳过回收站而直接删除文件;否则,在回收站可用时,在HDFS Shell 中执行此命令,会将文件暂时放到回收站中。
  
# 删除文件  
hdfs dfs -rm /2.txt

# 删除整个目录
hdfs dfs -rm  -r  /dir1

文件复制:-cp

# 格式:hdfs  dfs  -cp URI [URI ...] <dest>
# 作用:将文件拷贝到目标路径中。如果<dest>  为目录的话,可以将多个文件拷贝到该目录下。
# -f 选项将覆盖目标,如果它已经存在。
# -p 选项将保留文件属性(时间戳、所有权、许可、ACL、XAttr)。
  
# 将1.txt 复制到 dir2 目录下,命名为2.txt  
hdfs dfs -cp /dir1/1.txt  /dir2/2.txt

追加文件内容

# 格式: hdfs fs -appendToFile <localsrc> ... <dst>
# 作用: 追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入

cd /opt/software/hadoop2.7.5/etc/hadoop/

# 将所有的 xml 文件内容增加到 hdfs 的 a.xml 中
hdfs dfs -appendToFile  *.xml  /a.xml

文件内容查看:-cat

# hadoop fs  -cat  URI [uri  ...]
# 作用:将参数所指示的文件内容输出到控制台

# 查看文件内容
hdfs dfs -cat /dir2/2.txt

查看文件大小:-du

# hadoop fs  -du  URI 
# 功能:显示目录中所有文件大小,当只指定一个文件时,显示此文件的大小。

hdfs dfs -du /

改变文件权限:-chmod

# 格式: hadoop fs  -chmod  [-R]  URI[URI  ...]
# 作用:改变文件权限。如果使用  -R 选项,则对整个目录有效递归执行。使用这一命令的用户必须是文件的所属用户,或者超级用户。

# 改变文件的权限为 rwx
hadoop fs -chmod -R 777 /dir1

# 如果hdfs 的超级用户是 hdfs ,此时需要给 hue 用户赋予 /user/hue 的其它用户的 rwx 权限
sudo -u hdfs hadoop fs -chmod -R 777 /user/hue

在这里插入图片描述

改变文件的用户和组:chowm

# 格式: hdfs dfs -chmod  [-R]  URI[URI  ...]
# 作用:改变文件的所属用户和用户组。如果使用  -R 选项,则对整个目录有效递归执行。使用这一命令的用户必须是文件的所属用户,或者超级用户

# 将/a.txt的所属用户和所属用户组修改为hadoop
hdfs dfs -chown -R hadoop:hadoop /a.txt

改变安全模式:-safemode

# 查看安全模式的状态
hdfs dfsadmin -safemode  get
# 进入安全模式
hdfs dfsadmin -safemode  enter 
# 离开安全模式
hdfs dfsadmin -safemode  leave 

Java Api 操作 Shell

FileSystem fileSystem = FileSystem.get(new URI("hdfs://1.117.116.03:8020"), new Configuration());

// 读取本地文件 1.txt 到 hdfs 的 /aaa/1.txt
fileSystem.copyFromLocalFile(new Path("file:Users/kylewhite/Downloads/1.txt"), new Path("/aaa/1.txt"));

高级操作命令

跨集群之间的数据拷贝

DistCp(distributed copy)是一款被用于大型集群间/集群内的复制工具,该命令的内部原理是 MapReduce

# 在 hadoop 的 bin 目录下执行
hadoop distcp hdfs://node1:8020/jdk-8u241-linux-x64.tar.gz  hdfs://cluster2:8020/
Logo

更多推荐