Hadoop学习记录4--Maven、HDFS API编程

目录

1.Windows下安装hadoop和jdk

1.1 Windows下安装jdk

1.2 Windows下安装hadoop

2. Maven

2.1 Maven简介

2.2 Maven安装与配置

2.3 通过pom文件下载hadoop的客户端依赖

3.API之文件操作 

 3.1 API之文件系统对象

3.3 API之文件下载 

3.4 API之创建目录 

3.5 API之删除目录 

3.6 API之文件状态 


1.Windows下安装hadoop和jdk

1.1 Windows下安装jdk

①双击jdk安装包jdk-8u152-windows-x64.exe文件进行安装

②进行环境变量的配置

jdk安装成功后,打开“文件资源管理器”——右键“此电脑”——“属性”——“高级系统设置”——“高级”——“环境变量”——“新建”

新建变量:JAVA_HOME,变量值:C:\Program Files\Java\jdk1.8.0_152(jdk安装的绝对路径)

 

新建变量:CLASSPATH,变量值:C:\Program Files\Java\jdk1.8.0_152\lib(jdk安装目录下的lib目录) 

 在Path变量下新增-jdk安装路径下bin目录的绝对路径%JAVA_HOME%\bin

1.2 Windows下安装hadoop

①解压到本地磁盘

② 配置环境变量

③添加winutils.exe和hadoop.dll

Hadoop本身对Windows的支持并不友好,如果需要完整使用,需要将winutils.exe和hadoop.dll两个文件移动到%HADOOP_HOME%\bin目录

且将hadoop.dll复制一份到C:\Windows\System32

 ④修改hadoop-env.cmd

@rem 这个是注释的内容
@rem 设置JAVA_HOME,使用PROGRA~1表示Program Files文件夹
set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_152

2. Maven

2.1 Maven简介

        Maven主要用于解决导入依赖于Java类的jar和编译Java项目的主要问题(最早手动导入jar包,可能一个又依赖于另一个)。依赖的jar包由pom.xml文件中的dependency属性管理,并且jar包包含类文件和一些必要的资源文件。 

        Maven是基于项目对象模型的软件项目管理工具,可以通过一小段描述信息来管理项目的构造,报告和文档。Maven可以轻松地帮助您管理项目报告,生成站点,管理jar文件等。例如:项目开发中的第三方jar引用。在开发过程中,合作成员引用的jar版本可能会有所不同,并且同一jar的不同版本可能会重复引用。可以通过使用Maven关联jar来配置引用的jar的版本,以避免冲突。

2.2 Maven安装与配置

双击ideaIC-2022.1.3.exe安装好IDEA。

①解压maven-3.6.1.zip到你的安装目录。

②提前在D盘创建一个mavenRepo目录

③修改解压目录下的conf下的settings.xml中的第55行,将路径修改为D:\\mavenRepo,保存即可。

④配置maven的环境变量(配置环境变量):

搜索环境变量--->系统环境变量---> MVN_HOME=maven解压目录--->将%MVN_HOME%\bin追加到path中--->一步一步确定返回即可。

⑤检测maven环境变量是否配置好。在cmd命令行中输入:mvn -version

⑥IDEA创建Maven项目

打开IDEA--->左上角--->file--->new--->project--->弹框如下:

 选择Next如下:

选择Finish如下图:

⑦IDEA和Maven的整合(Maven下载有三个仓库,默认是中央服务器(下载特别慢),另外一个是私服,最后就是从localc仓库下载,这就需要我们在本地好Maven,然后配置在IDEA中配置好Maven)

 打开IDEA--->settings--->弹框如下:

Maven项目的标识是创建完后有一个pom.xml -->向该文件中添加项目名字,包,版本,项目依赖jar,项目构建。

maven项目优先从本地仓库加载jar包(D:\\mavenRepo)-->没有将从自己配置的maven源下载-->没有配置或没有相应的jar将从中央服务器下载。

D:\mavenRepo\maven-3.6.1\conf\settings.xml中配置了私服(阿里云的服务器)

2.3 通过pom文件下载hadoop的客户端依赖

从网站 http://mvnrepository.com/ 可以找需要的jar包的依赖,如我要下载hadoop-client的依赖,进入网页后就输入hadoop-client,点击search

 

在hadoop的pom文件的<dependencies>标签对中添加以下内容

    <dependencies>
        <!-- hadoop的客户端依赖 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.1</version>
        </dependency>
    </dependencies>

依赖下载后如下图 

下载后jar包保存在:D:\mavenRepo\org\apache\hadoop\hadoop-client

始终下载不下来,去上面的目录删掉对应下载的文件夹,重新下载

3.API之文件操作 

在java文件下新建一个package(com.example1),在package下新建java class(HDFSTest)

package com.example1;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.net.URI;
import java.io.IOException;
import java.net.URISyntaxException;

public class HDFSTest {
    public static void main(String[] args) throws URISyntaxException, IOException {
        System.setProperty("HADOOP_USER_NAME", "root");
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://user1:9820");
        FileSystem fs = FileSystem.get(conf);
        testFileUpload(fs);
        fs.close();
    }
    public static void testFileUpload(FileSystem fs) throws IOException{
        Path localPath=new Path("C:\\Users\\80621\\Desktop\\words\\");
        Path hdfsPath=new Path("/words");
        fs.copyFromLocalFile(localPath,hdfsPath);
        System.out.println("上传成功");
    }
}

 3.1 API之文件系统对象

@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:9820");
    //使用FileSystem类的静态方法get(Configuration conf);返回fs.defaultFS定义的文件系统
    FileSystem fs = FileSystem.get(conf);
    System.out.println("文件系统对象的类型名:"+fs.getClass().getName());
}

3.2 API之文件上传

@Test
public void testFileUpload() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    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("上传成功");
}

3.3 API之文件下载 

@Test
public void testFileDownload() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    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("下载成功");
}

3.4 API之创建目录 

@Test
public void testMkdir() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);

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

3.5 API之删除目录 

@Test
public void testDelete() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);

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

3.6 API之文件状态 

@Test
public void testFileStatus() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);
    //1. 描述你要读取的文件 /file02
    Path path = new Path("/file02");
    //获取文件的状态信息
    RemoteIterator<LocatedFileStatus> 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());
    }
}



 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值