HDFS编程实践(Hadoop3.1.3)

2023-05-16

一、利用Shell命令与HDFS进行交互

1.目录操作

在HDFS中为hadoop用户创建一个用户目录

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

显示HDFS中与当前用户hadoop对应的用户目录下的内容:

 ./bin/hdfs dfs -ls .

创建一个input目录:

 ./bin/hdfs dfs -mkdir input

可以使用rm命令删除一个目录

./bin/hdfs dfs -rm -r input

上面命令中,“-r”参数表示如果删除“input”目录及其子目录下的所有内容,如果要删除的一个目录包含了子目录,则必须使用“-r”参数,否则会执行失败。

2.文件操作

使用如下命令把本地文件系统的“/home/hadoop/myLocalFile.txt”上传到HDFS中的当前用户目录的input目录下,也就是上传到HDFS的“/user/hadoop/input/”目录下:

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

Shell 命令

可以使用ls命令查看一下文件是否成功上传到HDFS中,具体如下:

./bin/hdfs dfs -ls input

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

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

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

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

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

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

二、利用Web界面管理HDFS

在这里插入图片描述

三、利用Java API与HDFS进行交互

1. 在IDEA中创建项目

使用IDEA在/home/hadoop下创建工作区workspace

在这里插入图片描述

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

(1)“/usr/local/hadoop/share/hadoop/common”目录下的所有JAR包,包括hadoop-common-3.1.3.jar、hadoop-common-3.1.3-tests.jar、haoop-nfs-3.1.3.jar和haoop-kms-3.1.3.jar,注意,不包括目录jdiff、lib、sources和webapps;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/hdfs”目录下的所有JAR包,注意,不包括目录jdiff、lib、sources和webapps;
(4)“/usr/local/hadoop/share/hadoop/hdfs/lib”目录下的所有JAR包。

在这里插入图片描述

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://localhost: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("\n"+"路径:" + 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);
            }
            fsdis.close();
        }
        ps.close();
        fsdos.close();
    }
    public static void main(String[] args) throws IOException {
        MergeFile merge = new MergeFile(
                "hdfs://localhost:9000/user/hadoop/",
                "hdfs://localhost:9000/user/hadoop/merge.txt");
        merge.doMerge();
    }
}

4. 编译运行程序

首先要确保HDFS的“/user/hadoop”目录下已经存在file1.txt、file2.txt、file3.txt、file4.abc和file5.abc,每个文件里面有内容。这里,假设文件内容如下:
file1.txt的内容是: this is file1.txt
file2.txt的内容是: this is file2.txt
file3.txt的内容是: this is file3.txt
file4.abc的内容是: this is file4.abc
file5.abc的内容是: this is file5.abc

开始运行程序。程序运行结束后,会在底部的面板中显示运行结果信息(如下图所示)。同时,面板中还会显示一些似“log4j:WARN…”的警告信息,可以不用理会。

在这里插入图片描述

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

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

5. 应用程序的部署

在IDEA-文件-项目结构-工件中添加工件

在这里插入图片描述

选择主类并点击确定

在这里插入图片描述

然后点击构建-构建工件,生成jar包,将jar包移动至usr/local/hadoop/myapp

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

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

现在,就可以在Linux系统中,使用hadoop jar命令运行程序,命令如下:

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

上面程序执行结束以后,可以到HDFS中查看生成的merge.txt文件,比如,可以在Linux终端中执行如下命令:

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

可以看到如下结果:

this is file1.txt
this is file2.txt
this is file3.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDFS编程实践(Hadoop3.1.3) 的相关文章

  • 树莓派:64位 RPI OS(Bullseye) 更换国内源

    树莓派装好后第一件事通常是先apt update和apt upgrade xff0c 默认需要联到树莓派官方的服务器上下载更新 我不知道各位的联网情况如何 xff0c 反正我家里电信网络是龟速 xff0c 慢到忍者神龟都不能忍的那种 xff
  • 树莓派OS:2022-04-04版的Headless设置方法

    Raspberry Pi OS 2022 04 04版增加了一个特性 xff1a 取消了祖传的默认用户 pi 当你刷完镜像首次使用的时候 xff0c 会先跳出来一个界面让你指定用户名和密码 xff0c 无论是桌面版还是Lite版 显然这是一
  • 树莓派:安装WordPress

    之前尝试了在树莓派OS下安装Discuz 成功 xff0c 今天再试下安装WordPress 过程差不多 xff0c 毕竟都是基于LAMP的应用 一 安装操作系统 xff1a 1 刷卡灌系统略 我选择64位的系统 注意自2022 04 04
  • 树莓派:解决4B升级到Bullseye后xrdp不响应的问题

    相较于VNC xff0c 我更喜欢RDP xff0c 因为偷懒更容易 xff0c 在Windows里直接mstsc v IP地址 即可启动远程桌面 所以玩树莓派也一样 xff0c 如果装了桌面版的RPI OS xff0c 那么一定sudo
  • 不忘初心,能偷懒就偷懒:C#操作Word文件

    换了一家公司 xff0c 新单位的信息化建设仍然在路上 OA也正在建设中 xff0c 目前项目发票报销等流程仍然是手工的 xff0c 只能线下填单子 至于是电脑上填好打印出来还是直接空白模板打出来手写倒是不管 xff0c 随意 疫情期间积压
  • Python读写JSON格式数据

    文章目录 JSON格式数据简介使用Python读写JSON格式数据1 读取json文件2 写入json文件 自己编写一个JsonUtils JSON格式数据简介 JSON文件的读写应算成Python基础知识的内容 xff0c 但是由于在编写
  • 银河麒麟初体验

    国产替代及信创看样子是个趋势了 本行业尽管暂未强制 xff0c 但是也被吹风了 xff0c 因此技术储备也要准备起来了 在此大背景及机缘巧合之下 xff0c 接触到了银河麒麟 不吹不黑 xff0c 初体验的感觉就是换壳CentOS 特别申明
  • openEuler@树莓派

    前几天跟华为的销售 售前兄弟探讨国产信创替代 xff0c 话题自然包含了open欧拉操作系统 周末突然又想起这茬儿了 xff0c 就去官网浏览了一下 本想只是随便再进一步了解下 xff0c 没想到居然看到了这个 xff1a 嗯 xff0c
  • 使用树莓派做Apache2 HA实验

    听闻树莓派也已经是个理财产品了 xff0c 默默关闭了某宝网页的我不禁陷入了沉思 xff0c 然后翻出了之前买的一堆3B 话说回来 xff0c 虽然账面上浮盈了 xff0c 但乐不出来 按郭德纲的说法 xff0c 真乐出来这堆树莓派治不好我
  • 真拿树莓派做Linux学习机靠谱不?

    反方辩友 xff1a 不靠谱 xff0c 太贵 干嘛不直接跑个虚拟机 xff1f 我很欣赏一个观点 xff1a 入门的第一奥义是不折腾 就这个方面而言 xff0c 树莓派官方OS确实做的不错 但树莓派的初心毕竟是个学习机 xff0c 跟其他
  • 灌水时间:树莓派4+Lakka做怀旧游戏机

    大力出奇迹 忘了树莓派里还插着TF卡就要想把主板从外壳里取下 xff0c 这把杯具 xff0c TF卡槽都被扯了下来 xff0c 这块理财产品瞬间就失去了投资属性 xff0c 变成了自用的 产品 好在使用价值还在 xff0c USB启动不影
  • 树莓派4:安装 .NET 6 SDK 并测试连接 MSSQL SERVER(无 mono)

    本文基于 2022 09 06 raspios bullseye arm64 首先安装操作系统 xff0c 推荐再 修改国内源 并sudo apt y update amp amp sudo apt y upgrade 如果喜欢在windo
  • 使用树莓派学习PostgreSQL

    知乎上刷到一个口水仗 xff0c 大意是mysql和postgresql哪个好 这种问题 xff0c 正如Java和C 哪个好之类的 xff0c 我一向都是当八卦浏览的 xff0c 只看不参与 xff0c 又不是豆花该吃甜还是该吃咸这种原则
  • 使用树莓派学习PostgreSQL(二):通过MSSQL Linked Server导入数据

    作为曾经呆过证券公司营业部的从业未遂人员 xff0c 兼十年老韭菜 xff0c 对我大A还是有蜜汁感情的 看着树莓派里空空荡荡的PGSQL xff0c 突发奇想 xff0c 尝试把今天的A股数据导进来 xff1f 之前写过一个基于MSSQL
  • 试图在WinPE下用cmd.exe调包sethc.exe/utilman.exe/osk.exe来重置管理员密码,但是无法调出命令行

    忘记windows密码 xff0c 最简单的办法就是使用自带账号工具的第三方winpe xff0c 直接重置密码完事儿 xff08 但如果有基于该账号加密的东西那就回不来了 xff09 xff1b 如果手头没有这样的pe盘也没关系 xff0
  • 树莓派:在VSCode中使用C#开发.Net软件(console)

    树莓派官方桌面系统支持VSCode xff0c 我们也可以在树莓派上使用C 开发 Net软件 本文作为一个笔记简单记录 1 安装VSCode xff1a 首先打开首选项中的Recommended Software xff0c 找到Progr
  • Debian DNS完整配置

    DNS服务 执行下面的命令安装 apt install y bind9 dnsutils 这些文件分别对应的作用如下 xff1a db 127 反向区域数据库 xff0c 用于将ip解析为对应的域名 db local 正向区域数据库 xff
  • 树莓派4B:跑通Paddle-Lite-Demo

    上周跟以前单位的大神见面 xff0c 期间大神聊到了百度飞桨框架 xff0c 并建议我看看能不能做点什么有意思的东西跑在树莓派上 大神就是大神 xff0c AI是我等学渣也配玩的吗 不过既然大神都这么推荐了那就尝试一下 xff0c 大不了从
  • 在NUC8上折腾安装Windows Server 2019

    整理我的吃灰物资时意外发现还有个八代的NUC迷你主机 想着现在内存和SSD都不贵 xff0c 干脆升级了然后装个Windows Server 2019玩玩 xff0c 跑个Hyper V做些实验 于是买了2根16G 2400的内存和1条1T
  • Ubuntu上跑通PaddleOCR

    书接上文 刚才说到我已经在NUC8里灌上了Windows Server 2019 接下来也顺利的启用了Hyper V角色并装好了一台Ubuntu 22 04 LTS 的虚机 由于自从上回在树莓派上跑通了Paddle Lite Demo之后想

随机推荐

  • 树莓派4:跑通Tensorflow的Sequential模型用于图片分类

    重要提示 xff1a 由于树莓派相对孱弱的性能 xff0c 直接在其上训练模型可能花 xff08 lang4 xff09 费非常长的时间 本文仅作为示例性的可行性参考 xff0c 请酌情考虑实验平台 著名的Tensorflow框架也可以运行
  • C# + .Net6 实现TensorFlow图片分类

    微软官网上发现一篇很有意思的文档 xff1a 教程 xff1a 用于对图像进行分类的 ML NET 分类模型 ML NET Microsoft Learn 这篇教程写的很学院派 xff0c 但有点碎 xff0c 属于上课不能打一秒钟瞌睡的那
  • 如何用一个废旧的笔记本打造一个家庭网络服务器?

    本来好好的笔记本的 xff0c 可偏偏屏幕说烂就烂 xff0c 那就干脆不要了 xff0c 改造改造吧 xff01 他本来长这样的 xff0c 如图 xff1a 什么 xff0c 你看见了水印 老哥 xff0c 别在意这些细节 简单说一下配
  • 基于Swing与MySQL之货物仓库管理系统(可为Java大作业、甚至毕业设计)

    前言 xff1a 该系统总代码行数约2100行 xff0c 采用技术栈为Swing框架与MySQL xff0c 编码环境为Eclipse 实现的功能有 xff1a 用户注册 登陆 xff1b 货物入仓 货物出仓 xff0c 货物信息更新与货
  • 使用MySQL WorkBench 如何导出数据库(包括数据)

    1 xff1a 打开MySQL WorkBench后 xff0c 选中Server xff0c Data Export 2 xff1a 在红色圈1内选中我们要导出的数据库 红色圈2是导出是否包含数据 xff1b 红色圈3是触发器等导出选项
  • Swift 如何生成随机数

    1 生成Int类型随机数 span class token keyword var span numberOne span class token punctuation span span class token builtin Int
  • Failed to start remote service “com.apple.debugserver“ on device.

    今天用真机调试时报出 Failed to start remote service com apple debugserver on device 百思不得解 遂关机重启 xff0c 果然运行成功 猜测可能是真机长时间没关机 xff0c 一
  • debian静态路由

    实验环境 xff1a 三台Debian最小化系统 xff0c 物理机是两张不同的网卡 第一台的第一张vm1网卡 192 168 10 1 24 第二台的第一张vm1网卡 192 168 10 254 24 第二台的第二张vm2网卡 192
  • 行列式与矩阵

    说明 xff1a 本公式只针对在二维或三通道的计算机视觉中所遇到的问题 xff0c 不代表传统意义上数学知识点范围 行列式 行列式概念 矩阵的行列式 xff0c 称之为det xff0c 是基于矩阵所包含的行列数据计算得到的标量 本质上是一
  • 基于SpringBoot与iOS(Swift)的电商平台设计

    技术栈 xff1a Server SpringBootSpring Data JPARedis简易分词 Client MVC架构SnpakitAlamofireSwiftyJSONkingfser xff08 过小的第三方库不阐述 xff0
  • 推荐系统 Mahout入门之简单使用

    Mahout xff1a Apache Mahout 是 Apache Software Foundation xff08 ASF xff09 旗下的一个开源项目 xff0c 提供一些可扩展的机器学习领域经典算法的实现 xff0c 旨在帮助
  • Command CompileSwiftSources failed with a nonzero exit code

    报错 xff1a Command CompileSwiftSources failed with a nonzero exit code 原因 xff1a 可能是项目目录下存在 同名不同文件夹的文件 解决方法 xff1a 检查 同名不同文件
  • Flutter 自定义SwitchButton

    效果 xff1a xff08 AppBar中间的SwitchButton xff09 代码 xff1a span class token keyword import span span class token string literal
  • diff算法swift版

    前几天用chatgpt生成diff算法 xff0c 配上swift的简洁语法 xff0c 可以称之为锦上添花 下面是代码 xff1a span class token keyword func span span class token f
  • Flutter 调用摄像头扫描二维码插件

    原生平台如果想要实现二维码扫描很简单 xff0c 例如iOS可以根据Version库或者AVFoudation库很快定制出相应工具来 xff0c Flutter只能依赖第三方插件了 插件依赖 xff1a span class token k
  • 【Linux】搭建Yapi接口管理工具

    在年前员工访谈时发现 xff0c 前后端协作开发会出现一定的内耗现象 xff0c 在当前前后端分离的情况下前端往往会因为后端接口存在问题影响对接速度 xff0c 在接口设计不明确的情况下还需要反复确认和沟通 公司过往使用ApiManager
  • 树莓派3B安装VScode

    树莓派3B安装VScode sudo apt install code xff08 一句命令搞定 xff09 xff08 ps 本来想在树莓派3b上安装VScode 网上找半天 xff0c 结果又臭又长还不能解决问题 xff0c 直到翻了贼
  • Angular is running in the development mode. Call enableProdMode() to enable the production mode.

    控制台输出 xff1a Angular is running in the development mode Call enableProdMode to enable the production mode 解决方法 xff1a 在mai
  • Debian SSH免密登录

    安装服务后修改主配置文件 vim etc ssh sshd config 改这个配置文件 在第32行PermttRootLogin yes 允许root用户登录 systemctl restart sshd 然后再重启一下服务 修改端口号
  • HDFS编程实践(Hadoop3.1.3)

    一 利用Shell命令与HDFS进行交互 1 目录操作 在HDFS中为hadoop用户创建一个用户目录 span class token builtin class name cd span usr local hadoop bin hdf