赞
踩
参考资料为:
教材代码-林子雨编著《大数据基础编程、实验和案例教程(第2版)》教材所有章节代码_厦大数据库实验室博客
1.实验学时
4学时
2.实验目的
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包的时候,需要注意导入包的数量,注意不要漏导入包。
3.在运行完成主程序之后,需要在hdfs上查看是否成功运行生成对应文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。