大数据处理技术:分布式文件系统HDFS

目录

1 实验名称:

2 实验目的

3 实验内容

4 实验原理

5 实验过程或源代码

5.1 HDFS的基本操作

5.2 HDFS-JAVA接口之读取文件

5.3 HDFS-JAVA接口之上传文件

5.4 HDFS-JAVA接口之删除文件

6 实验结果

6.1 HDFS的基本操作

6.2 HDFS-JAVA接口之读取文件

6.3 HDFS-JAVA接口之上传文件

6.4 HDFS-JAVA接口之删除文件


1 实验名称:

       分布式文件系统HDFS

2 实验目的

       1.理解HDFS存在的优势,理解HDFS体系架构,学会在环境中部署HDFS学会HDFS基本命令。

       2.理解HDFS的读写操作原理,掌握HDFS的一些常用命令,理解实际操作HDFS读写时的流程。

3 实验内容

       (1)HDFS的基本操作

       (2)HDFS-JAVA接口之读取文件

       (3)HDFS-JAVA接口之上传文件

       (4)HDFS-JAVA接口之删除文件

4 实验原理

       HDFS(Hadoop Distributed File System)是一个分布式文件系统,是谷歌的GFS山寨版本。它具有高容错性并提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

      HDFS文件系统的角色分为三种(Master和Slave的结构,主从节点结构),分为NameNode、Secondary NameNode和DataNode三种角色。

       HDFS为分布式计算存储提供了底层支持,采用Java语言开发,可以部署在多种普通的廉价机器上,以集群处理数量积达到大型主机处理性能。HDFS 架构原理HDFS采用master/slave架构。一个HDFS集群包含一个单独的NameNode和多个DataNode。Namenode管理文件系统的元数据,而Datanode存储了实际的数据。

5 实验过程或源代码

5.1 HDFS的基本操作

       1.启动Hadoop,在HDFS中创建/usr/output/文件夹:

start-dfs.sh
hadoop fs -mkdir /usr
hadoop fs -mkdir /usr/output

       2.在本地创建hello.txt文件并添加内容:“HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。”:vim hello.txt

       3.将hello.txt上传至HDFS的/usr/output/目录下:hadoop fs -put hello.txt /usr/output

       4.删除HDFS的/user/hadoop目录:hadoop fs -rm -r /user/hadoop

       5.将Hadoop上的文件hello.txt从HDFS复制到本地/usr/local目录:hadoop fs -copyToLocal /usr/output/hello.txt /usr/local

5.2 HDFS-JAVA接口之读取文件

       1.使用FSDataInputStream获取HDFS的/user/hadoop/目录下的task.txt的文件内容,并输出。代码实现如下:

URI uri = URI.create("hdfs://localhost:9000/user/hadoop/task.txt");
        Configuration config = new Configuration();
        FileSystem fs = FileSystem.get(uri,config);
        InputStream in = null;
        try{
            in = fs.open(new Path(uri));
            IOUtils.copyBytes(in, System.out,2048,false);
        }catch (Exception e){
            IOUtils.closeStream(in);
        }

5.3 HDFS-JAVA接口之上传文件

       1.在/develop/input/目录下创建hello.txt文件,并输入如下数据:迢迢牵牛星,皎皎河汉女。纤纤擢素手,札札弄机杼。终日不成章,泣涕零如雨。河汉清且浅,相去复几许?盈盈一水间,脉脉不得语。《迢迢牵牛星》。命令行:

mkdir /develop
mkdir /develop/input
cd /develop/input
vim hello.txt
start-dfs.sh

       2.使用FSDataOutputStream对象将文件上传至HDFS的/user/tmp/目录下,并打印进度。代码实现如下:

File localPath = new File("/develop/input/hello.txt");
    String hdfsPath = "hdfs://localhost:9000/user/tmp/hello.txt";
    InputStream in = new BufferedInputStream(new FileInputStream(localPath));
    Configuration config = new Configuration();
    FileSystem fs = FileSystem.get(URI.create(hdfsPath), config);
    long fileSize = localPath.length() > 65536 ? localPath.length() / 65536 : 1; 
    FSDataOutputStream out = fs.create(new Path(hdfsPath), new Progressable() {
    long fileCount = 0;
    public void progress() {
        System.out.println("总进度" + (fileCount / fileSize) * 100 + "%");
        fileCount++;
    }
 });
    IOUtils.copyBytes(in, out, 2048, true);

5.4 HDFS-JAVA接口之删除文件

       1.启动hadoop:start-dfs.sh

       2.实现如下功能:删除HDFS的/user/hadoop/目录(空目录);删除HDFS的/tmp/test/目录(非空目录);列出HDFS根目录下所有的文件和文件夹;列出HDFS下/tmp/的所有文件和文件夹。代码实现如下:

String root = "hdfs://localhost:9000/";
    String path = "hdfs://localhost:9000/tmp";
    String del1 = "hdfs://localhost:9000/user/hadoop";
    String del2 = "hdfs://localhost:9000/tmp/test";
    Configuration config = new Configuration();
    FileSystem fs = FileSystem.get(URI.create(root),config);
    fs.delete(new Path(del1),true);
    fs.delete(new Path(del2),true);
    Path[] paths = {new Path(root),new Path(path)};
    FileStatus[] status = fs.listStatus(paths);
    Path[] listPaths = FileUtil.stat2Paths(status);
    for (Path path1 : listPaths){
System.out.println(path1);
}

6 实验结果

6.1 HDFS的基本操作

       1.文件输出结果

6.2 HDFS-JAVA接口之读取文件

       1.获取HDFS的/user/hadoop/目录下的task.txt的文件内容

6.3 HDFS-JAVA接口之上传文件

       1.文件上传并打印进度

6.4 HDFS-JAVA接口之删除文件

       1.删除文件输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

茜茜西西CeCe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值