云计算技术 实验四 HDFS操作方法和基础编程

参考资料为:

教材代码-林子雨编著《大数据基础编程、实验和案例教程(第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包的时候,需要注意导入包的数量,注意不要漏导入包。

3.在运行完成主程序之后,需要在hdfs上查看是否成功运行生成对应文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stearm210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值