HDFS练习
1. 实验目的:
1) 掌握Hadoop中HDFS的Shell命令操作
2) 掌握Hadoop中HDFS的API操作
2. 实验原理:
1) HDFS是hadoop平台的核心组成之一
2) HDFS的访问方式有多种,可通过web访问,也可通过shell方式或者API方式访问。
3) 基本操作有:对文件的读、写、追加、删除;新建文件夹、删除文件夹等;还可显示文件及文件夹的属性。
3. 实验准备:
1) 实验一中已经完成配置的伪分布式hadoop环境。
2) 项目1、项目2,可以直接使用上述环境
3) 项目3有可能需要配置自己的虚拟机网络连接模式
4. 实验内容:
1) 项目1:HDFS常见命令练习
可以在终端输入hdfs dfs -help command查询命令用法),执行并查看结果。
(1) 列出HDFS当前用户家目录下的文件及文件夹:hdfs dfs -ls /
(2) 列出HDFS文件下名为directory的文件夹中的文件: hdfs dfs -ls sum
(3) 上传文件,将本地目录file1文件上传到HDFS上并重命名为file2:hdfs dfs -put file1 file2
(4) 下载文件,将HDFS中的file2文件复制到本地系统并命名为file1: hdfs dfs -get file2 file1
(5) 查看文件,查看HDFS下file1文件中的内容:hdfs dfs -cat file1
(6) 删除文档,删除HDFS下名为file1的文件:hdfs dfs -rm file1
(7) 在HDFS根路径下建立新目录,名为directory: hdfs dfs -mkdir hdfs根目录/directory
(8)本地文件复制到HDFS(注意与put的区别):hdfs dfs -copyFromLocal src dst
(9)本地文件移动到HDFS: hdfs dfs -moveFromLocal src dst
(10)文件或文件夹复制: hdfs dfs -cp src dst
(11)文件或文件夹的移动: hdfs dfs -mv src dst
(12)copyToLocal 复制文件到本地: hdfs dfs -copyToLocal src dst
(13) touchz 创建一个空文件file: hdfs dfs -touchz file
(14)追加到文件末尾的指令: hdfs dfs -appendToFile local.txt text.txt
2) 项目2:HDFS命令的综合运用实践
(1) 创建一个文件file1,查看file1是否创建成功,往file1内写一些内容。
(2) 在HDFS上创建一个文件夹folder1,把file1上传到folder1中。
(3) 查看是否上传成功,成功后查看file1的内容。
(4) 把file1下载到本地,查看file1的内容。
(5) 把folder1删除,并查看是否删除成功。
(6) 最后把本地的file1删除
【拓展与思考】思考题1、思考题2、思考题3必做,其余选做
思考题1(必做):对项目1、项目2命令行操作的结果,是否能在Web访问模式下看到?如果能请截图举例说明;如果不能,请查清原因并确认结果。
思考题2(必做):hdfs dfs -ls -R 某个HDFS上的目录该命令中“R”参数的作用是什么?请截图并给出相应的说明。
递归显示目录
思考题3(必做):如果已经上传了某个本地A文件到HDFS上,并在HDFS中命名为file1,
那再次上传A文件并在HDFS中命名为file1是否可行(路径一致)?
不行
如果换另一个本地文件B上传到HDFS中也命名为file1是否可行(路径一致)?
不行
思考题4(必做):如果操作对象是文件夹,如何使用命令完成和文件类似的操作?
(1) 列出HDFS文件下名为directory的文件夹中的文件: hdfs dfs -ls directory
(2) 上传文件,将本地目录folder1文件夹上传到HDFS上并重命名为folder2:hdfs dfs -put folder1 folder2
(3) 下载文件,将HDFS中的folder2文件复制到本地系统并命名为floder1:hdfs dfs -get floder2 floder1
(4) 递归删除文件及目录,删除HDFS下名为floder1的文件: hdfs dfs -rm -r floder1
(5) 删除空目录,删除HDFS下floder2 文件中的内容:hdfs dfs -rmdir floder1
(6) 在HDFS根路径下建立新目录,名为directory:hdfs dfs -mkdir hdfs根目录/directory
思考题5(选做,可加分保命): hdfs dfs -copyFromLocal 与 hdfs dfs -put 有什么区别?
Hdfs dfs -copyFormLocal 只可以将本地文件拷贝到HDFS文件中
hdfs dfs -copyFromLocal和hdfs dfs -put都是HDFS命令,用于将本地文件复制到HDFS集群中。它们的作用是相同的,都可以将本地文件拷贝到HDFS中,但是它们在使用上还是有一些区别的。
hdfs dfs -copyFromLocal命令只能将本地文件拷贝到HDFS文件系统中,而不能将一个HDFS文件系统中的文件复制到另一个HDFS文件系统中。
hdfs dfs -put命令可以将本地文件拷贝到HDFS文件系统中,也可以将一个HDFS文件系统中的文件复制到另一个HDFS文件系统中。
思考题6(选做,可加分保命): linux中每一个命令其实都是对应程序的执行结果,那HDFS命令对应的程序具体在哪些文件中定义呢?
HDFS命令是指用于操作Hadoop分布式文件系统的命令,这些命令的实现程序一般都在Hadoop软件包中的bin目录下。具体地说,HDFS命令对应的程序通常是由Java编写的可执行文件,文件名通常以hdfs-开头,例如hdfs dfs、hdfs fsck、hdfs namenode等。
这些程序的代码实现通常位于Hadoop源代码的src目录下的hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools目录下,其中包含了各种HDFS命令对应的Java类的实现代码。例如,hdfs dfs命令对应的程序实现代码通常在hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSAdmin.java文件中。
总之,HDFS命令对应的程序实现代码都是由Java编写的,并且通常位于Hadoop软件包的bin目录和源代码的src目录下。
项目3:HDFS的API使用实践**
(1) 改造虚拟机网络
参考我的另一篇博客:VMware NAT虚拟网络改造
(2) 改造Hadoop配置
【实操】将hadoop涉及到的5个进程的localhost都调整为新设定的IP,也可以使用/etc/hosts中设定一个名称,方便后续快速更改(这样做更加正规)
step_1 先查看有哪些文件使用了localhost
【实操】step_2-1 在关闭Hadoop所有服务的前提下修改相关配置文件(yarn-site.xml)
【实操】step_2-2 在关闭Hadoop所有服务的前提下修改相关配置文件(hdfs-site.xml)
step_2-3 在关闭Hadoop所有服务的前提下修改相关配置文件(core-site.xml)
【实操】step_2-4 最后在检查下是否还有遗漏
【实操】step_2-5 启动Hadoop,确认相关JVM进程正常工作
step_2-6 简单测试功能是否可用
(3) 编写代码 ==> 要完成文件的 创建/追加/修改
【实操】只提供eclipse演示与IDEA演示,具体细节请参考Hadoop_Liang的博客,下方有链接
1)eclipse 配置Maven
1. 配置开发环境
(1)我们建议,可先采用非Maven的方式完成开发,因为这样可以规避许多的网络访问问题。
(2)如果非Maven方式完成后,再尝试去做Maven模式。
2. 参考博客,编写代码
(1)非Maven工程API访问HDFS:https://blog.csdn.net/qq_42881421/article/details/83001401
(2)Maven工程API访问HDFS:https://blog.csdn.net/qq_42881421/article/details/100762022
2)IDEA 配置Maven
1. 配置开发环境
需要提前下载Maven:https://pan.baidu.com/s/1VhtAlf2Xf9RM6GT7gVNVIw?pwd=sko1
2. 参考博客,编写代码
【注】
① Maven的相关配置和下载请耐心完成
② 如果遇到海外网络不能访问的问题,请参考实验1介绍的配置国内镜像源的方法解决
③ 其实为了方便,建议直接使用IDEA完成;后续课程《大数据内存计算》(spark)也要使用IDEA