实验二 HDFS实验操作

一、实验目的

  1. 理解HDFS在Hadoop体系结构中的角色
  2. 熟练使用HDFS操作常用的Shell命令
  3. 熟悉HDFS操作常用的Java API

二、实验平台

  • 操作系统:ubuntu18
  • Hadoop版本:3.2.2
  • JDK版本:1.8
  • Java IDE:IDEA

三、实验内容和要求

  1. 利用Hadoop提供的Shell命令完成下列任务:
  • 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。
hadoop fs -put test.txt /test/
hadoop fs -appendToFile local.txt /test/test.txt
hadoop fs -cat /test/test.txt

请添加图片描述

  • 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。
if $(hadoop fs -test -e /usr/local/hadoop/test.txt);
then $(hadoop fs -copyToLocal /test/test.txt ./test.txt); 
else $(hadoop fs -copyToLocal /test/test.txt ./test2.txt); 
fi

请添加图片描述

  • 将HDFS中指定文件的内容输出到终端中。
hadoop fs -cat /test/test.txt

请添加图片描述

  • 显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息。
hadoop fs -ls -h /test/test.txt

请添加图片描述

  • 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
hadoop fs -ls -h /test/test.txt

请添加图片描述

  • 提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
#!/bin/bash
if $(hadoop fs -test -d /test/test1);
then $(hadoop fs -touchz /test/test1);
else $(hadoop fs -mkdir -p /test/test1 );
fi

请添加图片描述
请添加图片描述

  • 提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录;
#创建
if $(hadoop fs -test -d /test/test1);
then $(hadoop fs -touchz /test/test1);
else $(hadoop fs -mkdir -p /test/test1 );
fi
#删除
if $(hadoop fs -test -d /test/test1);
then $(hadoop fs -rm/test/test1);
else $(hadoop fs -rm  /test/test1 );
fi



  • 向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;
hadoop fs -appendToFile local.txt /test/test.txt

请添加图片描述

  • 删除HDFS中指定的文件;
hadoop fs -rm /test/text.txt

请添加图片描述

  • 删除HDFS中指定的目录,由用户指定目录中如果存在文件时是否删除目录;
if $(hadoop fs -test -d /test/test1);
then $(hadoop fs -rm -r /test/test1);
else $(hadoop fs -rm -r /test/test1 );
fi

请添加图片描述
请添加图片描述

  • 在HDFS中,将文件从源路径移动到目的路径。
hadoop fs -mv /test/test.txt  /test2

请添加图片描述

请添加图片描述

  1. 编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:
  • 实现按行读取HDFS中指定文件的方法“readLine()”。
  • 如果读到文件末尾,则返回空,否则返回文件一行的文本。
package
### 大数据实验 HDFS教程 #### 实验目标 在Linux环境中编写读取和写入HDFS文件的代码,使用`jar`命令打包代码,在master服务器上运行HDFS读写程序。此外,还将在Windows上安装Eclipse Hadoop插件,并在Eclipse环境中编写读取和写入HDFS文件的代码,最后利用Xftp工具将实验电脑上的文件上传至master服务器。 #### 准备工作 为了确保能够顺利执行这些操作,需要先确认已正确配置Java环境以及Hadoop集群设置。对于任何涉及路径错误的问题,比如遇到`Wrong FS:hdfs://localhost:9000/user/hadoop/input.txt, excepted: file:///`这样的提示时,应检查当前使用的文件系统URI是否匹配实际需求[^4]。 #### 编码实现 以下是用于向HDFS写入文件的一个简单Java类示例: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class WriteToHDFS { public static void main(String[] args) throws Exception{ Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path srcPath = new Path("/local/path/to/file"); // 替换为本地源文件路径 Path dstPath = new Path("hdfs://namenode:8020/destination/path/in/HDFS"); // 替换为目标HDFS路径 fs.copyFromLocalFile(srcPath, dstPath); System.out.println("成功复制到HDFS!"); fs.close(); } } ``` 编译并打包上述代码之后,可以通过如下命令将其提交给Hadoop集群来执行: ```bash $ hadoop jar your_program.jar com.yourpackage.WriteToHDFS /input/local/filepath /output/hdfspath ``` 同样地,可以从HDFS下载文件到本地系统的另一个例子如下所示: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class ReadFromHDFS { public static void main(String[] args)throws Exception{ Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path hdfsSrcPath = new Path("hdfs://namenode:8020/source/path/in/HDFS"); Path localDstPath = new Path("/local/path/to/save"); fs.copyToLocalFile(hdfsSrcPath, localDstPath); System.out.println("成功从HDFS下载!"); fs.close(); } } ``` 需要注意的是,当涉及到跨平台开发(如在Windows下创建项目),可以考虑借助IDE的支持简化流程。例如,在Windows操作系统中安装Eclipse IDE及其对应的Hadoop插件后,可以直接在此集成开发环境中完成项目的构建与测试工作。 #### 文件传输 一旦完成了代码编写与调试阶段的工作,则可通过SFTP客户端软件(如WinSCP或FileZilla)或者专门针对SSH协议设计的数据传输工具(如Xftp)把最终版本的应用程序包发送到远程主机上去进一步部署和验证其功能表现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值