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,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/data.txt
    在这里插入图片描述

  • 下载数据文件localFile.txt,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/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包含了其核心的日志处理功能。

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

  • Ubuntu上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.rhkb.cn/news/215505.html

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

相关文章

CSS import 规则

导入 “navigation.css” 样式到当前的样式表&#xff1a; import “navigation.css”; /* 使用字符串 / 或者 import url(“navigation.css”); / 使用 url 地址 */ 属性定义及使用说明 CSS import 用于从其他样式表导入样式规则。 import 规则必须在 CSS 文档的头部&#xff…

数据结构:栈(Stack)的各种操作(入栈,出栈,判断栈非空,判断栈已满,附源码)

前言&#xff1a;在前面的文章中&#xff0c;我们讲解了顺序表&#xff0c;单链表&#xff0c;双向链表。而我们今天要分享的栈则是基于之前的数据结构上搭建的&#xff0c;但是相较于顺序表和链表来说&#xff0c;栈的实现就非常简单了。 目录 一.栈(Stack)的概念 二.栈的数…

【算法题】数字字符串组合倒序 (js)

解法&#xff1a; const str "I am an 20-years out--standing * -stu- dent";function solution(str) {const arr str.split(" ");const newArr arr.map((str) > {if (/[a-zA-Z0-9-]/.test(str)) {if (/-{2}/g.test(str)) {return str.replace(/-…

Tair(2):Tair安装部署

1 安装相关依赖库 yum install -y gcc gcc-c make m4 libtool boost-devel zlib-devel openssl-devel libcurl-devel yum&#xff1a;是yellowdog updater modified 的缩写&#xff0c;Linux中的包管理工具gcc&#xff1a;一开始称为GNU C Compiler&#xff0c;也就是一个C编…

持续集成交付CICD:使用Maven命令上传Nexus制品

目录 一、实验 1.使用Maven命令上传Nexus制品&#xff08;第一种方式&#xff09; 2.使用Maven命令上传Nexus制品&#xff08;第二种方式&#xff09; 一、实验 1.使用Maven命令上传Nexus制品&#xff08;第一种方式&#xff09; &#xff08;1&#xff09;指定一个 hoste…

11--常用类和基础API--01

1、API概述 1.1 什么是API API(Application Programming Interface)&#xff0c;应用程序编程接口。 Java API是一本程序员的字典 &#xff0c;是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&#x…

屏幕分辨率修改工具SwitchResX mac功能特点

SwitchResX mac是可用于修改和管理显示器的分辨率和刷新率。 SwitchResX mac功能和特点 支持多种分辨率和刷新率&#xff1a;SwitchResX可以添加和管理多种分辨率和刷新率&#xff0c;包括自定义分辨率和刷新率。 自动切换分辨率&#xff1a;SwitchResX可以根据应用程序和窗口…

Tomcat从认识安装到详细使用

文章目录 一.什么是Tomact?二.Tomcat的安装1.下载安装包2.一键下载3.打开Tomcat进行测试4.解决Tomcat中文服务器乱码 三.Tomcat基本使用1.启动与关闭Tomcat2.Tomcat部署项目与浏览器访问项目 四.Tomcat操作中的常见问题1.启动Tomcat后&#xff0c;启动窗口一闪而过&#xff1f…

微信小程序-uniapp 仿豆瓣评分 (附源码)

微信小程序由于适用性强、逻辑简要、开发迅速的特性&#xff0c;叠加具有海量活跃用户的腾讯公司背景&#xff0c;逐渐成为了轻量级单一功能应用场景的较佳承载方式&#xff0c;诸如电影购票、外卖点餐、移动商城、生活服务等场景服务提供商迅速切入了。 效果图 主页 更多页…

jsp 动物疾病诊断管理系Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 动物疾病诊断管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

千梦网创:肚子基础决定脑子建筑

我每个星期都要跟魔鬼实战训练营的铁铁们唠嗑。 他们中&#xff0c;混得好的都喜欢找我聊天&#xff0c;可能比较有成就感吧。 不知道为什么没怎么做出成绩的学员很少找我聊天&#xff0c;要是你偷摸着发财也就算了&#xff0c;如果你真的没做出来什么我觉得你更要来找我聊天…

物联网后端个人第十四周总结

物联网方面进度 1.登陆超时是因为后端运行的端口和前端监听的接口不一样&#xff0c;所以后端也没有报错&#xff0c;将二者修改一致即可 2.登录之后会进行平台的初始化&#xff0c;但是初始化的时候会卡住,此时只需要将路径的IP端口后边的内容去掉即可 3.阅读并完成了jetlinks…

[UNILM]论文实现:Unified Language Model Pre-training for Natural Language.........

文章目录 一、完整代码二、论文解读2.1 介绍2.2 架构2.3 输入端2.4 结果 三、过程实现四、整体总结 论文&#xff1a;Unified Language Model Pre-training for Natural Language Understanding and Generation 作者&#xff1a;Li Dong, Nan Yang, Wenhui Wang, Furu Wei, Xia…

OpenCV-Python:DevCloud CodeLab介绍及学习

1.Opencv-Python演示环境 windows10 X64 企业版系统python 3.6.5 X64OpenCV-Python 3.4.2.16本地PyCharm IDE线上注册intel账号&#xff0c;使用DevCloud CodeLab 平台 2.DevCloud CodeLab是什么&#xff1f; DevCloud是一个基于云端的开发平台&#xff0c;提供了强大的计算…

ArcGIS Pro中怎么设置标注换行

在ArcGIS Pro中进行文字标注的时候&#xff0c;如果标注的字段内容太长&#xff0c;直接标注的话会不美观&#xff0c;而且还会影响旁边的标注显示&#xff0c;这里为大家介绍一下在ArcGIS Pro中设置文字换行的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的…

数据结构之----逻辑结构、物理结构

数据结构之----逻辑结构、物理结构 目前我们常见的数据结构分别有&#xff1a; 数组、链表、栈、队列、哈希表、树、堆、图 而它们可以从 逻辑结构和物理结构两个维度进行分类。 什么是逻辑结构&#xff1f; 逻辑结构是指数据元素之间的逻辑关系&#xff0c;而逻辑结构又分为…

使用torch解决线性回归问题

数据处理 import torch import numpy as np import pandas as pd import matplotlib.pyplot as pltdatapd.read_csv(./datasets/Income1.csv) #数据准备data.head(5)#展示数据 #以上所有的代码都是用jupyter notebook写&#xff0c;形成了阶段性的结果展示 查看数据信息 dat…

SSM整合——Springboot

1.0 概述 1.1 持久层&#xff1a; DAO层&#xff08;mapper&#xff09; DAO层&#xff1a;DAO层主要是做数据持久层的工作&#xff0c;负责与数据库进行联络的一些任务都封装在此 DAO层的设计首先是设计DAO的接口&#xff0c; 然后在spring-mapper.xml的配置文件中定义此接…

混合预编码(Hybrid Precoding)的全连接结构与子连接结构

A Survey on Hybrid Beamforming Techniques in 5G: Architecture and System Model Perspectives 全连接结构的混合预编码 子连接结构的混合预编码 Alternating Minimization Algorithms for HybridPrecoding in Millimeter Wave MIMO Systems

深度学习——第4.3章 深度学习的数学基础

第4章 深度学习的数学基础 目录 4.7 指数函数和对数函数 4.7 指数函数和对数函数 深度学习经常会用到Sigmoid函数和Softmax函数&#xff0c;这些函数是通过包含exp(x)的指数函数创建的。后面我们需要求解这些函数的导数。 4.7.1 指数 指数是一个基于“乘以某个数多少次”&a…