HDFS Java API 基本操作实验

文章目录

  • 一、实验环境
  • 二、实验内容
    • (一)数据准备
    • (二)编程环境准备
    • (三)使用Hadoop API操作HDFS文件系统
    • (四)使用Hadoop API + Java IO流操作HDFS文件系统
  • 三、实验步骤
    • (一)数据准备
    • (二)编程环境准备
      • 1、启动IDEA
      • 2、创建Maven项目
      • 3、添加项目依赖
        • (1)hadoop-common (org.apache.hadoop:hadoop-common:2.7.6)
        • (2)hadoop-client (org.apache.hadoop:hadoop-client:2.7.6)
        • (3)hadoop-hdfs (org.apache.hadoop:hadoop-hdfs:2.7.6)
        • (4)junit (junit:junit:4.10)
        • (5)log4j-core (org.apache.logging.log4j:log4j-core:2.8.2)
      • 4、添加资源文件
      • 5、创建包
    • (三)使用Hadoop API操作HDFS文件系统
      • 1、获取文件系统并配置在集群上运行
      • 2、创建目录
      • 3、上传文件
      • 4、下载文件
      • 5、删除文件/目录
      • 6、列出指定路径下的文件和目录
      • 7、查看完整代码
    • (四)使用Hadoop API + Java IO流操作HDFS文件系统
      • 1、获取文件系统并配置在集群上运行
      • 2、上传文件(IO流)
      • 3、读取文件(IO流)
      • 4、下载文件(IO流)
      • 5、辅助代码

一、实验环境

  • 本实验主要涉及到了4台虚拟机,其中1台虚拟机的操作系统是ubuntu desktop,另外3台虚拟机的操作系统是centos server
    在这里插入图片描述
  • 本实验已经搭建好了Hadoop HA的完全分布式集群
    在这里插入图片描述

二、实验内容

  • 我们将一同探讨数据处理中至关重要的一环——Hadoop文件系统(HDFS)的操作。我们将分为四个主要部分,分别是数据准备、编程环境准备、使用Hadoop API操作HDFS文件系统以及使用Hadoop API结合Java IO流进行操作。

(一)数据准备

  • 在进行任何数据处理之前,充分准备好数据是至关重要的一步。这一部分将介绍数据准备的重要性,以及如何有效地准备数据以供后续处理使用。

(二)编程环境准备

  • 在进行HDFS文件系统的操作之前,我们需要确保我们的编程环境已经得到了妥善的准备。这包括获取文件系统、配置集群环境等步骤,确保我们的操作能够在集群上运行。

(三)使用Hadoop API操作HDFS文件系统

  • 这一部分是我们的重头戏,我们将使用Hadoop API进行各种文件系统的操作。从创建目录到上传、下载、删除文件,再到列出指定路径下的文件和目录,我们将一一演示如何使用Hadoop API轻松地完成这些操作。同时,我们也会分享一些辅助代码,使大家更好地理解和应用这些操作。

(四)使用Hadoop API + Java IO流操作HDFS文件系统

  • 在这一部分,我们将进一步深入,结合Java IO流,展示如何通过IO流上传、读取和下载文件。这将为大家提供更多的灵活性和掌握文件系统操作的技能。

  • 本次实验帮助大家更好地理解和应用Hadoop文件系统的操作,使大家能够在实际工作中更加得心应手。接下来,我们将深入到各个部分,让我们一同来探索这个数据处理的世界吧!

三、实验步骤

(一)数据准备

  • desktop节点打开终端
    在这里插入图片描述
  • 切换到/opt目录
    在这里插入图片描述
  • 创建数据文件data.txt
    在这里插入图片描述
  • 创建数据文件localFile.txt
    在这里插入图片描述
  • 下载日志属性文件,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/log4j.properties
    在这里插入图片描述
  • 下载Hadoop核心配置文件core-site.xml,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/core-site.xml
    在这里插入图片描述
  • 下载Hadoop分布式文件系统配置文件hdfs-site.xml,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/hdfs-site.xml
    在这里插入图片描述

(二)编程环境准备

1、启动IDEA

  • 在desktop节点上启动IDEA
    在这里插入图片描述

  • 勾选用户协议
    在这里插入图片描述

  • 单击【Continue】按钮
    在这里插入图片描述

2、创建Maven项目

  • 单击欢迎窗口中的【New Project】按钮,在左边栏里选择【Maven】类型
    在这里插入图片描述
  • 单击【Next】按钮,在对话框里设置项目名称、位置、组标识和构件标识
    在这里插入图片描述
  • 单击【Finish】按钮,在弹出的【Tip of the Day】消息框里勾选【Don’t show tips】复选框
    在这里插入图片描述
  • 单击【Close】按钮,看到一个空的Maven项目
    在这里插入图片描述

3、添加项目依赖

  • pom.xml文件里添加相关依赖
    在这里插入图片描述
<dependencies>                                        <dependency>                                      <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-common</artifactId>        <version>2.7.6</version>                      </dependency>                                     <dependency>                                      <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-client</artifactId>        <version>2.7.6</version>                      </dependency>                                     <dependency>                                      <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-hdfs</artifactId>          <version>2.7.6</version>                      </dependency>                                     <dependency>                                      <groupId>junit</groupId>                      <artifactId>junit</artifactId>                <version>4.10</version>                       </dependency>                                     <dependency>                                      <groupId>org.apache.logging.log4j</groupId>   <artifactId>log4j-core</artifactId>           <version>2.8.2</version>                      </dependency>                                     
</dependencies>                                       
(1)hadoop-common (org.apache.hadoop:hadoop-common:2.7.6)
  • 作用: 提供Hadoop的通用库和工具,包括文件系统操作、配置管理等。
  • 详细说明: 这是Hadoop的核心库,包含了许多通用的类和工具,用于支持Hadoop分布式文件系统(HDFS)和分布式计算。
(2)hadoop-client (org.apache.hadoop:hadoop-client:2.7.6)
  • 作用: 提供Hadoop的客户端库,支持与Hadoop集群进行交互。
  • 详细说明: 包含Hadoop客户端的相关类,用于在应用程序中与Hadoop集群通信,提交作业等。
(3)hadoop-hdfs (org.apache.hadoop:hadoop-hdfs:2.7.6)
  • 作用: 提供Hadoop分布式文件系统(HDFS)的支持。
  • 详细说明: 包含了HDFS相关的类,用于进行文件系统的读写操作,支持分布式存储和文件管理。
(4)junit (junit:junit:4.10)
  • 作用: 提供Java单元测试的支持。
  • 详细说明: JUnit是一个广泛用于Java项目的测试框架,用于编写和运行单元测试。
(5)log4j-core (org.apache.logging.log4j:log4j-core:2.8.2)
  • 作用: 提供Log4j日志框架的核心功能。
    -详细说明: Log4j是一个用于Java应用程序的灵活的日志框架,log4j-core包含了其核心的日志处理功能。

  • 中慧教学实训平台提供了文件的上传和下载功能
    在这里插入图片描述

  • CentOS上Maven项目本地仓库默认位置(用户主目录/.m2/repository
    在这里插入图片描述

  • 刷新项目依赖
    在这里插入图片描述

  • 刷新之后,多一个Dependencies
    在这里插入图片描述

  • 查看项目依赖的外部库(External Libraries)
    在这里插入图片描述

4、添加资源文件

  • /opt目录里的core-site.xmlhdfs-site.xmllog4j.properties文件拷贝到项目的resources目录
    在这里插入图片描述
    在这里插入图片描述

5、创建包

  • src/main/java里创建net.huawei.usehdfs
    在这里插入图片描述

(三)使用Hadoop API操作HDFS文件系统

1、获取文件系统并配置在集群上运行

  • net.huawei.usehdfs包里创建HDFSBase
    在这里插入图片描述
  • 导入程序所需要的包
    在这里插入图片描述
  • 创建init()方法,获取在集群上运行的文件系统
    在这里插入图片描述
  • 运行init()方法
    在这里插入图片描述
  • 在控制台查看结果
    在这里插入图片描述

2、创建目录

  • 创建testMkdirs()方法
    在这里插入图片描述
  • 由于每次对于HDFS文件系统的操作都需要获取文件系统并配置在集群上运行,因此需要将上一个功能代码中的@Test修改为@Before,并将System.out.printIn(fileSystem);语句注释掉。
    在这里插入图片描述
  • 运行testMkdirs()方法,查看控制台结果
    在这里插入图片描述
  • 在Hadoop WebUI上查看创建的目录
    在这里插入图片描述
  • 利用HDFS Shell命令hdfs dfs -ls -R /查看
    在这里插入图片描述

3、上传文件

  • 创建testCopyFromLocal()方法
    在这里插入图片描述
  • testCopyFromLocal()方法,查看结果
    在这里插入图片描述
  • 查看上传的文件内容
    在这里插入图片描述

4、下载文件

  • 创建testCopyToLocal()方法
    在这里插入图片描述

  • 运行testCopyToLocal()方法,查看结果
    在这里插入图片描述

  • 在desktop节点上查看下载的文件
    在这里插入图片描述

  • 在desktop节点上查看下载的文件内容
    在这里插入图片描述

5、删除文件/目录

  • 创建testDeleteFile()方法,删除/idea/mkdir/directory/data.txt文件
    在这里插入图片描述

  • 运行testDeleteFile()方法,查看结果
    在这里插入图片描述

  • 查看/idea/mkdir/directory/data.txt文件,报错说文件不存在
    在这里插入图片描述

  • 修改代码,删除/idea/mkdir/directory目录
    在这里插入图片描述

  • 运行testDeleteFile()方法,查看结果
    在这里插入图片描述

  • 查看/idea/mkdir/directory目录,报错说目录不存在
    在这里插入图片描述

6、列出指定路径下的文件和目录

  • 创建testListAllStatus()方法
    在这里插入图片描述
  • 运行testListAllStatus()方法,查看结果
    在这里插入图片描述
  • 上传anaconda-ks.cfg到HDFS根目录
    在这里插入图片描述
  • 运行testListAllStatus()方法,查看结果
    在这里插入图片描述

7、查看完整代码

package net.huawei.usehdfs;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;public class HDFSBase {private FileSystem fileSystem;private Configuration configuration;/*** 获取文件系统并配置在集群上运行* @throws IOException* @throws InterruptedException*/@Beforepublic void init() throws IOException, InterruptedException {//1、获取文件系统configuration = new Configuration();//2、配置在集群上运行String uri = "hdfs://mycluster:8020";fileSystem = FileSystem.get(URI.create(uri), configuration, "root");//System.out.println(fileSystem);}/*** 创建目录* @throws IOException*/@Testpublic void testMkdirs() throws IOException {//3、创建目录Path path = new Path("/idea/mkdir/directory");fileSystem.mkdirs(path);fileSystem.close();}/*** 上传文件* @throws IOException*/@Testpublic void testCopyFromLocal() throws IOException {//3、从本地上传文件到hdfs文件系统// Path src 要上传的文件的路径(本地文件系统中的路径)Path src = new Path("/opt/data.txt");// Path dst 将文件上传到的路径(hdfs文件系统中的路径)Path dst = new Path("/idea/mkdir/directory");fileSystem.copyFromLocalFile(src, dst);fileSystem.close();System.out.println("文件上传成功~" + dst.toString() + "/" + src.getName());}/*** 下载文件* @throws IOException*/@Testpublic void testCopyToLocal() throws IOException {//3、从hdfs文件系统将文件下载到本地// Path src 文件在hdfs文件系统中的路径(hdfs文件系统中的路径)Path src = new Path("/idea/mkdir/directory/data.txt");// Path dst 要下载的文件的路径(本地文件系统中的路径)Path dst = new Path("/usr/local/src/data.txt");fileSystem.copyToLocalFile(src, dst);fileSystem.close();System.out.println("文件下载成功~" + dst.toString());}/*** 删除文件/目录* @throws IOException*/@Testpublic void testDeleteFile() throws IOException {//3、删除hdfs文件系统中的文件或目录Path path = new Path("/idea/mkdir/directory");//判断是否是目录boolean directory = fileSystem.isDirectory(path);//判断是否是文件boolean file = fileSystem.isFile(path);//如果是目录,则删除目录if(directory){boolean deleteDirectory = fileSystem.delete(path, true);if(deleteDirectory){System.out.println("该路径是个目录,删除目录成功!");}}//如果是文件,则删除文件if(file){boolean deleteFile = fileSystem.delete(path, true);if(deleteFile) {System.out.println("该路径是个文件,删除文件成功!");}}fileSystem.close();}/*** 列出指定路径下的文件和目录* @throws IOException*/@Testpublic void testListAllStatus() throws IOException {//3、列出hdfs文件系统中指定路径下所有的目录和文件Path path = new Path("/");FileStatus[] fileStatuses = fileSystem.listStatus(path);for (FileStatus fileStatus : fileStatuses) {//如果是文件,则输出文件if(fileStatus.isFile()){System.out.println("文件:"+fileStatus.getPath().getName());}//如果是目录,则输出目录if(fileStatus.isDirectory()){System.out.println("目录:"+fileStatus.getPath().getName());}}fileSystem.close();}
}

(四)使用Hadoop API + Java IO流操作HDFS文件系统

1、获取文件系统并配置在集群上运行

2、上传文件(IO流)

3、读取文件(IO流)

4、下载文件(IO流)

5、辅助代码

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

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

相关文章

智慧城市是什么?为什么要建智慧城市?

智慧城市是一个通过现代科技手段推动城市管理和服务创新的概念。 具体来说&#xff0c;它利用信息技术和创新概念&#xff0c;将城市的各个系统和服务集成起来&#xff0c;以提升城市运行效率、优化城市管理和服务&#xff0c;改善市民的生活质量。 为什么要建智慧城市呢&…

土壤水分传感器土壤体积含水率含量监测仪器

产品概述 外型小巧轻便&#xff0c;便于携带和连接。 土壤水分传感器由电源模块、变送模块、漂零及温度补偿模块、数据处理模块等组成。传感器内置信号采样及放大、漂零及温度补偿功能&#xff0c;用户接口简洁、方便。 功能特点 ◆本传感器体积小巧化设计&#xff0c;测量…

pr抖音素材42个手机竖屏抖音视频转场特效PR剪辑模板

酷炫、富有创意的Premiere Pro 视频转场动画过渡效果pr模板免费下载。增强内容演示、幻灯片、抖音、社交媒体广告、预告片、促销等视频画面切换效果。 来自PR模板网&#xff1a;https://prmuban.com/36404.html

scanf注意事项(考试超级重点!)

1&#xff09;scanf("a%d,b%d",&a,&b); 一定要记住是以第一部分的格式在终端输入数据。 在黑色屏幕上面输入的为a12,b34才可以把12和34正确给a和b。有一点不同也不行。 2&#xff09;scanf("%d,%d",x,y); 这种写法绝对错误&#xff0c;scanf的…

Git使用指南

文章目录 一、Git概念二、Git命令清单1、新建代码库2、配置3、增加/删除文件4、代码提交5、分支6、标签7、查看信息8、远程同步9、撤销10、其他 三、常用高级操作1、把其他分支代码摘到当前分支2、重置刚刚提交的代码 一、Git概念 Git流程图 相关概念说明&#xff1a; Work…

生信技能30 - 获取CNV开始位置和结束位置所在的染色体区带

获取CNV开始位置和结束位置所在的染色体区带,以下为函数方法和调用方法示例 程序代码 # 获取INDEL开始位置和结束位置所在的染色体区带 def get_cytoband(pos_start, pos_end, chrom):# cytoBand.txt所在的文件路径cytoband_file = “./cytoBand.txt”try:df = pd.read_csv(…

书籍推荐: 深入理解Go并发编程

一书在手&#xff0c;并发无忧 收到了鸟窝老师历时五载写就的新作「深入理解Go并发编程」 迫不及待开卷阅览&#xff0c;大呼过瘾&#xff0c;最大感触是诚如副标题所言&#xff0c;“从原理到实践&#xff0c;看这本就够了”。 对并发编程优雅简洁的支持&#xff0c;是Go最大的…

GS求解与QR分解的一致性校验

QR分解相对于GS分解更简单,在MATLAB中更容易实现; 我们使用一组数据进行测试,代码如下: clc; clearvars;%% 方法A:GS求解,construct new orthonormal basis by gram-schmidt y0=1:12; znorm=zeros(3,1); n1=3; znorm(1)=0.0; for j=1:n1 znorm(1)=znorm(1)+y0(n1*j+1)^…

探索无监督域自适应,释放语言模型的力量:基于检索增强的情境学习实现知识迁移...

深度学习自然语言处理 原创作者: Xnhyacinth 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;如何有效地进行无监督域自适应(Unsupervised Domain Adaptation, UDA) 一直是研究的热点和挑战。无监督域自适应的目标是在目标域无标签的情况下&#xff0c;将源域的知识…

ABAP - Function ALV 01 Function ALV的三大基石

森莫是Function ALV&#xff1f; 业务顾问和用户方面的名词定义为报表&#xff0c;在开发顾问方面定义的名词为ALV 通过调用Function方式展示的ALV叫做FunctionALV.Function的解释:封装好的函数 Function ALV的三大基石 Fieldcat :Function ALV字段级别的处理 Layout …

前端小技巧: 设计一个简版前端统计 SDK

统计 sdk 如何设计 1 ) 概述 客户端一个sdk &#xff0c;把数据发送给服务端(第三方统计平台)服务端产生一个统计的报表 2 &#xff09;需求点 访问量&#xff1a;pv自定义事件&#xff1a;用户的一切行为我们都可以自定义采集性能&#xff0c;错误 3 ) 代码实现 const P…

uView框架的安装与Git管理

参考链接&#xff1a;Http请求 | uView - 多平台快速开发的UI框架 - uni-app UI框架 安装 打开我们项目的cmd进行下载&#xff1a; yarn add uview-ui 首先我们要确定&#xff0c;未下载前的文件目录以及下载后&#xff0c;是多了个文件目录node_modules 下载完成之后我们就…

QQ2023备份

需要修改的路径&#xff08;共3处&#xff09; 这三处路径中&#xff0c;只有一处是需要修改的 QQPC端-主菜单-设置-基本设置-文件管理 点击上面的“”自定义“”&#xff0c;然后修改路径即可 修改路径后提示 然后等一会才会关干净QQ的相关进程&#xff0c;关闭后才会有自动…

外贸找客户软件工具:WhatBotPlus 4.6.2

WhatBot 是所有使用 Whatsapp 与客户沟通的中小型公司、企业或自由职业者的理想软件。借助 WhatBot&#xff0c;您可以通过 Whatsapp 发送新闻通讯活动&#xff0c;还可以设置自动回复。由于命令一旦配置&#xff0c;客户就可以获取各种信息、接收优惠和促销等&#xff0c;从而…

linux安装tomcat

Tomcat官网&#xff1a; http://tomcat.apache.org 配置java环境 上传jdk1.8到服务器。安装jdk [rootjava-tomcat1 ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/[rootjava-tomcat1 ~]# cd /usr/local/[rootjava-tomcat1 local]# mv jdk1.8.0_191/ java 设置环境…

51单片机独立按键以及矩阵按键的使用以及其原理--独立按键 K1 控制 D1 指示灯亮灭以及数码管显示矩阵按键 S1-S16 按下后键值 0-F

IO 的使用–按键 本文主要涉及8051单片机按键的使用&#xff0c;包括独立按键以及矩阵按键的使用以及其原理&#xff0c;其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按…

node.js和npm的安装与环境配置(2023最新版)

目录 安装node.js测试是否安装成功测试npm环境配置更改环境变量新建系统变量 安装node.js 1、进入官网下载&#xff1a;node.js官网 我选择的是windows64位的&#xff0c;你可以根据自己的实际情况选择对应的版本。 2、下载完成&#xff0c;安装。 打开安装程序 接受协议 选…

【RabbitMQ基础编程模型】

文章目录 RabbitMQ基础编程模型基础编程模型step1、首先创建连接&#xff0c;获取Channelstep2、声明Exchange-可选step3、声明queuestep4、声明Exchange与Queue的绑定关系-可选 RabbitMQ基础编程模型 RabbitMQ的使用生态已经相当庞大&#xff0c;支持非常多的业务场景&#x…

五、HotSpot细节实现

一、并发标记与三色标记 问题&#xff1a;三色标记到底发生在什么阶段&#xff0c;替代了什么。并发标记 1、并发标记( Concurrent Marking) 从 GC Root 开始对堆中对象进行可达性分析&#xff0c;递归扫描整个堆里的对象图&#xff0c;找出要回收的对象&#xff0c;这阶段耗…

【大数据分析】

系列文章目录 文章目录 系列文章目录前言一、数据分析框架二、数据分析方法1.数据清洗&数据探索2.数据清洗之异常值判别3.数据清洗之缺失值处理4.数据探索5.结构优化 三、大数据可视化1.大数据可视化概念1.1 定义1.2 数据可视化的意义 2.可视化类型和模型2.1 科学可视化2.2…