Hadoop的Windows环境准备

news2024/11/15 13:46:42

一、将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服务网址,便于后续查看

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

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

相关文章

Redis到底支不支持事务?

文章目录 一、概述二、使用1、正常执行&#xff1a;2、主动放弃事务3、全部回滚:4、部分支持事务:5、WATCH: 三、事务三阶段四、小结 redis是支持事务的&#xff0c;但是它与传统的关系型数据库中的事务是有所不同的 一、概述 概念: 可以一次执行多个命令&#xff0c;本质是一…

如何提高网站排名?

提高网站排名是一个复杂的过程&#xff0c;涉及到多个方面的优化&#xff0c;包括但不限于内容质量、网站结构、用户体验、外部链接建设等&#xff0c;GSR这个系统&#xff0c;它是一种快速提升关键词排名的方案&#xff0c;不过它有个前提&#xff0c;就是你的站点在目标关键词…

自制植物大战僵尸:HTML5与JavaScript实现的简单游戏

引言 在本文中&#xff0c;我们将一起探索如何使用HTML5和JavaScript来创建一个简单的植物大战僵尸游戏。这不仅是一项有趣的编程挑战&#xff0c;也是学习游戏开发基础的绝佳机会。 什么是植物大战僵尸&#xff1f; 植物大战僵尸是一款流行的策略塔防游戏&#xff0c;玩家需…

C# MemoryCache 缓存应用

摘要 缓存是一种非常常见的性能优化技术&#xff0c;在开发过程中经常会用到。.NET提供了内置的内存缓存类 MemoryCache&#xff0c;它可以很方便地存储数据并在后续的请求中快速读取&#xff0c;从而提高应用程序的响应速度。 正文 通过使用 Microsoft.Extensions.Caching.Me…

Sql-labs的第一关

前言 我们在使用Sql-libs靶场进行Sql注入实验的时候&#xff0c;前提要求我们对mysql数据库结构要有一个大概的了解&#xff0c;因为mysql5.0以上的版本都会自带一个名为information_schema的数据库&#xff0c;这个数据库下面会有columns和tables两个表。 tables这个表的table…

【学习笔记】Windows GDI绘图(十一)Graphics详解(下)

文章目录 Graphics的方法Graphics.FromImageSetClip设置裁切区域IntersectClip更新为相交裁切区域TranslateClip平移裁切区域IsVisible判断点或矩形是否在裁切区域内MeasureCharacterRanges测量字符区域MeasureString测量文本大小MultiplyTransform矩阵变换 Graphics的方法 Gr…

【纯血鸿蒙】——响应式布局如何实现?

前面介绍了自适应布局&#xff0c;但是将窗口尺寸变化较大时&#xff0c;仅仅依靠自适应布局可能出现图片异常放大或页面内容稀疏、留白过多等问题。此时就需要借助响应式布局能力调整页面结构。 响应式布局 响应式布局是指页面内的元素可以根据特定的特征&#xff08;如窗口…

AI降重技术:革新论文查重与修改策略

AIGC降重指南&#xff1a;如何有效使用AI工具降低论文查重率&#xff1f; 论文查重和降重是确保学术成果原创性及学术诚信的关键步骤&#xff0c;直接影响我们的学业成果和毕业资格。传统的论文查重方法主要包括使用查重软件和个人自查&#xff0c;而论文降重通常涉及改写、使…

Docker中搭建likeadmin

一、使用Docker中的docker-compose搭建likeadmin 1.去网址&#xff1a;https://gitee.com/likeadmin/likeadmin_php中下载likeadmin 注册一个giee账号后 点那个克隆下载 按照序号在终端复制粘贴进去。 接着&#xff0c;输入ls 可以发现有一个这个&#xff1a; 里面有一个like…

数据结构复习指导之外部排序

目录 外部排序 复习提示 1.外部排序的基本概念 2.外部排序的方法 2.1对大文件排序时使用的排序算法&#xff08;2016&#xff09; 3.多路平衡归并与败者树 4.置换-选择排序&#xff08;生成初始归并段&#xff09; 4.1置换-选择排序生成初始归并段的实例(2023) 5.最佳…

单链表复习 (C语言版)

目录 一.顺序表与链表的区别 二.链表概念 三.单链表 1.单链表的开始与初始化 2.单链表的打印 3.单链表的尾插 重难点&#xff1a;单链表实现时的指针详解 4.单链表的头插 5.单链表的尾删 6.单链表的头删 小结&#xff1a; 7.单链表的查找 8.在指定位置前插入数据 …

深度学习的舌象诊断:从舌头上了解系统性疾病!

首先 深度学习算法能否解决东方医学中依靠医生经验的诊断问题&#xff1f;而要实现这个目标&#xff0c;需要什么呢&#xff1f; 用舌头诊断被称为口腔健康的指标&#xff0c;但在东方医学中&#xff0c;舌头也被用来评估全身的状况。换句话说&#xff0c;通过分析舌头的图像…

人工智能的统治:会是人类的终结吗?

使用ChatGPT运行/请求一系列提示以探索完全人工智能(AI)控制关键基础设施、自动化工厂 ( Tesla )、社交媒体 ( Meta )、SCADA和其他常见用途 (ModBUS?) 可能产生的后果后&#xff0c;我们进行了分析…… 以下是我们的考虑&#xff1a; 数据、提示和响应应被视为说明性的&…

通过影刀RPA,创建定时任务,自动获取图片验证码登录平台;

1.下载下载影刀客户端-影刀RPA - 影刀官网 2.安装&#xff0c;登录 3.应用创建->PC自动化应用 4.按照流程-创建【可双击或拖动】 5.保存 6.右击【创建的应用】->发版 7.选择触发器->【定时触发器】 根据提示配置 8.完成&#xff0c;每天平台会自动打开&#xff1b;…

算法学习笔记(7.7)-贪心算法(Dijkstra算法-最短路径问题)

目录 1.最短路径问题 2.Dijkstra算法介绍 3.Dijkstra算法演示 4.Dijkstra算法的代码示例 1.最短路径问题 图论中的一个经典问题&#xff0c;通常是指在一个加权图中找到从一个起始顶点到目标顶点的最短路径。 单源最短路径问题&#xff1a;给定一个加权图和一个起始顶点&…

http协议,tomcat的作用

HTTP 概念:Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点: 1.基于TCP协议:面向连接&#xff0c;安全 2. 基于请求-响应模型的:一次请求对应一次响应 3HTTP协议是无状态的协议:对于事务处理没有记忆能…

react学习-高阶组件

1.简介 react高阶组件是一个函数&#xff0c;接收一个组件作为参数&#xff0c;返回一个新的组件&#xff0c;可以用来进行组件封装&#xff0c;将一些公共逻辑提取到高阶组件内部。 2.基本实现 以下案例为利用高阶组件来增强props import React, { Component } from "re…

10.dockerfile自动构建镜像

dockerfile自动构建镜像 类似ansible剧本&#xff0c;大小几kb 手动做镜像&#xff1a;大小几百M 首先创建一个dockerfile的路径&#xff0c;便于在路径下存在多个路径每个路径下都是dockerfile命名的脚本 注释&#xff1a;文件必须为&#xff1a;dockerfile或者Dockerfile …

解决linux系统求前N月月份的bug

日常工作中&#xff0c;需要获取某个日期&#xff08;20240531&#xff09;的前N个月&#xff0c;通常会写命令 date -d "20240531 last-month" %Y%m 我期望得到202404 但是很意外&#xff1a; 经过几轮测试&#xff0c;发现只要月内天数超过30天&#xff0c;即所有…

基于Zero-shot实现LLM信息抽取

基于Zero-shot方式实现LLM信息抽取 在当今这个信息爆炸的时代&#xff0c;从海量的文本数据中高效地抽取关键信息显得尤为重要。随着自然语言处理&#xff08;NLP&#xff09;技术的不断进步&#xff0c;信息抽取任务也迎来了新的突破。近年来&#xff0c;基于Zero-shot&#x…