当前位置: 首页 > article >正文

ubantu18.04HDFS编程实践(Hadoop3.1.3)

说明:本文图片较多,耐心等待加载。(建议用电脑)

注意所有打开的文件都要记得保存。

 第一步:准备工作

本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。

第二步:我们先将Hadoop集群启动(上篇都讲过)

1.将两台虚拟机都启动。

2.进去Master终端,(右键-》打开终端),启动,并用jps检查是否成功启动

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

 第三步:学习利用Shell命令与HDFS进行交互

1.基本操作:

1.第一个:我们可以在终端输入如下命令,查看fs总共支持了哪些命令

./bin/hadoop fs

2.第二个:在终端输入如下命令,可以查看具体某个命令的作用

./bin/hadoop fs -help put

 2.目录操作:

要使用 HDFS,首先创建HDFS上的用户目录,我们在之前的教程都是做过的,如果没有的话,可以输入以下命令:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop

1.第一个:可以使用如下命令显示HDFS中与当前用户hadoop对应的用户目录下的内容:

 ./bin/hdfs dfs -ls .

如果要列出HDFS上的所有目录,可以使用如下命令:

./bin/hdfs dfs -ls

2.第二个:可以使用如下命令创建一个input目录:

./bin/hdfs dfs -mkdir input

如果要在HDFS的根目录下创建一个名称为input的目录,则需要使用如下命令:

./bin/hdfs dfs -mkdir /input

 可以使用rm命令删除一个目录,比如,可以使用如下命令删除刚才在HDFS中创建的“/input”目录(不是“/user/hadoop/input”目录):

./bin/hdfs dfs -rm -r /input

 3.文件操作:

经常需要从本地文件系统向HDFS中上传文件,或者把HDFS中的文件下载到本地文件系统中。

1.我们先编辑一个文件在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件myLocalFile.txt

sudo vim /home/hadoop/myLocalFile.txt

 在文件里写入下面三行:

Hadoop

Spark

XMU DBLAB

2. 可以使用如下命令把本地文件系统的“/home/hadoop/myLocalFile.txt”上传到HDFS中的当前用户目录的input目录下

./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt  input

如果没有出现下面报错,直接跳到第三步

 解决方法:

hdfs dfsadmin -safemode leave

 然后重新执行上面的命令,出现下面的界面即成功。

3. 可以使用ls命令查看一下文件是否成功上传到HDFS中

./bin/hdfs dfs -ls input

4.下面使用如下命令查看HDFS中的myLocalFile.txt这个文件的内容:

./bin/hdfs dfs -cat input/myLocalFile.txt

 

5. 下面把HDFS中的myLocalFile.txt文件下载到本地文件系统中的“/home/hadoop/下载/”这个目录下,命令如下:

注意博主的是中文版,所以叫下载,大家自己分辨修改(英文版为Downloads)

./bin/hdfs dfs -get input/myLocalFile.txt  /home/hadoop/下载

 如果没有出现下面报错,直接跳到第6步

 解决方法:

sudo chmod a+w /home/hadoop/下载

 这个本身是不推荐的,但我们这里只用学习,所以为了方便就直接这样子写了,可以单独给你的用户权限。 然后重新执行上面的命令,出现下面的界面即成功。

6.可以使用如下命令,到本地文件系统查看下载下来的文件myLocalFile.txt:

cd ~
cd 下载
ls
cat myLocalFile.txt

 7.了解一下如何把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录。比如,如果要把HDFS的“/user/hadoop/input/myLocalFile.txt”文件,拷贝到HDFS的另外一个目录“/input”中(注意,这个input目录位于HDFS根目录下),可以使用如下命令:

./bin/hdfs dfs -cp input/myLocalFile.txt  /input

第四步:利用Web界面管理HDFS

打开Linux自带的Firefox浏览器,输入地址http://localhost:9870。

第五步:利用Java API与HDFS进行交互

 (一) 在Ubuntu中安装Eclipse

可以到Eclipse官网(Eclipse Downloads | The Eclipse Foundation)下载安装包。
或者直接点击这里从百度云盘下载软件(提取码:lnwl),位于“软件”目录下,假设安装文件下载后保存在了Linux系统的目录“~/Downloads”下。(大家不嫌慢的话可以直接再虚拟机浏览器访问官网进行下载)

说明:我这里是从官网直接下载的,因为虚拟机访问速度有点慢,我这里就在windos主机去官网下载,然后用之前的共享文件夹直接传到虚拟机,也是很简单的,给大家也截一下屏。

 进入官网:

 点击 Download Packages选择Linux_x86,然后就开始下载了。

 之后我们将这个下载的文件放到第一章所建的共享文件夹share里

然后我们继续在虚拟机找到他。

 1.点击文件

点击其他位置,点击计算机----> mnt ---->hgfs------>share

 

然后我们将他拖入到下载中。 

 然后在终端继续输入:

cd ~/下载
ls
sudo tar -zxvf ./eclipse-4.7.0-linux.gtk.x86_64.tar.gz -C /usr/local 

(注意英文版是Downloads,我这里是中文就是下载,还有就是这个文件名是你自己的,你去文件那里右键文件,然后重命名,全选复制一下)

 执行如下命令启动Eclipse:

cd /usr/local/eclipse
./eclipse 

 

出现这个界面即为启动成功。

(二)使用Eclipse开发调试HDFS Java程序(保证之前的集群成功启动)

1.在Eclipse中创建项目:

我们直接点击launch。

 继续

继续

 继续

注意这里最后点击Next,而不是Finsh,图片中打错字了。

2. 为项目添加需要用到的JAR包

 

 

 

 注意不要选中前面的四个

 出现这个界面

 然后继续选中classpath,点击Add_External_JARS,下面的操作和上面的都是重复操作,就是选中jar包,然后引入。

然后继续选中classpath,点击Add_External_JARS,下面的操作和上面的都是重复操作,就是选中jar包,然后引入。

 然后继续选中classpath,点击Add_External_JARS,下面的操作和上面的都是重复操作,就是选中jar包,然后引入。

然后点击Finsh

 继续

继续

继续

 3.编写Java应用程序

 

然后将下面的代码覆盖掉他自动生成的。

import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;/*** 过滤掉文件名满足特定条件的文件 */
class MyPathFilter implements PathFilter {String reg = null; MyPathFilter(String reg) {this.reg = reg;}public boolean accept(Path path) {if (!(path.toString().matches(reg)))return true;return false;}
}/**** 利用FSDataOutputStream和FSDataInputStream合并HDFS中的文件*/
public class MergeFile {Path inputPath = null; //待合并的文件所在的目录的路径Path outputPath = null; //输出文件的路径public MergeFile(String input, String output) {this.inputPath = new Path(input);this.outputPath = new Path(output);}public void doMerge() throws IOException {Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://Master:9000");conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");FileSystem fsSource = FileSystem.get(URI.create(inputPath.toString()), conf);FileSystem fsDst = FileSystem.get(URI.create(outputPath.toString()), conf);// 过滤掉输入目录中后缀为.abc的文件FileStatus[] sourceStatus = fsSource.listStatus(inputPath, new MyPathFilter(".*\\.abc")); FSDataOutputStream fsdos = fsDst.create(outputPath);PrintStream ps = new PrintStream(System.out);// 分别读取过滤之后的每个文件的内容,并输出到同一个文件中for (FileStatus sta : sourceStatus) {// 打印后缀不为.abc的文件的路径、文件大小System.out.print("路径:" + sta.getPath() + "    文件大小:" + sta.getLen()+ "   权限:" + sta.getPermission() + "   内容:");FSDataInputStream fsdis = fsSource.open(sta.getPath());byte[] data = new byte[1024];int read = -1;while ((read = fsdis.read(data)) > 0) {ps.write(data, 0, read);fsdos.write(data, 0, read);}}ps.close();fsdos.close();}public static void main(String[] args) throws IOException {MergeFile merge = new MergeFile("hdfs://Master:9000/user/hadoop/","hdfs://Master:9000/user/hadoop/merge.txt");merge.doMerge();}
}

 4.编译运行程序

准备工作:我们先提前准备几个文件,后续会用到。

因为刚刚启动了Eclipse,所以我们可以再打开一个终端,(来到桌面右键--》打开终端)

注意刚刚的终端不要关闭,只需要小化就行。

在新的终端输入以下命令,创建并且写入文件。在本地创建文件
echo "this is file1.txt" > file1.txt
echo "this is file2.txt" > file2.txt
echo "this is file3.txt" > file3.txt
echo "this is file4.abc" > file4.abc
echo "this is file5.abc" > file5.abc
确保 HDFS 中 /user/hadoop 目录存在

可以运行以下命令来创建这个目录(如果已经存在则会提示已存在):

./bin/hdfs dfs -mkdir -p /user/hadoop
然后继续输入,将文件上传到 HDFS
./bin/hdfs dfs -put file1.txt /user/hadoop/
./bin/hdfs dfs -put file2.txt /user/hadoop/
./bin/hdfs dfs -put file3.txt /user/hadoop/
./bin/hdfs dfs -put file4.abc /user/hadoop/
./bin/hdfs dfs -put file5.abc /user/hadoop/
继续输入,我们查看是否成功。
./bin/hdfs dfs -ls /user/hadoop/

然后我们点击这个,打开Eclipse

 继续

 运行成功界面

我们现在有两个终端,点击这个可以看到

如果程序运行成功,这时,可以到HDFS中查看生成的merge.txt文件,比如,可以在Linux终端中执行如下命令: 

cd /usr/local/hadoop
./bin/hdfs dfs -ls /user/hadoop
./bin/hdfs dfs -cat /user/hadoop/merge.txt

 可以看到如下界面。

 5.应用程序的部署

终端中执行如下命令:

cd /usr/local/hadoop
mkdir myapp

然后再打开Eclipse

 目录“(注意这里去了粘贴使用CTRL+v)

/usr/local/hadoop/myapp/HDFSExample.jar

之后出现的两个界面全部点击ok

继续在终端中执行如下命令: 

cd /usr/local/hadoop/myapp
ls

由于之前已经运行过一次程序,已经生成了merge.txt,因此,需要首先执行如下命令删除该文件:

cd /usr/local/hadoop
./bin/hdfs dfs -rm /user/hadoop/merge.txt
cd /usr/local/hadoop
./bin/hadoop jar ./myapp/HDFSExample.jar
cd /usr/local/hadoop
./bin/hdfs dfs -ls /user/hadoop
./bin/hdfs dfs -cat /user/hadoop/merge.txt

出现如上界面即为成功。 

结语:整体的操作步我都给大家写出来,并且截图了,大家只需要无脑粘贴就好了,具体的讲解可以看我的资料里的文档解释更加详细,这个实验就结束了。 

上面内容制作不易,喜欢的点个赞和收藏支持一下吧!!

后期会持续更新更多大数据内容,如果想共同学习,就点点关注把(

相关文章:

ubantu18.04HDFS编程实践(Hadoop3.1.3)

说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 第二步&am…...

Spring Boot资源耗尽问题排查与优化

Spring Boot服务运行一段时间后新请求无法处理的问题。服务没有挂掉,也没有异常日志。思考可能是一些资源耗尽或阻塞的问题。 思考分析 首先,资源耗尽可能涉及线程池、数据库连接、内存、文件句柄或网络连接等。常见的如线程池配置不当,导致…...

优化WAV音频文件

优化 WAV 音频文件通常涉及 减小文件体积、提升音质 或 适配特定用途(如流媒体、广播等)。以下是分场景的优化方法,涵盖工具和操作步骤: 一、减小文件体积(无损/有损压缩) 1. 无损压缩 转换格式&#xff1…...

string函数具体事例

输出所有字串出现的位置 输入两个字符串A和B&#xff0c;输出B在A中出现的位置 输入 两行 第一行是一个含有空格的字符串 第二行是要查询的字串 输出 字串的位置 样例输入 I love c c python 样例输出 -1 样例输入 I love c c c 样例输出 8 12 #include<iostream> #inclu…...

8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发

摘要 深入探讨 RustAxum 数据库集成&#xff0c;包括 ORM 选型及实践&#xff0c;助力用户管理系统开发。 一、引言 在现代 Web 应用开发中&#xff0c;数据库集成是至关重要的一环。Rust 凭借其高性能、内存安全等特性&#xff0c;与 Axum 这个轻量级且高效的 Web 框架结合…...

电脑 BIOS 操作指南(Computer BIOS Operation Guide)

电脑 BIOS 操作指南 电脑的BIOS界面&#xff08;应为“BIOS”&#xff09;是一个固件界面&#xff0c;允许用户配置电脑的硬件设置。 进入BIOS后&#xff0c;你可以进行多种设置&#xff0c;具体包括&#xff1a; 1.启动配置 启动顺序&#xff1a;设置从哪个设备启动&#x…...

MySQL快速入门篇---库的操作

目录 一、创建数据库 1.语法 2.示例 二、查看数据库 1.语法 三、字符集编码和校验&#xff08;排序&#xff09;规则 1.查看数据库支持的字符集编码 2.查看数据库支持的排序规则 3.查看系统默认字符集和排序规则 3.1.查看系统默认字符集 3.2.查看系统默认排序规则 ​…...

前端:uniapp中uni.pageScrollTo方法与元素的overflow-y:auto之间的关联

在uniapp中&#xff0c;uni.pageScrollTo方法与元素的overflow-y:auto属性之间存在以下关联和差异&#xff1a; 一、功能定位差异 ‌uni.pageScrollTo‌ 属于‌页面级滚动控制‌&#xff0c;作用于整个页面容器‌34。要求页面内容高度必须超过屏幕高度&#xff0c;且由根元素下…...

【已更新完毕】2025华中杯B题数学建模网络挑战赛思路代码文章教学:校园共享单车的调度与维护问题

完整内容请看文末最后的推广群 构建校园共享单车的调度与维护问题 摘要 共享单车作为一种便捷、环保的短途出行工具&#xff0c;近年来在高校校园内得到了广泛应用。然而&#xff0c;共享单车的运营也面临一些挑战。某高校引入共享单车后&#xff0c;委托学生对运营情况进行调…...

NO.92十六届蓝桥杯备战|图论基础-最小生成树-Prim算法-Kruskal算法|买礼物|繁忙的都市|滑雪(C++)

一个具有n个顶点的连通图&#xff0c;其⽣成树为包含n-1条边和所有顶点的极⼩连通⼦图。对于⽣成树来说&#xff0c;若砍去⼀条边就会使图不连通图&#xff1b;若增加⼀条边就会形成回路。 ⼀个图的⽣成树可能有多个&#xff0c;将所有⽣成树中权值之和最⼩的树称为最⼩⽣成树…...

第十四节:实战场景-何实现全局状态管理?

React.createElement调用示例 Babel插件对JSX的转换逻辑 React 全局状态管理实战与 JSX 转换原理深度解析 一、React 全局状态管理实现方案 1. Context API useReducer 方案&#xff08;轻量级首选&#xff09; // 创建全局 Context 对象 const GlobalContext createConte…...

数据驱动、精准协同:高端装备制造业三位一体生产管控体系构建

开篇引入 鉴于集团全面推行生产运营体建设以及对二级单位生产过程管控力度逐步加强&#xff0c;某高端装备制造企业生产部长王总正在开展新的一年企业生产管控规划工作&#xff0c;为了能够更好地进行体系规划与建设应用&#xff0c;特邀请智能制造专家小智来进行讨论交流。 王…...

航电系统之通信技术篇

航电系统&#xff08;航空电子系统&#xff09;的通信技术是现代航空器的核心技术之一&#xff0c;其核心目标是实现飞行器内部各系统之间以及飞行器与外部设备&#xff08;如地面控制中心、其他飞行器等&#xff09;之间高效、可靠的信息交互。随着航空技术的不断发展&#xf…...

Linux 日常运维命令大全

Linux 作为一种开源操作系统&#xff0c;在服务器运维中扮演着重要角色。掌握常用的 Linux 命令对于运维人员而言至关重要。本文将整理一份 Linux 服务器运维常用命令大全&#xff0c;帮助你在日常工作中提高效率和准确性。 1. 基础命令 基础命令是Linux操作的起点&#xff0…...

HTTP 3.0 协议的特点

HTTP/3 是互联网传输协议的一次重要升级&#xff0c;相较于 HTTP/2&#xff0c;它引入了多项显著改进和新特性。 基于 QUIC 协议&#xff1a; HTTP/3 采用了 QUIC&#xff08;Quick UDP Internet Connections&#xff09;作为底层传输协议&#xff0c;QUIC 基于 UDP&#xff0…...

[工具]Java xml 转 Json

[工具]Java xml 转 Json 依赖 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.37</version> </dependen…...

「仓颉编程语言」Demo

仓颉编程语言」Demo python 1)# 仓颉语言写字楼管理系统示例&#xff08;虚构语法&#xff09;# 语法规则&#xff1a;中文关键词 类Python逻辑定义 写字楼管理系统属性:租户库 列表.新建()报修队列 列表.新建()费用单价 5 # 元/平方米方法 添加租户(名称, 楼层, 面积):…...

发现“横”字手写有难度,对比两个“横”字

我发现手写体“横”字“好看”程度&#xff0c;难以比得上印刷体&#xff1a; 两个从方正简体启体来的“横”字&#xff1a; 哪个更好看&#xff1f;我是倾向于左边一点。 <div style"transform: rotate(180deg); display: inline-block;"> 左边是我从方正简…...

深度学习3.1 线性回归

3.1.1 线性回归的基本概念 损失函数 梯度下降 3.1.2 向量化加速 %matplotlib inline import math import time import numpy as np import torch from d2l import torch as d2ln 1000000 #本机为了差距明显&#xff0c;选择数据较大&#xff0c;运行时间较长&#xff0c;可选…...

番外篇 | SEAM-YOLO:引入SEAM系列注意力机制,提升遮挡小目标的检测性能

前言:Hello大家好,我是小哥谈。SEAM(Squeeze-and-Excitation Attention Module)系列注意力机制是一种高效的特征增强方法,特别适合处理遮挡和小目标检测问题。该机制通过建模通道间关系来自适应地重新校准通道特征响应。在遮挡小目标检测中的应用优势包括:1)通道注意力增强…...

SpringBoot ApplicationEvent:事件发布与监听机制

文章目录 引言一、事件机制的基本概念二、创建自定义事件2.1 定义事件类2.2 发布事件2.3 简化的事件发布 三、创建事件监听器3.1 使用EventListener注解3.2 实现ApplicationListener接口3.3 监听非ApplicationEvent类型的事件 四、事件监听的高级特性4.1 条件事件监听4.2 异步事…...

[250415] OpenAI 推出 GPT-4.1 系列,支持 1M token

目录 OpenAI 推出 GPT-4.1 系列 OpenAI 推出 GPT-4.1 系列 OpenAI 宣布&#xff0c;新一代 GPT-4.1 模型系列正式发布&#xff0c;包括 GPT-4.1, GPT-4.1 mini 和 GPT-4.1 nano 三款模型&#xff0c;该系列模型在各项性能指标上全面超越 GPT-4o 和 GPT-4o mini&#xff0c;尤其…...

广东2024信息安全管理与评估一阶段答案截图

2023-2024 学年广东省职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题一 模块一 网络平台搭建与设备安全防护 一、 比赛时间 本阶段比赛时间为 180 分钟。 二、 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一…...

C++_设计模式\_观察者模式(Observer Pattern)

&#x1f44b; Hi, I’m liubo&#x1f440; I’m interested in harmony&#x1f331; I’m currently learning harmony&#x1f49e;️ I’m looking to collaborate on …&#x1f4eb; How to reach me …&#x1f4c7; sssssdsdsdsdsdsdasd&#x1f383; dsdsdsdsdsddfsg…...

安卓手机如何改ip地址教程

对于安卓手机用户而言&#xff0c;ip修改用在电商、跨境电商、游戏搬砖、社交软件这些需要开多个账号的项目。因为多个设备或账号又不能在同一ip网络下&#xff0c;所以修改手机的IP地址防检测成为一个必要的操作。以下是在安卓手机上更改IP地址的多种方法及详细步骤&#xff0…...

​​从Shell到域控:内网渗透中定位域控制器的8种核心方法​

在内网渗透中&#xff0c;定位域控制器&#xff08;Domain Controller, DC&#xff09;是攻防对抗的关键环节。本文结合实战经验与工具技术&#xff0c;总结出​​8种从Shell快速发现域控主机的方法​​&#xff0c;涵盖命令探测、网络扫描、日志分析等维度&#xff0c;助你系统…...

PHP腾讯云人脸核身获取Access Token

参考腾讯云官方文档&#xff1a; 人脸核身 获取 Access Token_腾讯云 public function getAccessToken(){$data [appId > , //WBappid,https://cloud.tencent.com/document/product/1007/49634secret > ,grant_type > client_credential, //授权类型version > 1…...

Kotlin 集合过滤全指南:all、any、filter 及高级用法

在 Kotlin 中&#xff0c;集合过滤是数据处理的核心操作之一。无论是简单的条件筛选&#xff0c;还是复杂的多条件组合&#xff0c;Kotlin 都提供了丰富的 API。本文将详细介绍 filter、all、any、none 等操作符的用法&#xff0c;并展示如何在实际开发中灵活运用它们。 1. 基础…...

解决6栈6层码头集装箱堆栈翻箱最优解问题

‘’’ con 1 origin_stack = [ [4, 4, 1, 0, 0, 0], # 第一栈 [4, 3, 2, 1, 0, 0], # 第二栈 [4, 2, 2, 1, 0, 0], # 第三栈 [3, 3, 3, 1, 0, 0], # 第四栈 [3, 4, 2, 1, 0, 0], # 第五栈 [4, 2, 3, 2, 0, 0] # 第六栈 ] con 2 origin_stack = [ [4, 4, 3, 0, 0, 0], # 第一栈…...

flutter app实现分辨率自适应的图片资源加载

在 Flutter 中&#xff0c;为了实现分辨率自适应的图片资源加载&#xff0c;确实需要遵循特定的目录结构和命名规则。这种机制允许 AssetImage 根据设备的 设备像素比&#xff08;Device Pixel Ratio, DPR&#xff09; 自动选择最合适的图片资源。以下是详细的说明和实现步骤&a…...