大数据实验3: HDFS基础编程 (shell命令、JAVA API使用)

实验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.mzph.cn/news/882743.shtml

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

相关文章

C++20中头文件source_location的使用

<source_location>是C20中新增加的头文件&#xff0c;此头文件是utility库的一部分。 主要内容为类std::source_location&#xff1a;表示有关源代码的某些信息&#xff0c;例如文件名(__FILE__)、行号(__LINE__)和函数名(__func__)。 以下为测试代码&#xff1a; names…

交易之路:如何找到适合自己的交易品种

大部分新手交易者最容易陷入的误区就是盲目跟风&#xff0c;他们倾向于选择那些被众人追捧且看似成功的交易品种&#xff0c;认为既然大家都在做&#xff0c;那么一定有利可图。然而&#xff0c;他们忽略了交易品种选择的核心原则&#xff1a;基于个人的深入测试与理解&#xf…

传统企业营销新起点:百科词条构建基础策略!

合作咨询联系竑图 hongtu201988 搜索你的企业名称&#xff0c;出现的结果是什么&#xff1f;是否大部分都是信用网站的基础注册信息&#xff1f;没有正面的企业形象展示&#xff1f; 如果企业做了百度词条呢&#xff1f;会是一个什么结果呢&#xff1f; 以上两种结果带给大家的…

百度智能云千帆 ModelBuilder 大模型服务及开发解读

本文整理自百度云智峰会 2024 —— 大模型平台技术实践论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://cloud.baidu.com/summit/AIcloudsummit_2024/index.html 最近大模型产业应用圈子里有一句非常流行的话&#xff0c;叫做度日如年。不是说这件…

自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords

首先&#xff0c;TDK是什么&#xff1f;对于新手小白来说&#xff0c;可能是懵逼的&#xff0c;所以这里给出一个官方的解说‌网页的TDK是指标题&#xff08;Title&#xff09;、描述&#xff08;Description&#xff09;和关键词&#xff08;Keywords&#xff09;的集合‌。这…

【服务器】服务器 BMC(基板管理控制器,Baseboard Management Controller)

基板管理控制器&#xff08;BMC&#xff0c;Baseboard Management Controller&#xff09;是用于监控和管理服务器的专用控制器&#xff0c;用通俗的话讲&#xff0c;BMC 是主机服务器系统下的一个独立系统。这个独立系统有自己的处理器和内存&#xff0c;即使主机硬件或操作系…

开源限流组件分析(一):juju/ratelimit

文章目录 本系列前言数据结构对外提供接口初始化令牌桶获取令牌 核心方法adjustavailableTokenscurrentTicktakeTakeAvailableWait系列 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit&#xff08;本文&#xff09;开源限流组件分析&#xff0…

Race Track Generator Ultimate:Race Track Generator(赛车场赛道看台场景创建工具)

下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

【论文阅读】Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting

文章目录 概要阅读背景知识引言创新之处 研究方法概述方法部分的核心模块多尺度打补丁&#xff08;Multi-Scale Patching&#xff09;Mamba&#xff1a;全局模式专家Local Window Transformer&#xff08;LWT&#xff09;&#xff1a;局部变化专家长短期路由器&#xff08;Long…

Bootstrap Blazor实现多个Select选择器联合选择

Bootstrap Blazor官方目前只提供单个Select选择器&#xff0c;如果要想实现下图所示的多个Select选择器联合选择&#xff0c;则需要通过编写自定义组件来实现。 主要通过Bootstrap的data-bs-toggle属性来实现展开和折叠效果。 .razor文件内容如下&#xff1a; typeparam TValu…

【路径规划】蚁群算法的优化计算——旅行商问题(TSP)优化

摘要 旅行商问题&#xff08;TSP&#xff09;是一种经典的组合优化问题&#xff0c;其目标是找到一条遍历所有城市且总路程最短的环路。由于其计算复杂度高&#xff0c;求解大规模TSP问题往往依赖于启发式算法。本文研究了基于蚁群算法&#xff08;Ant Colony Optimization, A…

034_基于php万怡酒店管理系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

python之数据结构与算法(数据结构篇)-- 字典

一、字典的概念 这里我使用“小羊们”举例子&#xff0c;现在我需要去创建一个"羊村小羊们的身高"字典去保存小羊们的身高&#xff0c;对小羊们的身高进行查询、增加、删除、遍历等一系列操作。去更好的理解&#xff0c;字典是个什么东东&#xff01;&#xff01;&…

Java根据word 模板,生成自定义内容的word 文件

Java根据word 模板&#xff0c;生成自定义内容的word 文件 背景1 使用技术2 实现方法依赖啊 3 问题4 背景 主要是项目中需要定制化一个word&#xff0c;也就是有一部分是固定的&#xff0c;就是有一个底子&#xff0c;框架&#xff0c;里面的内容是需要填充的。然后填充的内容…

宝塔部署前后端分离若依项目--CentOS7版

准备&#xff1a; CentOS7服务器一台 通过网盘分享的文件&#xff1a;CentOS 7 h 链接: https://pan.baidu.com/s/17DF8eRSSDuj9VeqselGa_Q 提取码: s7x4 大家有需要可以下载这个&#xff0c;密码61 若依前端编译后文件 通过网盘分享的文件&#xff1a;ruoyi-admin.jar 链…

基于SSM网络在线考试系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;在线考试管理&#xff0c;试题管理&#xff0c;考试管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;在线考试&#xff0c;公告信…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

印章图片怎么抠出透明背景?这4个一键抠图工具建议收藏!

在处理印章图片时&#xff0c;背景色的存在往往成为影响使用效果的一大障碍&#xff0c;特别是在需要将印章与不同背景融合时&#xff0c;不透明的背景色会显得尤为突兀。为了应对这一挑战&#xff0c;市场上涌现了一系列高效的一键抠图工具&#xff0c;它们能够迅速将印章图片…

Scala的继承

Scala中的继承是指在原有的类的基础上定义一个新类&#xff0c;原有的类称为父类&#xff0c;新类成为子类 例&#xff1a; class Animal(){var leg4def run():Unit{println("animal run.....")} } //继承&#xff1a;不劳而获 class Dog extends Animal(){} object…

ORB-SLAM2 ---- Frame中在主函数中被调用的函数

文章目录 一、Frame::isInFrustum1. 函数讲解2. 源码 二、Frame::GetFeaturesInArea1. 函数讲解2. 函数源码 三、Frame::ComputeBoW1. 函数讲解2. 函数源码 四、Frame::UnprojectStereo1. 函数讲解2. 函数源码 五、总结 一、Frame::isInFrustum 1. 函数讲解 此函数判断地图点…