当前位置: 首页 > news >正文

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:在具体方法前会调用被注解的方法*/@Beforepublic 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目录*/@Testpublic void createPath() throws IOException {if (fileSystem != null) {boolean result = fileSystem.mkdirs(new Path("/hdfs_api"));if (result) {System.out.println("创建目录成功");}else {System.out.println("创建目录失败");}}}/*** 删除目录或者文件*/@Testpublic 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上创建一个文件,并写入指定的内容*/@Testpublic 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上的文件的路径和名称*/@Testpublic 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上的文件内容*/@Testpublic 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上*/@Testpublic void uploadFile() throws IOException {//本地文件的路径Path src = new Path("E:\\centos&&hadoop\\words.txt");//文件上传到到hdfs的路径Path dst = new Path("/hdfs_api");//文件上传成功后,本地文件是否删除,默认为falseboolean delSrc = true;//上传文件是否覆盖,默认为trueboolean overwrite = false;fileSystem.copyFromLocalFile(delSrc,overwrite,src,dst);}/***从hdfs上下载文件到本地*/@Testpublic 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上的文件信息*/@Testpublic 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:在具体方法执行完毕后会调用被注解的方法*/@Afterpublic void close() throws IOException {if (fileSystem != null) {fileSystem.close();System.out.println("hdfs文件系统已关闭!");}}
}

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

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

相关文章:

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_t…...

使用亮数据代理IP爬取PubMed文章链接和邮箱地址

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…...

electron调用dll时应用程序闪退

electron调用dll时&#xff0c;直接闪退&#xff0c;且用如下方式监听无任何输出&#xff1a; window-all-closed 或 will-quit 此时需要检查传给dll的参数及参数类型是否正确&#xff0c;特别是使用ffi-napi时调用dll&#xff0c;使用 ref-napi定义类型&#xff0c;经常容易…...

单片机原理及技术(三)—— AT89S51单片机(二)(C51编程)

一、AT89S51单片机的并行I/O端口 1.1 P0口 AT89S51的P0口是一个通用的I/O口&#xff0c;可以用于输入和输出。每个引脚都可以通过软件控制为输入或输出模式。 1.1.1 P0口的工作原理 P0口的工作原理是通过对P0寄存器的读写操作来控制P0口的引脚。 输出模式&#xff1a;当P0口…...

摄影店展示服务预约小程序的作用是什么

摄影店包含婚照、毕业照、写真、儿童照、工作照等多个服务项目&#xff0c;虽然如今人们手机打开便可随时拍照摄影&#xff0c;但在专业程度和场景应用方面&#xff0c;却是需要前往专业门店服务获取。 除了进店&#xff0c;也有外部预约及活动、同行合作等场景&#xff0c;重…...

【数据分析基础】实验一 Python运算符、内置函数、序列基本用法

一、实验目的 熟练运用Python运算符。熟练运用Python内置函数。掌握Python的基本输入输出方法。了解lambda表达式作为函数参数的用法。掌握列表、元组、字典、集合的概念和基本用法。了解Python函数式编程模式。 二、实验内容&#xff1a; 1. 在命令模式测试如下命令&#x…...

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

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

Flowable项目启动报错#java.time.LocalDateTime cannot be cast to java.lang.String

Flowable 项目启动后报错 flow项目第一次启动创建表成功&#xff0c;但是第二次启动时报错信息如下&#xff1a; 1、Error creating bean with name ‘appRepositoryServiceBean’ defined in class 2、Error creating bean with name ‘flowableAppEngine’: FactoryBean t…...

《数字电路》

问答题4*5 在数字电路中&#xff0c;三极管经常工作在哪两种开关状态&#xff1f; 在数字电路中&#xff0c;三极管经常工作在饱和导通状态和截止状态。 时序电路根据输出信号分为哪两类&#xff1f; 时序电路根据输出信号分为莫尔型和米里型两类。 写出三种以上常用的二-十…...

STM32F103 点亮LED闪烁与仿真

STM32F103 点亮LED闪烁与仿真 今天给大家分享一下STM32 流水灯简单的仿真吧&#xff0c;我感觉这个提供有用的&#xff0c;但是自己也是第一次使用&#xff0c;主要是感觉曲线很高级。在PWM中查看脉宽很有用。 code: led.c #include "led.h" #include "delay…...

阿里云服务器发送邮件失败 Could not connect to SMTP host: smtp.xxx.com, port: 465;

最近做了一个发送邮件的功能&#xff0c; 在本地调试完成后&#xff0c;部署到阿里云服务器就一直报错&#xff0c; Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465; 网上也搜索了很多的资料&#xff0c;最后花了好几个小时才解决&#xff0c; 报错日志如下…...

Socket编程权威指南(二)完美掌握TCP流式协议及Socket编程的recv()和send()

在上一篇文章中&#xff0c;我们学习了Socket编程的基础知识&#xff0c;包括创建Socket、绑定地址、监听连接、接收连接等操作。然而&#xff0c;真正的套接字编程远不止于此。本文将重点介绍TCP 流式协议&#xff0c;什么是粘包问题&#xff1f;如何解决粘包问题 &#xff1f…...

当C++的static遇上了继承

比如我们想要统计下当前类被实例化了多少次&#xff0c;我们通常会这么写 class A { public:A() { Count_; }~A() { Count_--; }int GetCount() { return Count_; }private:static int Count_; };class B { public:B() { Count_; }~B() { Count_--; }int GetCount() { return …...

Three.js中的Raycasting技术:实现3D场景交互事件的Raycaster详解

前言 在Web开发中&#xff0c;Three.js是一个极为强大的库&#xff0c;它让开发者能够轻松地在浏览器中创建和展示3D图形。随着3D技术在网页设计、游戏开发、数据可视化等领域的广泛应用&#xff0c;用户与3D场景的交互变得日益重要。而要实现这种交互&#xff0c;一个核心的技…...

5 分钟内构建一个简单的基于 Python 的 GAN

文章目录 一、说明二、代码三、训练四、后记 一、说明 生成对抗网络&#xff08;GAN&#xff09;因其能力而在学术界引起轩然大波。机器能够创作出新颖、富有灵感的作品&#xff0c;这让每个人都感到敬畏和恐惧。因此&#xff0c;人们开始好奇&#xff0c;如何构建一个这样的网…...

智能硬件产品中常用的参数存储和管理方案

一、有哪些参数需要管理? 在智能硬件产品中,一般有三类数据需要存储并管理: 1. 系统设置数据 系统设置数据是指产品自身正常工作所依赖的一些参数。 这类数据的特点:只能在生产过程中修改,出厂后用户无权限修改。 比如:产品SN、产品密钥/token/license、传感器校准值…...

SwiftUI中Mask修饰符的理解与使用

Mask是一种用于控制图形元素可见性的图形技术&#xff0c;使用给定视图的alpha通道掩码该视图。在SwiftUI中&#xff0c;它类似于创建一个只显示视图的特定部分的模板。 Mask修饰符的定义&#xff1a; func mask<Mask>(alignment: Alignment .center,ViewBuilder _ ma…...

全光网络与传统网络架构的对比分析

随着信息技术的飞速发展&#xff0c;网络已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代&#xff0c;全光网络和传统网络架构作为两种主流的网络技术&#xff0c;各有其特点和适用范围。本文将对这两种网络架构进行详细的对比分析&#xff0c;帮助读者更好地了…...

stack overflow复现

当你在内存的栈中&#xff0c;存放了太多元素&#xff0c;就有可能在造成 stack overflow这个问题。 今天看看如何复现这个问题。 下图&#xff0c;是我写的程序&#xff0c;不断的创造1KB的栈&#xff0c;来看看执行了多少次&#xff0c;无限循环。 最后结果是7929kB时, 发…...

mybatis使用笔记

文章目录 打印sql日志mybatis-config.xml方式application.yml里面配置配置类配置方式 其他扫描方式官网文档 mybatis用了那么久&#xff0c;实际一直不明白&#xff0c;做个笔记吧。 打印sql日志 实测&#xff0c;mybatis-config.xml方式好用(记得注掉yml里的相关配置) mybat…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...