2、HDFS编程实践

news2024/12/24 10:49:59

目录

  • 1、Hadoop三种Shell方式
    • (1)目录操作
      • 1、查看目录
      • 2、创建目录
      • 3、删除目录
    • (2)文件操作
      • 1、创建文件
      • 2、上传文件
      • 3、下载文件
      • 4、拷贝文件
  • 2、利用Web界面管理HDFS
  • 3、利用Java API 与 HDFS 进行交互
    • (1)安装eclipse包
    • (2)使用 Eclipse 开发试 调试 HDFS Java 程序
    • (3)编译运行程序
      • 1、启动HDFS
      • 2、创建文件
      • 3、上传文件
      • 4、回到eclipse
      • 5、在HDFS查看merge.txt的内容
    • (4)部署用户程序
      • 1、创建目录
      • 2、将程序打包成JAR包
      • 3、删除merge.txt
      • 4、运行jar包
    • (5)、关闭HDFS

目的:
熟练使用HDFS操作常用的Shell命令
熟悉HDFS操作常用的Java API
在这里插入图片描述

1、Hadoop三种Shell方式

在这里插入图片描述

(1)目录操作

1、查看目录

在这里插入图片描述

2、创建目录

在这里插入图片描述

3、删除目录

在这里插入图片描述

(2)文件操作

1、创建文件

在这里插入图片描述

2、上传文件

在这里插入图片描述

3、下载文件

在这里插入图片描述

4、拷贝文件

在这里插入图片描述

2、利用Web界面管理HDFS

启动HDF、在浏览器输入http://localhost:9870

./sbin/start-dfs.sh

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

(1)安装eclipse包

链接: link

链接:https://pan.baidu.com/s/1V_XVDTl4zGcT5gXx7Z2qDA
提取码:1vy7

在这里插入图片描述

(2)使用 Eclipse 开发试 调试 HDFS 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("路径:" + 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/damon/",
                "hdfs://localhost:9000/user/damon/merge.txt");
        merge.doMerge();
    }
}

在这里插入图片描述

(3)编译运行程序

1、启动HDFS

cd /usr/local/hadoop #进入 hadoop 安装目录
./sbin/start-dfs.sh #启动 hdfs
jps #查看进程
./bin/hdfs dfs -ls / #查看根目录下内容
./bin/hdfs dfs -ls/user #查看/user 目录下内容

2、创建文件

在这里插入图片描述

3、上传文件

在这里插入图片描述

4、回到eclipse

运行文件:
在这里插入图片描述

5、在HDFS查看merge.txt的内容

在这里插入图片描述

(4)部署用户程序

1、创建目录

在这里插入图片描述

2、将程序打包成JAR包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、删除merge.txt

在这里插入图片描述

4、运行jar包

./bin/hadoop jar ./myapp/HDFSexample.jar

在这里插入图片描述
在这里插入图片描述

(5)、关闭HDFS

在这里插入图片描述

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

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

相关文章

【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

千益畅行:旅游卡免费服务,包含哪些内容?

​凭此卡可免费旅游,单卡支持2-6人同行,免费服务内容包含:酒店住宿、团餐、景区首道大门票、导游、大巴、旅游责任险、接送机等,目前支持全国40多条旅游线路,爱旅游的朋友们可以约起来! #旅游卡服务#

Facebook直播限流是什么原因?是ip地址导致的吗

随着社交媒体和直播行业的蓬勃发展,Facebook直播已成为众多企业和个人进行品牌推广、产品展示和互动交流的重要平台。然而,在享受直播带来的便利与效益的同时,不少用户也面临着直播限流的困扰。本文将探讨Facebook直播限流的原因,…

戴尔科技VS惠与科技:谁是美股AI服务器领域更好的投资选择?

猛兽财经核心观点: (1)戴尔科技(DELL)和惠与科技(HPE)都是AI服务器领域的优质公司。 (2)惠与科技主导着以软件为中心的服务器市场,而戴尔科技则迎合着以硬件为中心的客户。 (3)两家公…

【C语言】带你手把手拿捏指针(3)(含转移表)

文章目录 一、字符指针变量二、数组指针变量1.数组指针变量是什么2.数组指针变量的初始化 三、二维数组传参的本质四、函数指针变量1. 函数指针变量的创建2.函数指针的使用3.案例解析: 五、typedof关键字六、函数指针数组和转移表1.函数指针数组2.转移表 一、字符指…

Linux基础---11优化系统

一.优化SSH连接速度 1)修改配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak#备份vi /etc/ssh/sshd_config将79行和115行的yes修改为no,最后:wq保存退出(79gg和115gg可直接跳至本行) 79 行:GSSAPIAuthentication no…

二叉树OJ题——对称二叉树

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 对称二叉树 二、解题思路 三、解题代码

基础算法(3)——二分

1. 二分查找 题目描述: 解法一:暴力解法(时间复杂度) 循环遍历数组,找到相等的值返回下标即可 解法二:二分查找 “有序数组可使用二分查找”,这句话是不严谨的,应该是具有 “二段性” 的数组…

nodejs+express+vue教辅课程辅助教学系统 43x2u前后端分离项目

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式,开发软件有很多种可以用,本次开发用到的软件是vscode,用到的数据库是…

蚂蚁在 RAG 与向量检索上的实践:技术应用与创新分析

引言 在AI技术迅猛发展的背景下,如何有效地处理海量数据成为了技术创新的关键问题。向量数据库和RAG(Retrieval-Augmented Generation)技术结合,为提升生成式AI应用的准确性和实时性提供了有效的解决方案。本文结合蚂蚁集团在向量…

宠物空气净化器该怎么选?希喂、352、霍尼韦尔哪款对吸附浮毛有效

明明我都成年很久了,我爸妈还把我当小孩一样,我干什么前都要和他们说一声。前段时间去朋友家玩,本来对宠物无感的我一下子就被她家可爱的猫咪萌化了。猫咪好可爱呀,毛茸茸的摸起来很舒服,眨巴的大眼睛看着你真的心软软…

荣誉 | 分贝通入选2024「Cloud 100 China」

近日,2024 Cloud 100 China 榜单于美高梅酒店正式发布,这是靖亚资本和崔牛会联合推出的第三届榜单。 全球商旅管理、企业支出全流程管控、数据BI全方位降本、AI赋能高效出行体验.......近年来,分贝通不断精进产品能力及BI&AI能力,再次上榜。 本届评选,组委会基于过去一年融…

【MRI数据】LEMON MRI 数据集下载

本文介绍使用cyberduck软件下载 LEMON MRI 数据。 数据简介 LEMON MRI 数据官网:https://fcon_1000.projects.nitrc.org/indi/retro/MPI_LEMON.html 提供了 228 名健康参与者的公开数据集,包括年轻人(N154,25.13.1 岁&#xff0…

ModbusTCP报文详解

Modbus TCP与Modbus Rtu(ASCI)数据帧的区别 总结:Modbus TCP就是在Modbus Rtu(ASCI)基础上去掉CRC,再加上六个0一个6 Modbus TCP MBAP报文头 域长度描述客户机服务器事务处理标识符2字节Modbus请求/响应事务处理的识别客户机启动服务器从接收的请求中重…

vue3中如何拿到vue2中的this

vue3中常用api vue3中常用响应式数据类型:

【计算机网络】详解TCP/IP分层模型局域网和跨网络通信的原理

一、网络协议 两个概念:交换机:实现位于同一个子网中的主机数据交换。路由器:实现数据包的跨网络转发。 两台主机的距离变远了,会引发出一系列问题: 1、如何使用数据的问题 2、数据的可靠性问题 3、主机定位问题 4、…

<<编码>> 第 14 章 反馈与触发器(2)--或非门反馈 示例电路

或非门反馈电路 info::操作说明 先闭合上面的开关(置位 Set), 此时输出高电平 再断开上面的开关, 因反馈的存在, 输出保持为高电平 闭合下面的开关(复位 Reset), 输出重新回到低电平 断开下面的开关, 输出继续保持低电平 primary::在线交互操作链接 https://cc.xiaogd.net/…

产品经理有必要学习大模型技术吗?

第一,大模型正在成为各类产品的核心组件,颠覆了传统产品和应用生态,进入AI大模型应用的新阶段。 例如,NewBing、Perplexity等AI搜索产品已经颠覆了传统搜索引擎的搜索模式,用户不用搜索后再点开排序靠前的网页链接&am…

Linux常见查看文件命令

目录 一、cat 1.1. 查看文件内容 1.2. 创建文件 1.3. 追加内容到文件 1.4. 连接文件 1.5. 显示多个文件的内容 1.6. 使用管道 1.7. 查看文件的最后几行 1.8. 使用 -n 选项显示行号 1.9. 使用 -b 选项仅显示非空行的行号 二、tac 三、less 四、more 五、head 六、…

十八,Spring Boot 整合 MyBatis-Plus 的详细配置

十八,Spring Boot 整合 MyBatis-Plus 的详细配置 文章目录 十八,Spring Boot 整合 MyBatis-Plus 的详细配置1. MyBatis-Plus 的基本介绍2. Spring Boot 整合 MyBatis Plus 的详细配置3. Spring Boot 整合 MyBatis plus 注意事项和细节4. MyBatisx 插件的…