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

news2025/5/17 8:09:57

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

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

 第一步:准备工作

本文是在之前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

出现如上界面即为成功。 

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

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

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

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

航电系统之通信技术篇

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

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

我发现手写体“横”字“好看”程度&#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 异步事…

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

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

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

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

(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)

目录 演示视频&#xff1a; 源代码 main.c LCD1602.c LCD1602.h AT24C02.c AT24C02.h Key.c Key.h I2C.c I2C.h Delay.c Delay.h 代码解析与教程&#xff1a; Dealy模块 LCD1602模块 Key模块 I2C总线模块 AT24C02模块 /E2PROM模块 main模块 演示视频&#xff1a; &…

STL简介 + string【上】

一 . STL简介 1.1 什么是STL STL&#xff08;standard template libaray - 标准模板库) : 是C标准库的重要组成部分 &#xff0c; 不仅是一个可复用的组件库 &#xff0c; 而且是一个包罗 数据结构 与 算法 的软件框架 。 注意 &#xff1a; 是标准库的一部分 &#xff…

【Bluedroid】A2DP Sink播放流程源码分析(二)

接上一篇继续分析:【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端(Sink)流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数,负责处理接收端的音频数据事件,将底层接收到的音频数据传递…

redis利用备忘录

fofa: icon_hash"864611937" 防护&#xff1a; redis的安全设置&#xff1a;设置完毕&#xff0c;需要重加载配置文件启动redis 1.绑定内网ip地址进行访问 2. requirepass设置redis密码 3.保护模式开启protected-mode开启&#xff08;默认开启&#xff09; 4.最好把…

SAP系统中MD01与MD02区别

知识点普及&#xff0d;MD01与MD02区别 1、从日常业务中&#xff0c;我们都容易知道MD01是运行全部物料&#xff0c;MD02是运行单个物料 2、在做配置测试中&#xff0c;也出现过MD02可以跑出物料&#xff0c;但是MD01跑不出的情况。 3、MD01与MD02的差异: 3.1、只要在物料主数…

ubuntu学习day3

3 编译与调试 3.1 gcc/g编译器 当我们进行编译的时候&#xff0c;要使用一系列的工具&#xff0c;我们称之为工具链。SDK就是编译工具链的简写&#xff0c;我们所使用的是gcc系列编译工具链。使用-v参数来查看gcc的版本&#xff0c;从而确定某些语法特性是否可用&#xff0c;…

6.8.最小生成树

一.复习&#xff1a; 1.生成树&#xff1a; 对于一个连通的无向图&#xff0c;假设图中有n个顶点&#xff0c;如果能找到一个符合以下要求的子图&#xff1a; 子图中包含图中所有的顶点&#xff0c;同时各个顶点保持连通&#xff0c; 而且子图的边的数量只有n-1条&#xff0…

QT中栅格模式探索

1、Qt中选择了栅格模式&#xff0c;如下图所示&#xff1a; 2、在进行整个大的UI界面布局时&#xff0c;需了解每个控件所需要选择的属性sizePolicy。 sizePolicy包含如下几种选择&#xff1a; 3、举个例子&#xff1a;此时整个UI界面&#xff0c;我采用了栅格模式&#xf…