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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据技术基础实验四,学习使用Eclipse和HDFS进行读写文件操作。

一、前言

在前面的实验中我们进行了HDFS的部署,并设置了一键启动HDFS操作,本期实验我们将使用HDFS开发环境进行HDFS写、读的编写,以及程序的运行,了解HDFS读写文件的调用流程,理解HDFS读写文件的原理。

好啦废话不多说,我们开始今天的实验操作。

二、实验目的

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

三、实验原理

1、Java Classpath

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

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

我们来设置一下Classpath:

在设置中打开环境变量,然后点击新建

image-20220916104942896.png

每一路径中间必须以英文;作为分隔。

image-20220916185231989.png

2、Eclipse Hadoop插件下载

我们通过在Eclipse上下载Hadoop插件来开发Hadoop相关程序

首先去到Github下载地址下载hadoop2x-eclipse-plugin,因为我们学校的虚拟机集群环境是hadoop2.7,所以就只需要下载2x版本插件。

如果进不去Github,可以留下你们的邮箱我单独发给你们。

image-20220916114129272.png

安装插件在后面具体实验步骤的时候再来说明。

四、实验步骤

1、配置master服务器classpath

在终端输入如下命令:

vi /etc/profile

进入文件进行编辑,在该文件的最后加上如下信息:

JAVA_HOME=/usr/local/jdk1.7.0_79/
exportHADOOP_HOME=/usr/cstor/hadoop
exportJRE_HOME=/usr/local/jdk1.7.0_79//jre
exportPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*
exportPATH=$PATH:$HADOOP_HOME/bin
exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

image-20220916225210447.png

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

source /etc/profile

2、在master服务器编写HDFS写程序

在终端执行如下命令,然后编写HDFS写文件程序:

vi WriteFile.java

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

importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FSDataOutputStream;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
publicclassWriteFile {
publicstaticvoidmain(String[] args)throwsException{
Configurationconf=newConfiguration();
FileSystemhdfs=FileSystem.get(conf);
Pathdfs=newPath("/weather.txt");
FSDataOutputStreamoutputStream=hdfs.create(dfs);
outputStream.writeUTF("nj 20161009 23\n");
outputStream.close();
}
}

image-20220916230356055.png

3、编译并打包HDFS写程序

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

编译代码:

javac WriteFile.java

打包代码:

jar -cvf hdpAction.jar WriteFile.class

image-20220916230723090.png

4、 执行HDFS写程序

在master虚拟机上使用如下命令执行hdpAction.jar:

hadoop jar ~/hdpAction.jar WriteFile

然后输入如下命令查看是否生成weather.txt文件:

hadoop fs -ls /

image-20220916231127848.png

可以看出已经生成成功,我们来查看一下文件内容是否正确:

hadoop fs -cat /weather.txt

image-20220916231250371.png

OK,结果是对的,我们继续下一步。

5、在master服务器编写HDFS读程序

直接在终端执行如下命令进行编写HDFS读文件程序操作:

vi ReadFile.java

然后填入如下java程序:

importjava.io.IOException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FSDataInputStream;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
publicclassReadFile {
publicstaticvoidmain(String[] args) throwsIOException {
Configurationconf=newConfiguration();
PathinFile=newPath("/weather.txt");
FileSystemhdfs=FileSystem.get(conf);
FSDataInputStreaminputStream=hdfs.open(inFile);
System.out.println("myfile: "+inputStream.readUTF());
inputStream.close();
  }
}

image-20220916231534739.png

6、编译并打包HDFS读程序

再次使用刚刚的javac命令编译刚编写的java代码:

javac ReadFile.java

然后再次使用jar命令打包为hdpAction.jar:

jar -cvf hdpAction.jar ReadFile.class

image-20220916231838249.png

7、 执行HDFS读程序

再次在master虚拟机上使用hadoop.jar命令执行hdpAction.jar,查看程序运行结果:

hadoop jar ~/hdpAction.jar ReadFile

image-20220916232038129.png

8、安装与配置Eclipse Hadoop插件

现在我们开始之前的插件安装步骤,将我们在Github上面下载的jar包放在Eclipse下载路径的插件包下面,如图:

image-20220920162014551.png

然后我们需要在本地配置Hadoop环境,用于加载hadoop目录中的jar包,我们需要下载这个文件:

image-20220916232447424.png

可以去官网下载,我是在学校大数据平台上面直接下载的,比较方便。

然后解压该文件到自己指定的路径。

然后我们需要验证是否可以用Eclipse新建Hadoop项目,打开Eclipse软件,按照如下操作选择:

image-20220916233252688.png

点击之后查看是否有Map/Reduce Project的选项。

image-20220916233853092.png

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

第一次新建Map/Reduce Project项目时需要指定hadoop解压后的位置:

image-20220916234642301.png

image-20220916234843869.png

9、使用Eclipse开发并打包HDFS写文件程序

紧接着上面输入项目名:WriteHDFS,创建一个Map/Reduce项目。

然后新建WriteFile类并填入如下java代码:

importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FSDataOutputStream;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
publicclassWriteFile {
publicstaticvoidmain(String[] args)throwsException{
Configurationconf=newConfiguration();
FileSystemhdfs=FileSystem.get(conf);
Pathdfs=newPath("/weather.txt");
FSDataOutputStreamoutputStream=hdfs.create(dfs);
outputStream.writeUTF("nj 20161009 23\n");
outputStream.close();
}
}

如果你出现报错的话,就需要进行导包操作并且配置设置文件,在项目目录下面创建jar或者lib文件夹,添加如下两个包,如果你找不到的话我可以发给你们,留下邮箱就行:

image-20220920162829178.png

然后在Eclipse左侧导航栏里右击该项目,选择导出,然后选择java,选择JAR 文件:

image-20220916235411034.png

然后填写导出文件的路径和文件名,自定义:

image-20220916235735069.png

然后点击下一步,再点击下一步,然后配置程序主类,这里必须要选择主类,我被这里坑了好久一直报错,学校大数据平台实验指导书和实验视频错了,必须要选择主类,不然后面上传到服务器就会一直报错。

image-20220920162137379.png

image-20220920162350311.png

然后选择完成就打包完成。

10、上传HDFS写文件程序jar包并执行

我们使用Xftp工具将刚刚生成的jar包上传至master服务器上:

image-20220920163048658.png

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

hadoop jar ~/hdpAction.jar WriteFile

然后查看是否生成了weather.txt文件:

hadoop fs -ls /

image-20220920163438977.png

如果已经生成,然后再查看文件内容是否正确:

hadoop fs -act /weather.txt

image-20220920163518310.png

11、使用Eclipse开发并打包HDFS读文件程序

这里建项目的方法和前面的一样,我就不再详细的描述了。

新建项目名为ReadHDFS,然后再新建ReadFile类并编写如下代码:

importjava.io.IOException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FSDataInputStream;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
publicclassReadFile {
publicstaticvoidmain(String[] args) throwsIOException {
Configurationconf=newConfiguration();
PathinFile=newPath("/weather.txt");
FileSystemhdfs=FileSystem.get(conf);
FSDataInputStreaminputStream=hdfs.open(inFile);
System.out.println("myfile: "+inputStream.readUTF());
inputStream.close();
  }
}

然后和前面一样进行导包操作,再次强调要选择主类!

12、上传HDFS读文件程序jar包并执行

然后再次使用Xftp工具将包上传至master服务器上,并在master服务器上使用hadoop jar命令执行上传的包,查看程序运行结果:

image-20220920164249776.png

五、补充一点

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

右击项目然后依次选择选项:

image-20220920164846879.png

然后将你们一开始的这个库移除,再点击添加库,这里我已经切换好了:

image-20220920165233362.png

然后选择JRE系统库,点击下一步:

image-20220920165305273.png

然后选择要切换的库版本,最后点击完成即可:

image-20220920165404575.png

六、最后我想说

本期的实验到这里就结束了,因为中间出现了各种报错,所以这个实验做了很久,最后在不断摸索中终于是完成了。

通过本次实验我深刻明白了大数据环境的各种配置是真的麻烦,各种烦人的要求,哈哈哈,真的是太绝了,你们做大数据实验的时候一定要注意细节,仔细一点,不然很容易踩各种坑。

大概就说这么多了,一定要多去实战,不然你们都不知道会收获多少经验(坑),如果你们在实验过程中遇见了什么问题,欢迎大家来提问,我们一起讨论学习交流。

最后,后续我仍会继续更新有关大数据的实验,虽然过程比较辛苦,但收获满满。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
9天前
|
消息中间件 监控 大数据
"探索Streaming技术:如何重塑大数据未来,实时处理引领数据价值即时转化新纪元"
【8月更文挑战第10天】信息技术高速发展,数据成为推动社会进步的关键。面对数据爆炸,高效实时处理成挑战。流处理(Streaming)技术应运而生,即时处理数据流,无需积累。应用于实时监控、日志分析等场景。例如,电商平台利用流处理分析用户行为,推送个性化推荐;智能交通系统预测拥堵。结合Apache Kafka和Flink,实现从数据收集到复杂流处理的全过程。流处理技术促进数据即时价值挖掘,与AI、云计算融合,引领大数据未来发展。
27 5
|
22天前
|
机器学习/深度学习 存储 分布式计算
驾驭数据洪流:大数据处理的技术与应用
大数据处理不仅是信息技术领域的一个热门话题,也是推动各行各业创新和发展的重要力量。随着技术的进步和社会需求的变化,大数据处理将继续发挥其核心作用,为企业创造更多的商业价值和社会贡献。未来,大数据处理将更加注重智能化、实时性和安全性,以应对不断增长的数据挑战。
|
21天前
|
传感器 大数据 数据处理
大数据处理中的流计算技术:实现实时数据处理与分析
【7月更文挑战第30天】随着分布式系统、云原生技术、数据安全与隐私保护技术的不断发展,流计算技术将在更多领域得到应用和推广,为大数据处理和分析提供更加高效、智能的解决方案。
|
29天前
|
机器学习/深度学习 人工智能 数据可视化
大数据时代的数据可视化技术:趋势、挑战与未来展望
【7月更文挑战第22天】随着技术的不断进步和应用场景的不断拓展,数据可视化技术将在更多领域发挥更大的作用。未来,我们可以期待更加智能化、实时化、沉浸式和民主化的数据可视化解决方案的出现。同时,随着数据量的不断增加和数据类型的不断丰富,数据可视化技术也将面临更多的挑战和机遇。只有不断创新和优化技术才能满足日益增长的需求并推动数据可视化技术的持续发展。
|
29天前
|
人工智能 自然语言处理 数据管理
数据平台演进问题之自然语言处理技术在AI驱动的数据库中的作用是什么
数据平台演进问题之自然语言处理技术在AI驱动的数据库中的作用是什么
|
2月前
|
存储 分布式计算 Hadoop
Hadoop Distributed File System (HDFS): 概念、功能点及实战
【6月更文挑战第12天】Hadoop Distributed File System (HDFS) 是 Hadoop 生态系统中的核心组件之一。它设计用于在大规模集群环境中存储和管理海量数据,提供高吞吐量的数据访问和容错能力。
451 4
|
7天前
|
存储 缓存 分布式计算
|
9天前
|
存储 分布式计算 运维
Hadoop重新格式化HDFS的方案
【8月更文挑战第8天】
|
26天前
|
分布式计算 Hadoop
|
1月前
|
分布式计算 Hadoop
hadoop格式化HDFS问题
【7月更文挑战第15天】
38 12

热门文章

最新文章