一、HDFS简介及其基本概念
HDFS(Hadoop Distributed File System)是hadoop生态系统的一个重要组成部分,是hadoop中的存储组件,在整个Hadoop中的地位非同一般,是最基础的一部分,因为它涉及到数据存储,MapReduce等计算模型都要依赖于存储在HDFS中的数据。HDFS是一个分布式文件系统,以流式数据访问模式存储超大文件,将数据分块存储到一个商业硬件集群内的不同机器上。
二、实验环境
操作系统:Ubuntu64位
Hadoop版本:Hadoop 2.7.1
Jdk版本:jdk-8u241-linux-x64
三、实践内容
注意:
开头的Shell命令方式,有三种shell命令方式:
- hadoop fs # hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
- hadoop dfs # hadoop dfs只能适用于HDFS文件系统
- hdfs dfs #hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统
1、在使用HDFS命令行操作前,需要先启动Hadoop
命令:
cd /usr/local/hadoop
./sbin/start-dfs.sh #启动hadoop
实践:
2、Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。
命令:
hadoop fs #查看fs总共支持了哪些命令
实践:
3、查看具体某个命令的作用
命令:
hadoop fs -help put#查看put命令的作用
实践:
4、利用Shell命令与HDFS进行交互
(1)目录操作
①第一次使用HDFS时,需要首先在HDFS中创建用户目录。
命令:
cd /usr/local/hadoop
hdfs dfs –mkdir –p /user/Hadoop #在HDFS中创建一个“/user/hadoop”目录,“–mkdir”是创建目录的操作,“-p”表示如果是多级目录,则父目录和子目录一起创建,这里“/user/hadoop”就是一个多级目录,因此必须使用参数“-p”,否则会出错。
实践:
②显示HDFS中与当前用户hadoop对应的用户目录下的内容
命令:
hdfs dfs –ls. #“-ls”表示列出HDFS某个目录下的所有内容,“.”表示HDFS中的当前用户目录,也就是“/user/hadoop”目录
实践:
等价命令:
hdfs dfs –ls /user/Hadoop
实践:
③列出HDFS上的所有目录
命令:
hdfs dfs –ls
实践:
④创建一个input目录
命令:
hdfs dfs –mkdir input #创建此input目录时,采用了相对路径形式,实际上,这个input目录创建成功以后,它在HDFS中的完整路径是“/user/hadoop/input”
实践:
hdfs dfs –mkdir /input #在HDFS的根目录下创建一个名称为input的目录
实践:
⑤使用rm命令删除一个目录
命令:
hdfs dfs –rm –r /input #删除刚才在HDFS中创建的“/input”目录(不是“/user/hadoop/input”目录);“-r”参数表示删除“/input”目录及其子目录下的所有内容,如果要删除的一个目录包含了子目录,则必须使用“-r”参数,否则会执行失败。
实践:
(2) 文件操作
①创建文件
命令:
cd /usr/local/hadoop
touch mylocalfile.txt
实践:
②编辑文件
命令:
vim mylocalfile.txt
实践:
③把本地文件系统的文件上传到HDFS中的当前用户目录上
命令:
hdfs dfs -put /usr/local/hadoop/myLocalFile.txt input #把本地文件系统的“/usr/local/hadoop/myLocalFile.txt”上传到HDFS中的当前用户目录的input目录下,也就是上传到HDFS的“/user/hadoop/input/”目录下。
实践:
④查看HDFS中文件的内容
代码:
hdfs dfs –cat input/myLocalFile.txt
实践:
⑤把HDFS中的文件下载到本地
代码:
hdfs dfs -get input/myLocalFile.txt/home/hadoop/下载 #把HDFS中的myLocalFile.txt文件下载到本地文件系统中的“/home/hadoop/下载/”这个目录下
实践:
到本地文件系统查看下载下来的文件mylocalfile.txt
命令:
cd ~
cd 下载
ls
cat myLocalFile.txt
实践:
⑥把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录
命令:
hdfs dfs -cp input/myLocalFile.txt/input #把HDFS的“/user/hadoop/input/myLocalFile.txt”文件,拷贝到HDFS的另外一个目录“/input”中(注意,这个input目录位于HDFS根目录下)
(3)其他shell常用命令
①输出这个命令参数手册
命令:
Hdfs dfs -help 命令名
实例:
Hdfs dfs -help cat
②上传文件
命令:
hdfs dfs -put file(本地文件路径) /hdfsfile(hdfs文件路径)
实例:
hdfs dfs -put /usr/local/hadoop/myLocalFile.txt input
③剪切文件
命令:
hdfs dfs -moveFromLocal file(文件路径) /hdfsfile(hdfs文件路径)
实例:
hdfs dfs -moveFromLocal /usr/local/hadoop/myLocalFile.txt input
④下载文件到本地
命令:
hdfs dfs -get /hdfsfile(hdfs文件路径) file(本地路径)
实例:
hdfs dfs -get input/mylocalfile.txt /usr/local/hadoop
⑤合并下载
命令:
hdfs dfs -getmerge /hdfsdir file
实例:
hdfs dfs -get input /usr/local/hadoop
⑥创建文件夹
命令:
hdfs dfs -mkdir /dirname
实例:
多级强制创建命令:
hdfs dfs -mkdir -p /dirname/dirname
实例:
⑦移动文件夹
命令:
hdfs dfs -mv /hdfsfile /hdfsdir/hdfsfile
# -mv a.txt b.txt //重命名
# -mv a.txt / //移动
⑧复制
命令:
hdfs dfs -cp /hdfsfile /hdfsdir
⑨删除
命令:
hdfs dfs -rm /hdfsfile
删除文件夹命令:
hdfs dfs -rm -r /hdfsdir
⑩查看
命令:
hdfs dfs -cat /hdfsfile
hdfs dfs -tail -f /hdfsfile
查看文件夹中有多少个文件
命令:
hdfs dfs -count /hdfsdir
查看hdfs的总空间
命令:
hdfs dfs -df /
hdfs dfs -df -h / 可读性更高