参考资料为:
教材代码-林子雨编著《大数据基础编程、实验和案例教程(第2版)》教材所有章节代码_厦大数据库实验室博客
1.实验学时
4学时
2.实验目的
- 熟悉HDFS的基本shell命令
- 熟悉HDFS的web管理
- 掌握HDFS编程实践
3.实验内容
(一)参考实验指南的内容,完成相关的HDFS的基本shell命令。
先启动hadoop:
输入命令查看hdfs dfs支持的操作:
查看具体命令的作用:
先新建文件夹:
运行命令显示HDFS与当前用户对应目录下的内容:
创建input目录:
删除input文件:
创建一个xml文件
复制文件到生成的input文件之中:
查看HDFS中txt文件的内容:
将txt文件移动到其他文件夹下:
后面查看:
(二)查看HDFS的网页管理界面。请描述网页界面中的各个参数的名称。
查看HDFS网页管理界面:
(三)完成eclipse的安装,在eclipse中创建项目,配置所需要的jar包,编写一个可以和HDFS相交互的Java应用程序。
安装完成之后进入:
进行对应包的调用之后,开始编写函数:下面为java代码
import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
/**
* 过滤掉文件名满足特定条件的文件
*/
class MyPathFilter implements PathFilter {
String reg = null;
MyPathFilter(String reg) {
this.reg = reg;
}
public boolean accept(Path path) {
if (!(path.toString().matches(reg)))
return true;
return false;
}
}
/***
* 利用FSDataOutputStream和FSDataInputStream合并HDFS中的文件
*/
public class MergeFile {
Path inputPath = null; //待合并的文件所在的目录的路径
Path outputPath = null; //输出文件的路径
public MergeFile(String input, String output) {
this.inputPath = new Path(input);
this.outputPath = new Path(output);
}
public void doMerge() throws IOException {
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fsSource = FileSystem.get(URI.create(inputPath.toString()), conf);
FileSystem fsDst = FileSystem.get(URI.create(outputPath.toString()), conf);
//下面过滤掉输入目录中后缀为.abc的文件
FileStatus[] sourceStatus = fsSource.listStatus(inputPath,
new MyPathFilter(".*\\.abc"));
FSDataOutputStream fsdos = fsDst.create(outputPath);
PrintStream ps = new PrintStream(System.out);
//下面分别读取过滤之后的每个文件的内容,并输出到同一个文件中
for (FileStatus sta : sourceStatus) {
//下面打印后缀不为.abc的文件的路径、文件大小
System.out.print("路径:" + sta.getPath() + " 文件大小:" + sta.getLen()
+ " 权限:" + sta.getPermission() + " 内容:");
FSDataInputStream fsdis = fsSource.open(sta.getPath());
byte[] data = new byte[1024];
int read = -1;
while ((read = fsdis.read(data)) > 0) {
ps.write(data, 0, read);
fsdos.write(data, 0, read);
}
fsdis.close();
}
ps.close();
fsdos.close();
}
public static void main(String[] args) throws IOException {
MergeFile merge = new MergeFile(
"hdfs://localhost:9000/user/hadoop/",
"hdfs://localhost:9000/user/hadoop/merge.txt");
merge.doMerge();
}
}
(四)生成jar包,部署相关的应用程序。
先生成一个文件夹存放信息:
之后右键工作区,弹出export:
之后在弹出的界面中选择java包下的文件,进入后填好运行的java类和将要保存到的包中:
之后文件开始打包:
打包完成之后,在对应的文件夹下发现打包好的文件:
删除merge文件之后,运行这个打包好的文件:
之后执行命令查看文件信息:
4.思考题
(一)Hadoop中HDFS包含哪些命令,这些命令各自代表什么意思?
1.创建目录
hdfs dfs -mkdir /
2.查看目录下载文件
hdfs dfa -ls / hdfs dfs -ls /
3. 上传本地文件
hdfs dfs -put a.txt /
4.删除文件/目录
删除文件hdfs dfs -rm /test/a.txt 删除目录hdfs dfs -rm -r /test
5. 复制文件
hdfs dfs -cp /test/a.txt /
(二)Hadoop创建的应用程序,需要导入哪些安装包,这些安装包里面有什么功能?
1. hadoop-common-2.7.1.jar 2. haoop-hdfs-2.7.1.jar
3.haoop-hdfs-nfs-2.7.1.jar; 4. haoop-nfs-2.7.1.jar
安装包的内部对应的目录有着以下的功能:
sbin目录:存放启动或停止hadoop相关服务的脚本
bin目录:存放对hadoop相关服务(HDFS,YARN)进行操作的脚本
etc目录:hadoop的配置文件目录,存放hadoop的配置文件
share目录:存放hadoop的依赖jar包和文档,文档可以被删除掉
5、lib目录:存放hadoop的本地库(对数据进行压缩解压缩功能)
5.实验结论和体会
1.运行hdfs的时候,需要注意先启动hadoop系统,如果不清楚对应的hdfs的操作,可以使用./bin/hdfs dfs,命令查看。
2.在ecplise导入jar包的时候,需要注意导入包的数量,注意不要漏导入包。文章来源:https://www.toymoban.com/news/detail-717974.html
3.在运行完成主程序之后,需要在hdfs上查看是否成功运行生成对应文件。文章来源地址https://www.toymoban.com/news/detail-717974.html
到了这里,关于云计算技术 实验四 HDFS操作方法和基础编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!