栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

2021-12-08 迈向程序猿的第四十五步

2021-12-08 迈向程序猿的第四十五步

目录

一.IDEA远程管理HDFS

1.1  解压hadoop-2.7.6.tar.gz到本地磁盘

1.2 配置环境变量

1.3 由于Hadoop是在32位系统上编译的,并且对windows支持不好,所以需要把64的编译本地库文件(下图的两个文件),放入bin目录中。

 1.4 验证环境变量

1.5 如果报错:Error: JAVA_HOME is incorrectly set

1.6 提取HDFS的资源jar包

1.7 打开IDEA新建个java项目

1.8 项目下新建一个lib文件夹

 1.9 将_jars的所有jar包导入到lib中

 1.10 新建个Test类

 1.11 获取分布式文件系统对象

1.12 通过IDEA对HDFS进行文件的上传和下载

1.13 通过IDEA进行对HDFS的目录创建和删除

1.14 通过IDEA实现对HDFS上文件的重命名

1.15 通过IOUtils对文件进行上传和下载

1.16 API之文件状态

二.通过创建Maven项目连接HDFS

2.1 将Maven压缩包解压到本地磁盘

2.2 配置环境变量

2.3 修改settings.xml文件

2.3.1 指定本地仓库

2.3.2 指定aliyun镜像(下载资源速度更快)

2.4 创建maven项目

​

2.5 导入jar包依赖

2.6 验证连接


一.IDEA远程管理HDFS

1.1  解压hadoop-2.7.6.tar.gz到本地磁盘

 

1.2 配置环境变量

- HADOOP_HOME:    D:appshadoop-2.7.6
- PATH: %HADOOP_HOME%bin 和 %HADOOP_HOME%sbin

1.3 由于Hadoop是在32位系统上编译的,并且对windows支持不好,所以需要把64的编译本地库文件(下图的两个文件),放入bin目录中。

 1.4 验证环境变量

C:Usersusr>hadoop version

1.5 如果报错:Error: JAVA_HOME is incorrectly set

那就找到etc/hadoop/下的hadoop-env.cmd,修改JAVA_HOME的内容如下格式即可
set JAVA_HOME=C:PROGRA~1Javajdk1.8.0_221

如果还不好用,那么重新装一个JDK,路径上别带空格

1.6 提取HDFS的资源jar包

 

为了方便开发,我们可以将相关的jar提取出来。
1. 在hadoop-2.7.6目录下创建以上目录(参考图片)
2. 进入share目录中的doc子目录,搜索default.xml。将四个默认的xml文件copy到_default目录中,方便以后查看
3. 进入share目录中,搜索*.jar。将搜索到的所有jar文件copy到_jars目录下,重复的跳过。大约208个jar包左右。
4. 在_jars目录中,搜索test,将搜索到的jar包剪切到_tests目录下。这是一些关于程序测试的jar包,提取出来。大约36个左右
5. 在_jars目录中,搜索source,将搜索到的jar包剪切到_sources目录下。这些jar包是hadoop的源码包。想看源码的可以使用,大约28个
6. 此时,_jars目录中剩下的都是hadoop的相关api的jar包,大约144个。

1.7 打开IDEA新建个java项目

1.8 项目下新建一个lib文件夹

 1.9 将_jars的所有jar包导入到lib中

 

 1.10 新建个Test类

 1.11 获取分布式文件系统对象

(注意这里导包,导的都要是hadoop的!!!!)

package com.csdn;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Test;

import java.io.IOException;

public class Test1 {
    @Test
    public void testGetFileSystem() throws IOException {
        //创建配置对象,用于加载配置信息(四个默认的配置文件:core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml)
        Configuration conf = new Configuration();
        //修改fs.defaultFS属性的值
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        //使用FileSystem类的静态方法get(Configuration conf);返回fs.defaultFS定义的文件系统
        FileSystem fs = FileSystem.get(conf);
        System.out.println("文件系统对象的类型名:"+fs.getClass().getName());
    }
}

1.12 通过IDEA对HDFS进行文件的上传和下载
 @Test
    public void testFileUpload() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        FileSystem fs = FileSystem.get(conf);
        //将本地的一个文件D:/file1,上传到HDFS上 /file1
        //1. 使用Path描述两个文件
        Path localPath = new Path("D:/file1");
        Path hdfsPath = new Path("/file1");
        //2.调用上传方法
        fs.copyFromLocalFile(localPath,hdfsPath);
        //3.关闭
        fs.close();
        System.out.println("上传成功");
    }
    @Test
    public void testFileDownload() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        FileSystem fs = FileSystem.get(conf);
        //从HDFS上下载一个文件/file1,下载到本地 D:/file2
        //1. 使用Path描述两个文件
        Path hdfsfile = new Path("/file1");
        Path local = new Path("D:/file2");
        //2. 调用下载方法进行下载
        fs.copyToLocalFile(hdfsfile,local);
        fs.close();
        System.out.println("下载成功");
    }

1.13 通过IDEA进行对HDFS的目录创建和删除
@Test
    public void testMkdir() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        FileSystem fs = FileSystem.get(conf);

        //1. 测试创建目录,描述一个目录
        Path hdfsfile = new Path("/dir1");
        //2. 调用创建目录的方法
        fs.mkdirs(hdfsfile);
        fs.close();
        System.out.println("创建成功");
    }
    @Test
    public void testDelete() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        FileSystem fs = FileSystem.get(conf);

        //1. 测试删除目录,描述一个目录
        Path hdfsfile = new Path("/dir1");
        //2. 调用创建目录的方法
        fs.delete(hdfsfile,true);
        fs.close();
        System.out.println("删除成功");
    }

1.14 通过IDEA实现对HDFS上文件的重命名
   @Test
    public void testRename() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        FileSystem fs = FileSystem.get(conf);

        //1. 测试重命名,将file1改为file01
        Path oldName = new Path("/file1");
        Path newName = new Path("/file01");
        //2.调用重命名方法
        fs.rename(oldName,newName);
        fs.close();
        System.out.println("命名成功");
    }

1.15 通过IOUtils对文件进行上传和下载
  @Test
    public void putFile() throws IOException, URISyntaxException {
        //1 连接HDFS 文件系统
        Configuration conf=new Configuration();
        //获得文件系统
        FileSystem fs=FileSystem.get(new URI("hdfs://182.168.10.101:8020"),conf);
        // 创建输入流,读取输入文件
        FileInputStream input=new FileInputStream(new File("c://a.txt"));
        // 创建输出流
        FSDataOutputStream out=fs.create(new Path("/gg.txt"));
        //IO的流拷贝
        IOUtils.copyBytes(input, out, conf);
        //关闭资源
        IOUtils.closeStream(input);
        IOUtils.closeStream(out);
        System.out.println("上传完毕");
    }
    @Test
    public void getFile() throws IOException, URISyntaxException {
        // 1 连接HDFS 文件系统
        Configuration conf = new Configuration();
        // 获得文件系统
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.101:8020"), conf);
        // 获取输入流 从HDFS上读取
        FSDataInputStream input=fs.open(new Path("/gg.txt"));
        // 获取输出流
        FileOutputStream out=new FileOutputStream(new File("c://gg.txt"));
        //流拷贝
        IOUtils.copyBytes(input, out, conf);
        //关闭流
        IOUtils.closeStream(input);
        IOUtils.closeStream(out);
        System.out.println("下载完成");
    }

1.16 API之文件状态
@Test
    public void testFileStatus() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
        FileSystem fs = FileSystem.get(conf);
        //1. 描述你要读取的文件 /file02
        Path path = new Path("/file02");
        //获取文件的状态信息
        RemoteIterator it = fs.listLocatedStatus(path);
        while(it.hasNext()){
            // 取出对象
            LocatedFileStatus status = it.next();
            System.out.println("name:"+status.getPath());
            //获取位置
            BlockLocation[] locate = status.getBlockLocations();
            for(BlockLocation bl:locate){
                System.out.println("当前块的所有副本位置:"+Arrays.toString(bl.getHosts()));
                System.out.println("当前块大小:"+bl.getLength());
                System.out.println("当前块的副本的ip地址信息:"+Arrays.toString(bl.getNames()));
            }
            System.out.println("系统的块大小:"+status.getBlockSize());
            System.out.println("文件总长度:"+status.getLen());
        }
    }

二.通过创建Maven项目连接HDFS

2.1 将Maven压缩包解压到本地磁盘

 

2.2 配置环境变量

Path:

 

2.3 修改settings.xml文件

2.3.1 指定本地仓库

 

2.3.2 指定aliyun镜像(下载资源速度更快)

 

2.4 创建maven项目

 

 

2.5 导入jar包依赖

2.6 验证连接
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Test;

import java.io.IOException;

public class Test2 {
    @Test
    public void testConnect() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.10.101:8020/");
        FileSystem fs = FileSystem.get(conf);
        System.out.println(fs.getClass().getName());
        fs.close();
    }
}

(=-=今天就分享到这里,IDEA对HDFS的远程相关操作,切记导包的时候一定要注意,避免自动导包,导错包!)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号