进行本实训之前,建议把教材《Hadoop大数据开发实战(杨力 著)》第56~67页的HDFS SHELL命令先练习一下,书上的命令比较基础
=======================HDFS的基本SHELL操作命令========================
【实验描述】Hadoop提供HDFS分布式文件系统交互的SHELL命令,通过了解Hadoop Shell命令的用法。掌握对Hadoop分布式系统的命令行操作。
Shell操作的基本命令格式为:
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] <path> ...]
[-cp [-f] [-p] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-usage [cmd ...]]
【实验步骤】
步骤1:查看hdfs分布式系统根目录下所有文件和文件夹信息
hadoop fs -ls /
步骤2:利用hadoop fs –mkdir 命令在hdfs上创建test1、test2和test3目录。
hadoop fs -mkdir /test1
hadoop fs -mkdir /test2
hadoop fs -mkdir /test3
hadoop fs -ls /
Found 3 items
drwxr-xr-x - root supergroup 0 2018-08-08 10:18 /test1
drwxr-xr-x - root supergroup 0 2018-08-08 10:18 /test2
drwxr-xr-x - root supergroup 0 2018-08-08 10:20 /test3
步骤3:在本地系统编辑文件test1.txt,操作命令如下:
vi test1.txt
添加内容
filename test1.txt
执行同样的操作,创建test2.txt和test3.txt文件
利用hadoop fs –put命令上传文件test1.txt到hdfs的/test1目录;上传文件test2.txt到hdfs的/test2.txt目录;上传文件test3.txt到hdfs的/test3.txt目录,操作命令如下:
hadoop fs -put test1.txt /test1
hadoop fs -put test2.txt /test2
hadoop fs -put test3.txt /test3
上传成功后,利用查看命令进行查看
hadoop fs -ls /test1
Found 1 items
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test1/test1.txt
hadoop fs -ls /test2
Found 1 items
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test2/test2.txt
hadoop fs -ls /test3
Found 1 items
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:41 /test3/test3.txt
步骤4:利用hadoop fs -text命令查看文件的内容
hadoop fs -text /test1/test1.txt
filename test1.txt
或查看文件内容
hadoop fs -cat /test1/test1.txt
filename test1.txt
执行同样的操作,查看test2.txt和test3.txt文件的内容
步骤5:利用hadoop fs –appendToFile命令实现对hdfs分布式系统上文件内容的追加
在本地编辑testtmp.txt文件,文件内容为“filename testtmp.txt”,将testtmp.txt文件的内容追加到hdfs分布式系统的/test1/test1.txt文件后。
cd
vi testtmp.txt
hadoop fs -appendToFile testtmp.txt /test1/test1.txt
hadoop fs -text /test1/test1.txt
查看/test1/test1.txt文件内容
filename test1.txt
filename testtmp.txt
步骤6:利用hadoop fs –cp命令将hdfs分布式系统下/test1/test1.txt文件复制到/test2/目录中
hadoop fs -ls /test2
Found 2 items
-rw-r--r-- 3 root supergroup 40 2018-08-08 10:57 /test2/test1.txt
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test2/test2.txt
步骤7:利用hadoop fs –rm命令将hdfs分布式系统下/test2/test1.txt文件删除
hadoop fs -rm /test2/test1.txt
Deleted /test2/test1.txt
hadoop fs -ls /test2
Found 1 items
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test2/test2.txt
步骤9:利用hadoop fs –mv 命令将hdfs分布式系统上/test2/test2.txt文件移动到/test1目录中
hadoop fs -ls /test1
Found 1 items
-rw-r--r-- 3 root supergroup 40 2018-08-08 10:55 /test1/test1.txt
hadoop fs -mv /test2/test2.txt /test1
hadoop fs -ls /test1
Found 2 items
-rw-r--r-- 3 root supergroup 40 2018-08-08 10:55 /test1/test1.txt
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test1/test2.txt
[root@hadoop1 ~]# hadoop fs -ls /test2 // 该目录下的文件已经删除
步骤10:利用hadoop fs -moveFromLocal 命令将本地文件testtmp.txt文件从本地移动到hdfs 系统的/test2目录中(本地文件会被删除)
hadoop fs -ls /test2
hadoop fs -moveFromLocal testtmp.txt /test2
hadoop fs -ls /test2
Found 1 items
-rw-r--r-- 3 root supergroup 21 2018-08-08 11:02 /test2/testtmp.txt
同时在本地利用ls命令进行查看,会发现testtmp.txt文件被删除。
步骤11:在本地系统的根目录下建立test文件夹,利用hadoop fs –get命令将hdfs分布式系统上/test1/test1.txt文件下载到本地根目录下的test文件夹,操作命令如下:
mkdir /test
cd /test
ls
hadoop fs -get /test1/test1.txt
ls
test1.txt
hadoop fs -ls /test1
Found 2 items
-rw-r--r-- 3 root supergroup 40 2018-08-08 10:55 /test1/test1.txt
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test1/test2.txt
步骤12:将hdfs分布式系统下/test2目录下的全部文件,最后删除/test2目录。
hadoop fs -rm /test2/*
Deleted /test2/testtmp.txt
hadoop fs -rmdir /test2
hadoop fs -ls /
Found 2 items
drwxr-xr-x - root supergroup 0 2018-08-08 11:00 /test1
drwxr-xr-x - root supergroup 0 2018-08-08 10:41 /test3
步骤13:快照的基本操作(较难可选做)
具体要求为:HDFS文件系统的根目录下存在一个/test1的文件目录,要求开启该目录的可创建快照功能,并为该目录文件创建快照,快照名称为import-data,使用相关命令查看该快照文件的列表信息。同时删除/test1目录下的文件,并利用快照进行恢复。
hadoop dfsadmin -allowSnapshot /test1 //开启目录的可创建快照功能
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Allowing snaphot on /test1 succeeded
hadoop fs -createSnapshot /test1 import-data
//建立快照
Created snapshot /test1/.snapshot/import-data
hadoop fs -ls /test1/.snapshot //查看快照文件
Found 1 items
drwxr-xr-x - root supergroup 0 2018-08-09 01:31 /test1/.snapshot/import-data
hadoop fs -ls /test1
Found 2 items
-rw-r--r-- 3 root supergroup 40 2018-08-08 10:55 /test1/test1.txt
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test1/test2.txt
hadoop fs -rm -r /test1/*.txt //删除文件
Deleted /test1/test1.txt
Deleted /test1/test2.txt
hadoop fs -ls /test1 // 可以看到文件已经删除
hadoop fs -cp -ptopax /test1/.snapshot/import-data/*.txt /test1 //恢复快照到/test1目录
hadoop fs -ls /test1
Found 2 items
-rw-r--r-- 3 root supergroup 40 2018-08-08 10:55 /test1/test1.txt
-rw-r--r-- 3 root supergroup 19 2018-08-08 10:40 /test1/test2.txt
=====================下面是一些更多的HDFS SHELL命令练习,有兴趣可以练习一下================
1.hadoop fs -help 查看帮助
hadoop fs -help
2.hadoop fs -mkdir 创建一个文件夹
hadoop fs -mkdir /test
3. hadoop fs -put 将本地文件上传到hdfs中
hadoop fs -put 10.txt /test/
4 .hadoop fs -ls 列出路径下的所有文件和文件夹
hadoop fs -ls /test/
5.hadoop fs -cat 查看文件中的内容
hadoop fs -cat /test/10.txt
6. hadoop fs -text 列出文件中的内容
hadoop fs -text /test/10.txt
7. hadoop fs -touchz 创建一个空文件
hadoop fs -touchz /textFile
8. hadoop fs -ls -R 递归列出路径下的文件夹和文件
hadoop fs -ls -R /
9. hadoop fs -mv A B 将文件从A 移动到 B
hadoop fs -mv /test/10.txt /test
10.hadoop fs -cp A B 将 A 处的文件 复制一份到 B处
hadoop fs -cp /test/10.txt /
11.hadoop fs -moveFromLocal A B 将文件从本地A移动到hdfs 系统中B(本地文件会被删除)
hadoop fs -moveFromLocal /home/bigdata/eclipse/testFile/Reduced/C000008/100.txt /test
12.hadoop fs -rm 删除文件
hadoop fs -rm /test/100.txt
13.hadoop fs -rmdir 删除文件夹
hadoop fs -rmdir /test/testDir
14.hadoop fs -get 将文件从hdfs系统移动到本地
hadoop fs -get /test/testFile /home/
==========================下面是一些 HDFS SHELL运维题,有兴趣可以练习一下===================
1、在本地系统的家目录下新建BigDataSkills.txt文件。在HDFS文件系统的根目录下创建递归目录“hdfs/file”,将BigDataSkills.txt文件,上传到hdfs/file目录中,使用相关命令查看文件系统中hdfs/file目录的文件列表信息
1) hadoop fs -ls /
2) touch BigDataSkills.txt
3) hadoop fs -mkdir -p /hdfs/file
4) hadoop fs -put BigDataSkills.txt /hdfs/file
5) hadoop fs -ls /hdfs/file
Found 1 items -rw-r--r-- 2 root supergroup 27 2018-08-21 09:08 /hdfs/file/BigDataSkills.txt
2、在本地系统的/etc/sysconfig/network-scripts目录下的ifcfg-eno16777736文件上传到/hdfs/file目录中,并使用HDFS文件系统检查工具检查文件是否受损,并检查存储块的副本数
1) hadoop fs -put /etc/sysconfig/network-scripts/ifcfg-eno16777736 /hdfs/file
2) hadoop fs -ls /hdfs/file
Found 2 items
-rw-r--r-- 2 root supergroup 27 2018-08-21 09:08 /hdfs/file/BigDataSkills.txt
-rw-r--r-- 2 root supergroup 362 2018-08-21 09:12 /hdfs/file/ifcfg-eno16777736
3)hadoop fsck /hdfs/file/ifcfg-eno16777736 -blocks
3、向HDFS文件系统上传一大文件(建议超过150MB),查询该文件在HDFS文件系统上分布在那些DataNode上。
1)hadoop fs -put hbase-1.2.0-cdh5.7.0.tar.gz /
2) hadoop fs -ls /
3)查询该文件在HDFS文件系统上分布在那些DataNode上
hadoop fsck /hbase-1.2.0-cdh5.7.0.tar.gz -files -blocks -locations