当前位置: 首页 > 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服务网址,便于后续查看

http://www.lryc.cn/news/366605.html

相关文章:

  • 使用亮数据代理IP爬取PubMed文章链接和邮箱地址
  • electron调用dll时应用程序闪退
  • 单片机原理及技术(三)—— AT89S51单片机(二)(C51编程)
  • 摄影店展示服务预约小程序的作用是什么
  • 【数据分析基础】实验一 Python运算符、内置函数、序列基本用法
  • 【Redis】构建强韧的远程Redis连接与端口保障机制完美指南
  • Flowable项目启动报错#java.time.LocalDateTime cannot be cast to java.lang.String
  • 《数字电路》
  • STM32F103 点亮LED闪烁与仿真
  • 阿里云服务器发送邮件失败 Could not connect to SMTP host: smtp.xxx.com, port: 465;
  • Socket编程权威指南(二)完美掌握TCP流式协议及Socket编程的recv()和send()
  • 当C++的static遇上了继承
  • Three.js中的Raycasting技术:实现3D场景交互事件的Raycaster详解
  • 5 分钟内构建一个简单的基于 Python 的 GAN
  • 智能硬件产品中常用的参数存储和管理方案
  • SwiftUI中Mask修饰符的理解与使用
  • 全光网络与传统网络架构的对比分析
  • stack overflow复现
  • mybatis使用笔记
  • 学习笔记——路由网络基础——路由概述
  • 在量子计算时代,大数据技术将面临哪些挑战和机遇?
  • 怎么换自己手机的ip地址
  • 搭建 Langchain-Chatchat 详细过程
  • C++期末复习
  • 2005-2022年各省居民人均消费支出数据(无缺失)
  • swaggerHole:针对swaggerHub的公共API安全扫描工具
  • 【Rust】——面向对象设计模式的实现
  • C#朗读语音
  • c++ 简单的日志类 CCLog
  • 一文读懂 Compose 支持 Accessibility 无障碍的原理