【大数据技术基础 | 实验四】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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JOIN 表连接

1. 插入表测试数据 分别清空学生信息表 student、教师信息表 teacher、课程表 course、学生选课关联表 student_course 数据,并分别插入测试数据。 1.1 清空表数据 分别清空学生信息表 student、教师信息表 teacher、课程表 course、学生选课关联表 student_cours…

第8篇:网络安全基础

目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇:网络安全基础 引言 在现代信息社会中,计算机网络无处不在,从互联网到局…

Atlas800昇腾服务器(型号:3000)—驱动与固件安装(一)

服务器配置如下: CPU/NPU:鲲鹏 CPU(ARM64)A300I pro推理卡 系统:Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本: Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

0x3D service

0x3D service 1. 概念2. Request message 数据格式3. Respone message 数据格式3.1 正响应格式3.2 negative respone codes(NRC)4. 示例4.1 正响应示例:4.2 NRC 示例1. 概念 UDS(统一诊断服务)中的0x3D服务,即Write Memory By Address(按地址写内存)服务,允许客户端向服…

艺术家杨烨炘厦门开展,49只“鞋底倒计时”引轰动

艺术家杨烨炘 9,8,7,6,5,4,3,2,1,0………近日,一件名为《走向倒计时》的艺术作品在厦门引发讨论。艺术家杨烨炘邀请49位台湾同胞,将他们的鞋底拼成…

51单片机快速入门之 LCD1602 液晶显示屏2024/10/19

51单片机快速入门之 LCD1602 液晶显示屏 Proteus 电路图 : 74HC595 拓展电路可以不用,给 p0-p17 添加上拉电阻也可以!,我这里是方便读取和节省电阻线路 (因为之前不知道 在没有明确循环的情况下,Keil编译器可能会在main()中自动添加类似以下的汇编代码&#xff1a…

基于SpringBoot中药材进存销管理系统【附源码】

基于SpringBoot中药材进存销管理系统 效果如下: 系统注册界面 管理员主界面 员工界面 供应商界面 中药材类型界面 中药材界面 员工主界面 研究背景 随着中医药产业的快速发展,传统的管理方式已难以满足现代化、规模化的药材管理需求。中药材种类繁多&…

Vulnhub打靶-matrix-breakout-2-morpheus

基本信息 靶机下载:https://pan.baidu.com/s/1kz6ei5hNomFK44p1QT0xzQ?pwdy5qh 提取码: y5qh 攻击机器:192.168.20.128(Windows操作系统) 靶机:192.168.20.0/24 目标:获取2个flagroot权限 具体流程 …

基于FreeRTOS的LWIP移植

目录 前言一、移植准备工作二、以太网固件库与驱动2.1 固件库文件添加2.2 库文件修改2.3 添加网卡驱动 三、LWIP 数据包和网络接口管理3.1 添加LWIP源文件3.2 Lwip文件修改3.2.1 修改cc.h3.2.2 修改lwipopts.h3.2.3 修改icmp.c3.2.4 修改sys_arch.h和sys_arch.c3.2.5 修改ether…

【NOIP提高组】一元三次方程求解

【NOIP提高组】一元三次方程求解 💐The Begin💐点点关注,收藏不迷路💐 有形如:ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方…

图像梯度-Sobel算子、scharrx算子和lapkacian算子

文章目录 一、认识什么是图像梯度和Sobel算子二、Sobel算子的具体使用三、scharrx算子与lapkacian(拉普拉斯)算子 一、认识什么是图像梯度和Sobel算子 图像的梯度是指图像亮度变化的空间导数,它描述了图像在不同方向上的强度变化。在图像处理和计算机视觉中&#x…

Unity使用Git及GitHub进行项目管理

git: 工作区,暂存区(存放临时要存放的内容),代码仓库区1.初始化 git init 此时展开隐藏项目,会出现.git文件夹 2.减小项目体积 touch .gitignore命令 创建.gitignore文件夹 gitignore文件夹的内容 gitignore中添加一下内容 # This .gitignore file should be place…

2025秋招八股文--网络原理篇

前言 1.本系列面试八股文的题目及答案均来自于网络平台的内容整理,对其进行了归类整理,在格式和内容上或许会存在一定错误,大家自行理解。内容涵盖部分若有侵权部分,请后台联系,及时删除。 2.本系列发布内容分为12篇…

《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优

1. 题记 有关Linux关键内核参数的调整,我前面的调优文章其实就有涉及到,只是比较零散,本篇集中深入介绍Linux常用关键内核参数及其调优,Linux调优80%以上都涉及到内核的这些参数的调整。 2. 文件系统相关参数 fs.file-max 参数…

VMware虚拟机的下载安装与使用

目录 一、下载VMware虚拟机 步骤1---找到需要的虚拟机下载位置 步骤2---找到下载的安装包安装程序 二、删除干净VMware虚拟机 步骤1--进去服务里面关闭虚拟机服务 步骤2---控制面板里面删除 步骤3---注册表删除HKEY_CURRENT_USER\Software\VMware, Inc. 步骤4---安装在…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全…

【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)

文章目录 一、什么是文件1.程序文件2.数据文件 二、数据文件1.文件名2.数据文件的分类文本文件二进制文件 三、文件的打开和关闭1.流和标准流流标准流 2.文件指针3.文件的打开和关闭文件的打开文件的关闭 四、文件的顺序读写1.fgetc函数2.fputc函数3.fgets函数4.fputs函数5.fsc…

AI开发-三方库-Hugging Face-Pipelines

1 需求 需求1:pipeline支持的任务类型 需求2:推理加速使用CPU还是GPU 需求3:基于pipeline的文本分类示例 需求4:pipeline实现原理 模型使用步骤(Raw text -》Input IDs -》Logits -》Predictions)&…

k8s 1.28.2 集群部署 harbor v2.11.1 接入 MinIO 对象存储

文章目录 [toc]提前准备什么是 HarborHarbor 架构描述Harbor 安装的先决条件硬件资源软件依赖端口依赖 Harbor 在 k8s 的高可用Harbor 部署Helm 编排YAML 编排创建 namespace导入镜像部署 Redis部署 PostgreSQL部署 Harbor core部署 Harbor trivy部署 Harbor jobservice部署 Ha…

前端考试总结

1HTML标签 h标题标签 块级标签 独占一行 p段落标签 同上 br换行标签 单标签 img图片标签 内联标签:不独占一行(src图片地址 alt图片的替代文字 title鼠标悬停提示文字) a超链接标签 同上 (href跳转路径 target属性{_blank新窗口打开 _self在当前窗口打开}) 列表标签(ul无…