大数据实验3: HDFS基础编程

实验3 HDFS基础编程

一、实验目的

  1. HDFS的shell命令使用
  2. HDFS的JAVA API使用;

二、实验平台

  1. 操作系统:Linux(Ubuntu16.04);
  2. Hadoop版本:3.3.1;
  3. JDK版本:1.8;
  4. Java IDE:Eclipse。

实验3具体请参见: HDFS编程实践(Hadoop3.1.3)_厦大数据库实验室博客/

三、实验步骤

(一)启动Hadoop;
1)启动hadoop相关进程并证明启动成功;

  1. 执行hdfs dfs 命令,分析结果理解该命令的功能

hdfs dfs 命令是Hadoop分布式文件系统(HDFS)的命令行接口,用于执行各种文件系统操作。这个命令后面通常会跟一个子命令,用于指定具体的操作类型。

1、hdfs dfs -ls [path]:列出指定路径下的文件和目录。

(如果不指定路径,默认列出根目录下的文件和目录。)

2、 hdfs dfs -mkdir [path]:在指定路径下创建一个新目录。

3、hdfs dfs -put localpath hdfspath:将本地文件系统中的文件上传到HDFS。

4、hdfs dfs -get hdfspath localpath:从HDFS下载文件到本地文件系统。

5、hdfs dfs -copyFromLocal localpath hdfspath:也是将本地文件复制到HDFS。

6、hdfs dfs -copyToLocal hdfspath localpath:也是从HDFS复制文件到本地。

7、hdfs dfs -rm [path]:删除指定路径下的文件或目录。

8、 hdfs dfs -rmdir [path]:删除指定的空目录。

9、hdfs dfs -mv source_path destination_path:移动或重命名文件或目录。

10、hdfs dfs -cat [path]:显示文件内容,如果路径是一个目录,则显示目录下所有文件的列表。

11、hdfs dfs -chmod [mode] [path]:更改文件或目录的权限。

12、hdfs dfs -chown [owner][:[group]] [path]:更改文件或目录的所有者和/或组。

13、hdfs dfs -du [path]:显示指定路径下的文件或目录的大小。

14、hdfs dfs -count [path]:显示指定路径下的文件或目录的详细信息,包括大小、数量等。

3)查看hdfs dfs 中put和get命令的详细用法,并理解分析;

1、hdfs dfs -put localfile hdfsdir1

在 Hadoop 分布式文件系统(HDFS)中的作用是将本地文件系统中的文件 localfile 上传到 HDFS 上的目录 hdfsdir1 中。这里是该命令的详细解释:

    hdfs dfs:是 Hadoop 文件系统的命令行接口,用于执行各种文件系统操作。

    -put:子命令,用于将本地文件或目录复制到 HDFS。

    localfile:要上传的本地文件的名称,它应该存在于你执行命令的本地文件系统中。

    hdfsdir:这是 HDFS 中的目标目录。如果这个目录不存在,-put 命令会尝试创建(若配置允许)。如果 hdfsdir 是一个文件而不是目录,命令会失败。

命令执行后,localfile 的内容将被复制到 HDFS 的 hdfsdir1 目录下,并且文件名保持不变。

2. hdfs dfs -get hdfsfile localdir

将存储在 Hadoop 分布式文件系统(HDFS)中的文件 hdfsfile 下载到本地文件系统的目录 localdir 中。这里是该命令的详细说明:

    hdfs dfs:这是 Hadoop 文件系统的命令行接口,用于执行文件系统相关的操作。

    -get:这是 hdfs dfs 命令的一个子命令,用于从 HDFS 获取文件。

    hdfsfile:这是存储在 HDFS 中的文件的路径。

localdir:这是本地文件系统中的目标目录,用于存放从 HDFS 下载的文件。如果目录不存在,命令可能会失败,除非指定了创建目录的选项。

  • 利用Hadoop提供的Shell命令完成下列任务:
(1)在本地创建三个文件并输入自定义的内容备用,并依次将三个文件的内容输出到终端;

(2)在HDFS中创建以自己姓名首拼音命名的文件夹,向HDFS中创建的文件夹中上传(1)中任意文本文件,并检查是否上传成功;

3)在(2)中上传的文件中追加第二个文本文件的内容,并验证追加内容成功;

4)将(2)上传的文件下载到当前目录,并验证下载成功;

(5)将HDFS中(2)中文件的内容输出到终端中;

6)显示HDFS中(2)中文件的读写权限、大小、创建时间、路径等信息;

7)在HDFS中,将文件从源路径移动到hdfs的姓名拼音首字母的文件夹目录下的temp文件夹中,然后将(2)中上传的文件删除,验证操作是否成功。

(8)提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。考虑文件所在目录存在和不存在的两种情况,如果文件所在目录不存在,则自动创建目录;

(9)利用web端查看HDFS中的文件系统信息

(三)编写Java程序解决下列问题(给出关键代码和运行结果图)

在Eclipse中,为项目 HadoopExperiment配置Hadoop环境

  1. 读取HDFS系统指定目录“/bigdata/experiment3”中的所有.txt文件内容并输出至控制台(自行创建文件夹,上传文件,文件后缀类型包含.java和.txt,需要使用过滤器)(参考P62例子);

创建目录 /bigdata/experiment3

2)然后新建一个文件merge.txt,将前面(1).txt文件的内容合并写到新建文件中(参考P62例子);

3)编程设计一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:

myReadLine()方法,实现按行读取HDFS中指定文件的方法,如果读到文件末尾,则返回空并在控制台输出“end!“,否则返回文件一行的文本。

readOddLine():实现按行读取HDFS中指定文件中奇数行的内容,如果读到文件末尾,则返回空并在控制台输出“odd line-end!“,否则返回文件一行的文本。

readEvenLine():实现按行读取HDFS中指定文件中偶数行的内容,如果读到文件末尾,则返回空并在控制台输出“even line-end!“,否则返回文件一行的文本。

程序代码:

  1. 根据文件最后附录1中的数据存在命名为data.txt,上传至HDFS中 /use/root/学号 目录下,并使用2中设计的类MyFSDataInputStream类解决后续问题

1\创建 HDFS 目录(如果不存在):

   hdfs dfs -mkdir -p /user/root/22111303195

2. 上传 `data.txt` 文件到 HDFS:

hdfs dfs -put data.txt /user/root/22111303195

3. 验证文件是否上传成功:

   hdfs dfs -ls /user/root/22111303195

(4)将data.txt中序号为偶数的数据打印在控制台;

测试程序代码:

c d

运行结果:

(5)将data.txt中序号为奇数的数据打印在控制台;

测试程序代码:

运行结果:

  • 问题与收获

在配置Hadoop环境时,遇到了一些困难,主要是环境变量的设置和Java版本兼容性问题。使用HDFS的Java API进行编程时,对于API的某些方法和类的继承关系理解不够深入,导致编程时出现了一些逻辑错误。通过阅读Hadoop的API文档和一些示例代码,加深了对HDFS Java API的理解。

通过本次实验,加深了对Hadoop分布式文件系统(HDFS)的理解和认识。通过亲自操作和编写代码,提高了解决实际问题的能力。掌握了HDFS Shell命令的基本用法,能够在命令行下进行文件系统的操作。

继续深入学习Hadoop和HDFS的原理和架构,为解决更复杂的问题打下理论基础。通过多做实验和项目,积累实践经验,并及时总结和反思。

注:

实验报告以“学号+姓名+实验3.pdf”作为附件上传到学习通的相关作业任务中

附录1:

1 2300024001 male 88

2 2300024002 female 83

3 2300024003 female 61

4 2300024004 female 51

5 2300024005 female 79

6 2300024006 male 89

7 2300024007 male 79

8 2300024008 male 76

9 2300024009 male 82

10 2300024010 male 79

11 2300024012 male 69

12 2300024013 male 75

13 2300024014 male 51

14 2300024015 male 63

15 2300024016 male 52

16 2300024017 female 100

17 2300024018 male 62

18 2300024019 male 98

19 2300024020 male 88

20 2300024021 male 95

21 2300024022 female 65

22 2300024023 male 80

23 2300024024 male 70

24 2300024025 male 74

25 2300024026 male 61

26 2300024027 male 95

27 2300024028 female 100

28 2300024029 male 74

29 2300024030 male 55

30 2300024031 male 72

31 2300024032 male 76

32 2300024033 female 95

33 2300024034 male 91

34 2300024034 male 90

35 2300024035 male 80

36 2300024036 female 80

37 2300024037 male 87

38 2300024038 female 82

39 2300024039 female 75

40 2300024040 female 100

41 2300024041 female 87

42 2300024042 female 90

43 2300024043 female 93

44 2300024044 female 87

45 2300024045 female 92

46 2300024046 female 90

47 2300024047 female 70

48 2300024048 female 61

49 2300024049 female 64

50 2300024050 female 82

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453348.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

498.对角线遍历

目录 题目解法代码说明:输出: 如何确定起始点?解释一下max(0,d−m1)是什么意思? 如何遍历对角线?.push_back是怎么用的? 题目 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序&#xf…

Java知识巩固(七)

目录 面向对象 面向对象三大特征 封装 继承 多态 多态 深拷贝和浅拷贝区别了解吗?什么是引用拷贝? 浅拷贝 深拷贝 面向对象 万物皆为对象,也就是描述某个事物解决问题的过程中所发生的事情。 面向对象三大特征 封装 封装是指把一个对象的状态信息&…

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…

C++ string(2)

文章目录 1.初识迭代器和范围for1.1迭代器1.2范围for1.3 aout关键字 2.字符串长度相关计算1.size 和 length2. capacity 和 reserve 3.例题演示1. [917. 仅仅反转字母 - 力扣(LeetCode)](https://leetcode.cn/problems/reverse-only-letters/description…

spring day 1021

ok了家人们,这周学习spring框架,我们一起去看看吧 Spring 一.Spring概述 1.1 Spring介绍 官网: https://spring.io/ 广义的 Spring : Spring 技术栈 (全家桶) 广义上的 Spring 泛指以 Spring Framework…

Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

Spring AI:Java开发者的AI集成新利器 在过去,Java开发者在构建AI应用时面临着缺乏统一框架的问题,导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生,旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台…

浅说差分算法(下)

我们上节课学了一维的差分,但其实还有二维差分,只是比较难写。 差分 二维差分的定义 二维差分是指对于一个n*m的矩阵a,要求支持操作pro(x1,y1,x2,y2,a),表示对于以(x1,y1)为左上角,(x2,y2)为右下角的矩形区域&#…

生产车间质量管理有什么用?怎么做?

在生产车间的质量管理中,科学有效的管理方法和严格规范的执行流程是至关重要的,它能够帮助企业提高产品质量、降低次品率、确保生产过程的稳定性和效率。然而,许多企业在生产车间质量管理方面存在诸多问题,常常会面临以下困境&…

多微批量自动加好友

在数字化时代,微信不仅是社交通讯的工具,更是一个拥有庞大用户基础的流量平台。对于企业而言,微信是打造私域流量池的理想选择之一。然而,随着微信号的增多,手动添加好友和备注变得既繁琐又耗时。幸运的是,…

UNI VFX Missiles Explosions for Visual Effect Graph

Unity URP和HDRP的通用视觉效果 使用在视觉效果图中制作的高性能GPU粒子系统。 无需进入视觉效果图编辑器即可轻松自定义VFX。 使用(VFX)事件——一个游戏对象可存储多个效果,这些效果可通过C#或视觉脚本触发。 总共32个事件(不包括“停止”事件)。 ❓ 什么是(VFX)事件?…

Cpp::STL—容器适配器Stack和Queue的讲解和模拟实现(15)

文章目录 前言一、适配器模式概念分类 二、Stack核心作用代码实现 三、Queue核心作用代码实现 四、deque双端队列貌似兼收并蓄?实则也难以兼得~ 总结 前言 适配器也是STL六大组件之一,请跟我一起领悟它的智慧!   正文开始! 一、…

consumer 角度讲一下i2c外设

往期内容 I2C子系统专栏: I2C(IIC)协议讲解-CSDN博客SMBus 协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析:注册篇内核提供的通用I2C设备驱动I2C-dev.…

浅析建造者模式

建造者模式 一、基础知识介绍 1. 问题引出 上图面存在的问题:产品和产品创建的过程是封装在一起的。耦合性太强 解决方法: 将二者解耦和 2.建造者模式介绍 将复杂对象的构造过程抽象出来,用户不用知晓里面的构建细节 3.四个角色 建造者模式的四个角…

Java项目-基于springboot框架的财务管理系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

【element-tiptap】如何修改选中内容时的背景颜色?

前言:element-tiptap 用鼠标选中内容的时候,背景颜色跟系统设置的主题有关,比如的我的就是卡哇伊的pink,默认是淡蓝色 但是我们观察一下语雀,背景颜色是它规定好的颜色 这篇文章来探索一下,怎么自己规定选…

实操上手TinyEngine低代码引擎插件化开发

1.背景介绍 1.1 TinyEngine 低代码引擎简介 低代码开发是近些年非常热门的一种开发方式,用户可以通过可视化的方式,简单拖拽,不写代码或者编写少量代码,类似搭积木一样搭建业务应用。 TinyEngine是一个强大的低代码引擎&#x…

企业博客SEO优化:8个必备工具与资源指南

在当今数字化时代,企业博客已远远超越了传统意义上的信息展示平台。它不仅是企业展示品牌形象、传递品牌价值的重要窗口,更是吸引潜在客户、增强用户粘性、提升网站流量和搜索引擎排名的关键。通过精心策划和高质量的内容创作,企业博客能够建…

ChatGPT4o、o1 谁才是最佳大模型?

如何选择合适的 ChatGPT 模型?OpenAI 更新细节与 GPTs 的深入解析 随着人工智能的发展,ChatGPT 已成为众多用户的强大助手,广泛应用于写作、编程、学习和商业等多个领域。然而,面对 OpenAI 提供的众多模型(如 GPT-4、…

idea中,git提交时忽略某些本地修改.将文件从git暂存区移除

我们有时候在本地调试代码时,某些配置文件需要修改成本地环境中。当改完后,需要提交代码时,这些文件又不能推到git上。如下图: 当出现这种情况,我们每次都需要手动去将不需要提交的文件的对号去掉。文件多了后&#x…

[Redis] 在Linux中安装Redis并连接图形化工具详细过程(附下载链接)

前言 安装Redis之前应该在虚拟机中安装Linux系统,这里使用centos7版本 [linux] 在VMware中安装linux、文件下载及详细安装过程(附下载链接)-CSDN博客 安装Linux后,更换yum源为阿里云并安装gcc依赖 [Linux] CentOS7替换yum源为阿…