赞
踩
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
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 //输入你自己的地址
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服务网址,便于后续查看
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。