【大数据技术基础 | 实验四】HDFS实验:读写HDFS文件

在这里插入图片描述

文章目录

    • 一、实验目的
    • 二、实验要求
    • 三、实验原理
      • (一)Java Classpath
      • (二)Eclipse Hadoop插件
    • 四、实验环境
    • 五、实验内容和步骤
      • (一)配置master服务器classpath
      • (二)使用master服务器编写HDFS读写程序
      • (三)安装与配置Eclipse Hadoop插件
      • (四)使用Eclipse开发HDFS读写程序
    • 六、实验结果
    • 七、实验心得


一、实验目的

  1. 会在Linux环境下编写读写HDFS文件的代码;
  2. 会使用jar命令打包代码;
  3. 会在master服务器上运行HDFS读写程序;
  4. 会在Windows上安装Eclipse Hadoop插件;
  5. 会在Eclipse环境编写读写HDFS文件的代码;
  6. 会使用Eclipse打包代码;
  7. 会使用Xftp工具将实验电脑上的文件上传至master服务器。

二、实验要求

实验结束时,每位学生均已搭建HDFS开发环境;编写了HDFS写、读代码;在master机上执行了该写、读程序。通过实验了解HDFS读写文件的调用流程,理解HDFS读写文件的原理。

三、实验原理

(一)Java Classpath

Classpath设置的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。

Java执行环境本身就是一个平台,执行于这个平台上的程序是已编译完成的Java程序(后面会介绍到Java程序编译完成之后,会以.class文件存在)。如果将Java执行环境比喻为操作系统,如果设置Path变量是为了让操作系统找到指定的工具程序(以Windows来说就是找到.exe文件),则设置Classpath的目的就是让Java执行环境找到指定的Java程序(也就是.class文件)。

有几个方法可以设置Classpath,较简单的方法是在系统变量中新增Classpath环境变量。以Windows 7操作系统为例,右键点击计算机→属性→高级系统设置→环境变量,在弹出菜单的“系统变量”下单击“新建”按钮,在“变量名”文本框中输入Classpath,在“变量值”文本框中输入Java类文件的位置。例如可以输入.; D:\Java\jdk1.7.0_79\lib\tools.jar; D:\Java\jdk1.7.0_79\lib\rt.jar,每一路径中间必须以英文;作为分隔。

在这里插入图片描述
事实上JDK 7.0默认就会到当前工作目录(上面的.设置),以及JDK的lib目(这里假设是D:\Java\jdk1.7.0_796\lib)中寻找Java程序。所以如果Java程序是在这两个目录中,则不必设置Classpath变量也可以找得到,将来如果Java程序不是放置在这两个目录时,则可以按上述设置Classpath。

如果所使用的JDK工具程序具有Classpath命令选项,则可以在执行工具程序时一并指定Classpath。例如:javac -classpath classpath1;classpath2...其中classpath1、classpath 2是实际要指定的路径。也可以在命令符模式下执行以下的命令,直接设置环境变量,包括Classpath变量(这个设置在下次重新打开命令符模式时就不再有效):set CLASSPATH=%CLASSPATH%;classpath1;classpath2...总而言之,设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件)。

(二)Eclipse Hadoop插件

Eclipse是一个跨平台的自由集成开发环境(IDE)。通过安装不同的插件,Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具,亦可以通过hadoop插件来扩展开发Hadoop相关程序。

实际工作中,Eclipse Hadoop插件需要根据hadoop集群的版本号进行下载并编译,过程较为繁琐。为了节约时间,将更多的精力用于实现读写HDFS文件,在大数据实验一体机的相关下载页面中已经提供了2.7.1版本的hadoop插件和相关的hadoop包下载,实验人员可以直接下载这些插件,快速在Eclipse中进行安装,开发自己的hadoop程序。

四、实验环境

  • 云创大数据实验平台:
    在这里插入图片描述
  • Java 版本:jdk1.7.0_79
  • Hadoop 版本:hadoop-2.7.1
  • Eclipse 版本:eclipse-jee-luna-SR2-win32-x86_64

五、实验内容和步骤

该实验的前提是部署HDFS,具体步骤可参考:【大数据技术基础 | 实验三】HDFS实验:部署HDFS

这里采用一键搭建的方式,将HDFS部署完成并启动Hadoop集群(包括hdfs和yarn),使用jps命令查看进程:

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

(一)配置master服务器classpath

使用SSH工具登录master服务器,执行命令:

vim /etc/profile

编辑该文件,将末尾加入如下几行:

JAVA_HOME=/usr/local/jdk1.7.0_79/
export HADOOP_HOME=/usr/cstor/hadoop
export JRE_HOME=/usr/local/jdk1.7.0_79//jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

在这里插入图片描述

添加成功之后保存文件,然后再执行如下命令,让刚才设置的环境变量生效:

source /etc/profile

(二)使用master服务器编写HDFS读写程序

1. 在master服务器编写HDFS写程序

在master服务器上执行命令vim WriteFile.java,编写HDFS写文件程序:

vim WriteFile.java

在文件内写入如下java程序代码然后保存退出。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class WriteFile {public static void main(String[] args)throws Exception{Configuration conf=new Configuration();FileSystem hdfs = FileSystem.get(conf);Path dfs = new Path("/weather.txt");FSDataOutputStream outputStream = hdfs.create(dfs);outputStream.writeUTF("nj 20161009 23\n");outputStream.close();}
}

在这里插入图片描述

在这里插入图片描述
2. 编译并打包HDFS写程序

使用javac编译刚刚编写的java代码,并使用jar命令打包为hdpAction1.jar

javac WriteFile.java
jar -cvf hdpAction1.jar WriteFile.class

在这里插入图片描述

3. 执行HDFS写程序

在master服务器上使用hadoop jar命令执行hdpAction1.jar

hadoop jar ~/hdpAction1.jar WriteFile

查看是否已生成weather.txt文件,若已生成,则查看文件内容是否正确:

hadoop fs -ls /
hadoop fs -cat /weather.txt

在这里插入图片描述

4. 在master服务器编写HDFS读程序

在master服务器上执行命令vim ReadFile.java,编写HDFS读文件程序:

vim ReadFile.java

然后填入如下java程序:

import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;public class ReadFile {public static void main(String[] args) throws IOException {Configuration conf = new Configuration();Path inFile = new Path("/weather.txt");FileSystem hdfs = FileSystem.get(conf);FSDataInputStream inputStream = hdfs.open(inFile);System.out.println("myfile: " + inputStream.readUTF());inputStream.close();}
}

在这里插入图片描述

在这里插入图片描述
5. 编译并打包HDFS读程序

使用javac编译刚刚编写的代码,并使用jar命令打包为hdpAction2.jar

javac ReadFile.java
jar -cvf hdpAction2.jar ReadFile.class

在这里插入图片描述

6. 执行HDFS读程序

在master服务器上使用hadoop jar命令执行hdpAction2.jar,查看程序运行结果:

hadoop jar ~/hdpAction2.jar ReadFile

在这里插入图片描述

(三)安装与配置Eclipse Hadoop插件

关闭Eclipse软件,将hadoop-eclipse-plugin-2.7.1.jar文件拷贝至eclipse安装目录的plugins文件夹下。(该jar包可以到文末链接下载)

在这里插入图片描述
接下来,我们需要准备本地的Hadoop环境,用于加载hadoop目录中的jar包,只需解压hadoop- 2.7.1.tar.gz文件。

在这里插入图片描述
现在,我们需要验证是否可以用Eclipse新建Hadoop(HDFS)项目。打开Eclipse软件,依次点击File->New->Other,查看是否已经有 Map/Reduce Project 的选项。

在这里插入图片描述
在这里插入图片描述
这里如果没有出现这个选项的话,需要去Eclipse安装路径下的configuration文件中把org.eclipse.update删除,这是因为在org.eclipse.update文件夹下记录了插件的历史更新情况,它只记忆了以前的插件更新情况,而你新安装的插件它并不记录,之后再重启Eclipse就会出现这个选项了。

第一次新建Map/Reduce项目时,需要指定hadoop解压后的位置。如图所示。

在这里插入图片描述

(四)使用Eclipse开发HDFS读写程序

1. 使用Eclipse编写并打包HDFS写文件程序

打开Eclipse,依次点击File->New->Map/Reduce Project或File->New->Other->Map/Reduce Project,新建项目名为WriteHDFS的Map/Reduce项目。

新建WriteFile类并编写如下代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;public class WriteFile {public static void main(String[] args)throws Exception{Configuration conf=new Configuration();FileSystem hdfs = FileSystem.get(conf);Path dfs = new Path("/weather.txt");FSDataOutputStream outputStream = hdfs.create(dfs);outputStream.writeUTF("nj 20161009 23\n");outputStream.close();}
}

注意:因为本实验平台大数据集群是使用的jdk1.7版本,必须要使用相同版本才行,如果你是jdk1.8版本,也不用重新配置1.7版本,只需要在Eclipse切换执行环境就行,具体操作如下:

在这里插入图片描述
接着,在Eclipse左侧的导航栏选中该项目的WriteFile.java文件,点击Export->Java->JAR File,导出为hdpAction1.jar

在这里插入图片描述
在这里插入图片描述
然后填写导出文件的路径和文件名,自定义:

在这里插入图片描述
然后点击下一步,再点击下一步,然后配置程序主类,这里必须要选择主类,不然后面上传到服务器就会一直报错。

在这里插入图片描述
最后点击完成就打包完成。

2. 上传HDFS写文件程序jar包并执行

使用WinSCP、XManager或其它SSH工具的sftp工具上传刚刚生成的hdpAction1.jar包至master服务器:

在这里插入图片描述

然后在master服务器上使用如下命令执行hdpAction1.jar

hadoop jar ~/hdpAction1.jar WriteFile

查看是否已生成weather.txt文件,若已生成,则查看文件内容是否正确:

hadoop fs -ls /
hadoop fs -cat /weather.txt

在这里插入图片描述

3. 使用Eclipse编写并打包HDFS读文件程序

打开Eclipse,依次点击File->New->Map/Reduce Project或File->New->Other->Map/Reduce Project,新建项目名为ReadHDFS的Map/Reduce项目。这里建项目的方法和前面的一样,不再详细描述了。

新建ReadFile类并编写如下代码:

import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;public class ReadFile {public static void main(String[] args) throws IOException {Configuration conf = new Configuration();Path inFile = new Path("/weather.txt");FileSystem hdfs = FileSystem.get(conf);FSDataInputStream inputStream = hdfs.open(inFile);System.out.println("myfile: " + inputStream.readUTF());inputStream.close();}
}

在Eclipse左侧的导航栏选中该项目,点击Export->Java->JAR File,导出为hdpAction2.jar。和前面一样进行导包操作,注意要选择主类!

4. 上传HDFS读文件程序jar包并执行

使用WinSCP、XManager或其它SSH工具的sftp工具上传刚刚生成的hdpAction2.jar包至master服务器,并在master服务器上使用hadoop jar命令执行hdpAction2.jar,查看程序运行结果:

在这里插入图片描述

hadoop jar ~/hdpAction2.jar ReadFile

在这里插入图片描述

六、实验结果

1. HDFS写程序运行结果:

在这里插入图片描述

2. HDFS读程序运行结果:

在这里插入图片描述

七、实验心得

  在本次HDFS实验中,我成功地完成了HDFS文件的读写操作,并对Hadoop分布式文件系统的工作原理有了更深入的理解。实验的主要步骤包括在Linux环境中编写Java代码,用于向HDFS中写入和读取文件。通过使用Eclipse IDE进行代码开发,并将代码打包成JAR文件后,我在Hadoop集群的master服务器上运行了这些程序。

  实验的关键环节之一是掌握Java Classpath的设置方法,并理解Eclipse Hadoop插件的安装与配置。通过正确配置master服务器的环境变量,我顺利实现了HDFS读写程序的运行,并成功验证了实验结果。在实验过程中,还学会了使用Xftp等工具将本地开发的程序上传至master服务器,并执行相应的命令来测试HDFS文件的操作。

  总体而言,实验帮助我加深了对HDFS分布式文件系统的理解,特别是在大数据环境中文件的存储和读取操作,这为后续的Hadoop开发奠定了良好的基础。

:以上文中的数据文件及相关资源下载地址:
链接:https://pan.quark.cn/s/d872381814a0
提取码:qjda

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

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

相关文章

JVM学习总结:字节码篇

本文是学习尚硅谷宋红康老师主讲的 尚硅谷JVM精讲与GC调优教程 的总结 ,部分内容也参考了 JavaGuide 网站(文末有链接) JVM 概述 Oracle JDK 与 OpenJDK 是什么关系? 2006 年 SUN 公司将 Java 开源,也就有了 OpenJDK。…

Games202作业5(完结)

单帧降噪 也就是针对图像空间进行降噪 也就是我们需要在像素(i,j)的四周进行采样,然后将采样的权重加到一起,然后所有的权重和像素的乘积也加到一起,然后相除,得到最终滤波后的(i,j)像素期望的结果。 Buf…

P4可编程技术详解:从理论到硬件实现

P4的诞生 为打破传统的固定封装模式,充分解放数据平面的编程能力,Nick McKeown领导的斯坦福大学研究团队于2014年提出可编程处理语言P4。借助P4的数据平面编程能力,用户可在网卡、交换机、路由器等网络设备上实现包括VXLAN、MPLS等在内的各种…

电影评论网站开发:Spring Boot技术指南

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架,JAVA作为开发语言&#…

Linux文件的查找和打包以及压缩

文件的查找 文件查找的用处,在我们需要文件但却又不知道文件在哪里的时候 文件查找存在着三种类型的查找 1、which或whereis:查找命令的程序文件位置 2、locate:也是一种文件查找,但是基于数据库的查找 3、find:针…

基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

01 设计模式-创造型模式-工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使用工厂模式…

1.2.3 TCP IP模型

TCP/IP模型(接网叔用) 网络接口层 网络层 传输层 应用层 理念:如果某些应用需要“数据格式转换”“会话管理功能”,就交给应用层的特定协议去实现 tip:数据 局部正确不等于全局正确 但是,数据的 全局正…

数码准备记录

1.数据结构 常见的数据结构包括数组、链表、栈、队列、树(如二叉树、B树、B树)、图等 2.队列和栈的区别 队列是一种先入先出的数据结构,即最先加入的元素被最先移除; 栈是一种后进后出的数据结构,即最后加入的元素…

RTMP协议分析

理论 总体介绍 RTMP协议是应⽤层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建⽴完成后,RTMP协议也要客户端和服务器通过“握⼿”来建⽴基于传输层链接之上的RTMP Connection链…

Collection 单列集合 List Set

集合概念 集合是一种特殊类 ,这些类可以存储任意类对象,并且长度可变, 这些集合类都位于java.util中,使用的话必须导包 按照存储结构可以分为两大类 单列集合 Collection 双列集合 Map 两种 区别如下 Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两…

Electron-(二)桌面应用的启动动画创建

一、概述 在很多桌面应用中都会有启动画面的显示。启动画面可以解决在启动时耗时较长,将每一步反馈给用户。另外一方面解决启动过程中的环境检查及检查结果的反馈。 在当今的桌面应用领域,启动动画已成为提升用户体验的重要组成部分。它不仅仅是一个简单…

【Linux】main函数的参数列表从何而来?

Linux系统进程通过exec系列函数启动新程序时,argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数,显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中,main函数的标准参数列表通常如下所示: in…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏,包含多个选项,如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品,每个产品都有一个图片和简短的描述。页面下…

MySQL【知识改变命运】06

前言:在05这节数据结构里面,我们知道select * from 这个操作很危险,如果数据库很大,会把服务器资源耗尽,接下来提到的查询可以有效的限制返回记录 1:分页查询 分页查询可以有效控制一次查询出来的结果集的…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

图像中的数值计算

目录 图像读取与形状图像数据展示图像数据操作超出范围的像素值处理 图像读取与形状 使用cv2.imread函数读取图像文件。图像的形状通过shape属性获取&#xff0c;格式为(高度, 宽度, 颜色通道数)。 import cv2img1 cv2.imread(bg.jpg) img2 cv2.imread(fish.jpg)print(img1…

Linux服务器安装SRAToolkit教程

SRAToolkit是由NCBI&#xff08;美国国家生物技术信息中心&#xff09;提供的一个工具集&#xff0c;用于下载、读取和转换SRA&#xff08;Sequence Read Archive&#xff09;格式的数据文件。这些数据文件包含了大规模的核酸序列数据&#xff0c;对于基因组学研究至关重要。本…

pytorch激活函数介绍

在 PyTorch 中,激活函数(Activation Functions)是神经网络中重要的非线性组件,用于引入非线性,使网络能够学习复杂的函数关系。以下是 PyTorch 中常见的激活函数及其特点: 1. ReLU (Rectified Linear Unit) 函数: torch.nn.ReLU()公式: ReLU(x)=max⁡(0,x)特点: 常用于隐…

python-代码技巧

python-代码技巧 简单tips1、多个列表循环遍历2、使用map对列表中多个文件进行批量操作 仅个人笔记使用&#xff0c;感谢点赞关注 简单tips 1、多个列表循环遍历 dataTypes ["train","test"] dataStations ["1","2","3"…