Hadoop的Windows环境准备

一、将Hadoop传输到Windows中

1、备份副本

cp -r /opt/softs/hadoop3.1.3/ /opt/softs/hadoop3.1.3_temp

2、删除备份的share目录

cd /opt/softs/hadoop3.1.3_temp
rm -rf share/

3、下载到Windows中

重命名去掉_temp 

4、删除备份文件

rm -rf /opt/softs/hadoop3.1.3_temp

二、配置Windows环境

1、将Windos依赖目录下的bin目录中的全部文件,复制粘贴到hadoop3.1.3的bin目录下,有重复直接覆盖

2、双击winutils.exe,如果有窗体一闪而过,说明成功,如果失败则安装微软运行库

3、将hadoop.dll复制一份到C:\Windows\System32目录中

4、配置环境变量

(1)控制面板查找“高级系统设置”,打开后点击“环境变量”

(2)选择“系统变量”的“新建”输入如下信息:

(3)选中“系统变量”的Path选择“编辑”后选择“新建”,输入如下信息

D:\softs\dashuju\bigdata\hadoop3.1.3   //输入你自己的地址

三、创建Java的Maven项目

idea版本:2023.2.5

1、新建项目

创建好后目录如下:

2、添加项目依赖

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>3.1.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>3.1.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.1.3</version>
</dependency>

3、编写代码

package cn.edu.just.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 *调用hdfs的Java Api
 */
public class hdfsApiClient {

    //文件系统对象
    FileSystem fileSystem = null;

    /**
     * 初始化hdfs文件系统
     * @Before:在具体方法前会调用被注解的方法
     */
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {

        //创建文件系统配置对象
        Configuration conf = new Configuration();

        //创建文件系统对象
        fileSystem = FileSystem.get(new URI("hdfs://bigdata03:8020"), conf, "root");

        System.out.println("hdfs文件系统初始化成功!");

    }

    /**
     * 创建hdfs目录
     */
    @Test
    public void createPath() throws IOException {

        if (fileSystem != null) {

            boolean result = fileSystem.mkdirs(new Path("/hdfs_api"));
            if (result) {
                System.out.println("创建目录成功");
            }else {
                System.out.println("创建目录失败");
            }

        }
    }

    /**
     * 删除目录或者文件
     */
    @Test
    public void deletePath() throws IOException {

        if (fileSystem != null) {

            Path deletePath = new Path("/hdfs_api");

            //判断hdfs上是否存在该目录
            if (fileSystem.exists(deletePath)){

                /**
                 * 目录存在,调用delete(Path f, boolean recursive)方法进行删除
                 * 第一个参数是要删除的目录的路径
                 * 第二个参数表示:是否要递归删除
                 */
                boolean deleteResult = fileSystem.delete(deletePath, false);

                System.out.println(deleteResult == true ? "删除目录成功":"删除目录失败");

            }else {
                System.out.println("要删除的目录在hdfs上不存在");
            }

        }
    }

    /**
     * 在hdfs上创建一个文件,并写入指定的内容
     */
    @Test
    public void createHdfsFile() throws IOException {

        //获取数据输出流对象
        FSDataOutputStream fsDataOutputStream =
                 fileSystem.create(new Path("/api_file.txt"));

        //定义要输出的文件的内容
        String line = "Hello bigdata";

        //将指定内容写入文件
        fsDataOutputStream.write(line.getBytes());

        //对数据输出流对象进行刷新
        fsDataOutputStream.flush();

        //关闭输出流对象
        fsDataOutputStream.close();
    }

    /**
     * 先运行一下createPath,确保hdfs上目录存在
     * 修改hdfs上的文件的路径和名称
     */
    @Test
    public void moveHdfsFile() throws IOException {

        //文件的原路径
        Path src = new Path("/api_file.txt");

        //文件的新路径
        Path dst = new Path("/hdfs_api/api_file_new.txt");

        boolean moveResult = fileSystem.rename(src, dst);

        if (moveResult){
            System.out.println("文件路径修改成功");
        }else {
            System.out.println("文件路径修改失败");
        }
    }

    /**
     * 读取hdfs上的文件内容
     */
    @Test
    public void readHdfsFile() throws IOException {

        //获取数据输入流对象
        FSDataInputStream fsDataInputStream =
                fileSystem.open(new Path("/hdfs_api/api_file_new.txt"));

        //通过IO工具类读取文件中的数据
        //System.out代表队是PrintStream对象,该对象是OutputStream类的间接子类
        IOUtils.copyBytes(fsDataInputStream,System.out,2048,false);

        //换行
        System.out.println();
    }

    /**
     * 从本地上传文件到hdfs上
     */
    @Test
    public void uploadFile() throws IOException {

        //本地文件的路径
        Path src = new Path("E:\\centos&&hadoop\\words.txt");

        //文件上传到到hdfs的路径
        Path dst = new Path("/hdfs_api");

        //文件上传成功后,本地文件是否删除,默认为false
        boolean delSrc = true;

        //上传文件是否覆盖,默认为true
        boolean overwrite = false;

        fileSystem.copyFromLocalFile(delSrc,overwrite,src,dst);
    }

    /**
     *从hdfs上下载文件到本地
     */
    @Test
    public void downloadFile() throws IOException {

        //在hdfs上的文件
        Path src = new Path("/hdfs_api/api_file_new.txt");

        //文件的下载路径
        Path dst = new Path("E:\\centos&&hadoop\\api_file_new.txt");

        //文件下载后,是否删除hdfs上的源文件
        boolean delSrc = false;

//        false:下载的文件会存在crc校验文件
//        true:不会存在crc校验文件
        boolean useRawLocalFileSystem = false;

        fileSystem.copyToLocalFile(src, dst);
    }

    /**
     * 查看hdfs上的文件信息
     */
    @Test
    public void queryHdfsFileInfo() throws IOException {

        //查询的起始路径
        Path path = new Path("/");

        //是否递归查询
        boolean recursive = true;

        //获取迭代器
        RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator =
                fileSystem.listFiles(path, recursive);

        //进行遍历输出
        while ( locatedFileStatusRemoteIterator.hasNext()) {

            //获取迭代器中需要迭代的元素
            LocatedFileStatus next = locatedFileStatusRemoteIterator.next();

            //获取文件路径
            Path filePath = next.getPath();

            System.out.println("文件的路径是:"+filePath);

            //获取文件的权限
            FsPermission permission = next.getPermission();
            System.out.println("文件的权限是:"+permission);

            //获取文件的所属用户
            String owner = next.getOwner();
            System.out.println("文件的所属用户是:"+owner);

            //获取文件的所属用户的用户组
            String group = next.getGroup();
            System.out.println("文件的所属用户的用户组是:"+group);

            //获取文件的副本数
            short replication = next.getReplication();
            System.out.println("文件的副本数是:"+replication);

            //获取文件的块大小,单位是字节
            long blockSize = next.getBlockSize();
            System.out.println("文件的块大小是:"+blockSize/1024/1024+"MB");

            System.out.println("--------------------------------------------------------");
        }
    }

    /**
     * 关闭文件系统对象
     * @After:在具体方法执行完毕后会调用被注解的方法
     */
    @After
    public void close() throws IOException {

        if (fileSystem != null) {
            fileSystem.close();
            System.out.println("hdfs文件系统已关闭!");
        }

    }
}

运行前开启hadoop集群,在NameNode节点开启hdfs(start-dfs.sh)

可打开NameNode的web服务网址,便于后续查看

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1867java银证转账系统系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java银证转账系统系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&a…

[工具探索]富士mini90拍立得使用指南

文章目录 1. 基本功能介绍1.1 相机外观1.2 电池与胶片 2. 设置相机2.1 装入电池2.2 装入胶片 3. 拍摄模式3.1 标准模式3.2 儿童模式3.3 远景模式3.4 双重曝光模式3.5 Bulb&#xff08;B&#xff09;模式3.6 **派对模式**3.7 微距模式3.8 **亮度模式**3.9 **定时拍摄模式**3.10 …

FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外&#xff0c;还有比较两种比较新的流媒体协议&#xff0c;分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport&#xf…

数字科技如何助力博物馆设计,强化文物故事表现力?

国际博物馆日是每年为了推广博物馆和文化遗产&#xff0c;而设立的一个特殊的日子&#xff0c;让我们可以深入探讨博物馆如何更好地呈现和保护我们的文化遗产&#xff0c;随着近年来的数字科技发展&#xff0c;其在博物馆领域的应用越来越广泛&#xff0c;它为博物馆提供了新的…

产品创新管理:从模仿到引领,中国企业的创新之路

一、引言 在全球化竞争日益激烈的今天&#xff0c;科技创新已成为推动国家经济增长和社会进步的关键动力。中国自改革开放四十年来&#xff0c;在科技创新领域取得了举世瞩目的成就&#xff0c;从跟踪模仿到自主研发&#xff0c;再到自主创新、开放创新和协同创新并举&#xf…

【CVE-2024-4577】PHP CGI 远程代码执行漏洞

# 转载 本文出自&#xff1a;【CVE-2024-4577】PHP CGI 远程代码执行漏洞 - 极核GetShell (get-shell.com) # 漏洞描述 PHP 语言在设计时忽略Windows 作业系统内部对字元编码转换的Best-Fit特性&#xff0c;导致未认证的攻击者可透过特定的字元序列绕过旧有CVE-2012-1823的保…

Attention注意力机制:理论基础、核心架构、应用领域及最新研究动态

Attention机制源于对序列建模中长期依赖关系的有效捕获需求&#xff0c;其理论基础在于让模型动态分配权重以聚焦于输入序列中与当前任务相关的关键部分。核心架构包括Query-Key-Value三元组计算、Softmax归一化的注意力得分、加权求和生成上下文向量&#xff0c;以及扩展至多头…

17_Vue高级监听器生命周期Vue组件组件通信

文章目录 1. 数据监听器watch2. Vue生命周期3. Vue组件4. Vue组件通信Appendix 1. 数据监听器watch 首先watch需要单独引 import {watch} from vuewatch函数监听ref响应式数据 watch(监听的内容&#xff0c;监听行为)监听行为默认为(newValue,oldValue) let firstname ref…

怎么换自己手机的ip地址

在互联网时代&#xff0c;IP地址已经成为了我们数字身份的一部分。无论是浏览网页、下载文件还是进行在线交流&#xff0c;我们的IP地址都在默默发挥着作用。然而&#xff0c;有时出于安全或隐私保护的考虑&#xff0c;我们可能需要更换手机的IP地址。那么&#xff0c;如何轻松…

Android Kotlin 异步操作回调转换为挂起函数

异步接口回调是一种通过接口将任务的执行和结果处理分离开来的编程设计模式。通常用于网络请求、数据库查询等耗时操作。 挂起函数是 Kotlin 中的一个特性&#xff0c;用于简化异步编程。挂起函数是可以在协程中暂停执行并恢复的函数&#xff0c;避免了回调地狱问题&#xff0…

【ARM Cache 与 MMU 系列文章 7.3 – ARMv8/v9 MMU 块描述符与页表描述符】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 上篇文章&#xff1a;【ARM Cache 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】 文章目录 MMU 块描述符与页描述符Block DescriptorBlock descriptor formatsBlock Entry 介绍Block En…

使用Gitblit软件开启git服务器

文章目录 使用Gitblit软件开启git服务器&#xff0c;供局域网其他电脑当做git仓库服务1. java依赖环境安装2. Mac系统操作2.1 下载Gitblit、配置参数2.2 启动服务2.3 终止服务&#xff1a;停止脚本即可 3. window系统操作3.1 下载Gitblit、配置参数3.2 启动服务3.3 终止服务&am…

大学生创新与创业搜题软件?推荐7个搜题软件和学习工具 #媒体#知识分享

随着大学课程的增多和知识的不断积累&#xff0c;大学生们常常面临着繁重的作业和复杂的题目。为了解决这一问题&#xff0c;许多大学生搜题软件应运而生。 1.彩虹搜题 这个是公众号 个性化推荐功能&#xff0c;精准满足需求。更高效地获取你想要的答案。 下方附上一些测试的…

PAT-1009 说反话(java实现)

还是这种题好&#xff0c;多简单啊&#xff0c;题目多清晰明了啊&#xff0c;多让人增加学习的热情啊。 题目 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长…

Android Media Framework(四)Non-Tunneled组件的状态转换与buffer分配过程分析

本篇将继续深入OpenMAX IL Spec&#xff0c;详细解析Non-tunneled&#xff08;非隧道&#xff09;组件的初始化、数据传递以及组件销毁过程。通过阅读本篇内容&#xff0c;我们应能对Non-tunneled组件的buffer分配与状态转换过程有一个清晰的了解。 1、组件初始化 以下是IL Sp…

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南 大家好 我是寸铁&#x1f44a; 总结了【Redis】构建强韧的远程Redis连接与端口保障机制完美指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 在当今的软件开发领域中&#xff0c;远程访问和操作数据存储是极为常见…

linux常用命令及其选项

1、常用命令 1.1、ls 选项说明-a显示所有文件及目录 (包括隐藏文件)-i显示inode-A同 -a选项 &#xff0c;但不列出 "." (目前目录) 及 ".." (父目录)-l列出信息详细(如文件型态、权限、拥有者、文件大小等)-R递归显示(若目录下有文件&#xff0c;则以下之…

Allegro导入DXF文件

阿里狗导入DXF文件 点击File–>Import–>DXF&#xff0c;注意DXF file那边不能使用中文路径和文件名以及非法字符&#xff0c;DXF units一般为mm&#xff0c;结构那边一般都用mm制作图&#xff0c;右边三个选项只需要勾选中间那个&#xff0c;意思是以增加的形式导入&am…

基于协调过滤算法商品推荐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;论坛管理&#xff0c;商品资讯管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xff0c;商品资讯&#xff0c;商家&#xff0c;商品 开发系统…

数据结构和算法一轮

前言 本文参考《2025年数据结构考研复习指导&#xff08;王道论坛组编&#xff09;》和相关文章&#xff0c;为考试前复习而写。 目录 前言 第一章线性表 1.1顺序表 1.2单链表 1.3循环链表 ​1.4双向链表 第二章栈和队列 2.1栈 2.2共享栈 2.3链栈 2.4队列 2.5循环…