拉勾大数据高薪训练营

03.第三阶段 Hadoop 核心及生态圈技术栈

01.模块一 Hadoop 框架核心(HDFS、MapReduce、YARN)

02.任务一:Hadoop 简介及 Apache Hadoop 完全分布式集群搭建

01.课程内容介绍_1

02.大数据定义及应用场景_1



03.大数据发展趋势及从业人员发展路线_1

04.Hadoop 简介_1

03.任务二:HDFS 分布式文件系统

01.HDFS 之重要概念_1

02.HDFS 之 Shell 命令行客户端_1


docker exec -it hadoop bash


skip

03.HDFS 之 API 客户端解决文件权限问题_1


winutils-master.zip
第二种方式获取fs

package org.malred.hdfs;

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

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

public class hdfsClientDemo {
    @Test
    public void testMkdirs() throws Exception {
        // 1. 获取hadoop集群的configuration对象
        Configuration configuration = new Configuration();
        // 第二种获取fs的方式
//        configuration.set("fs.defaultFS", "hdfs://192.168.56.102:9000");
//         2. 根据configuration获取filesystem对象
        FileSystem fs = FileSystem.get(
                new URI("hdfs://192.168.56.102:9000"), configuration, "root");
        // 第二种获取fs的方式
        // 默认获取windows的用户, 而操作的linux里的用户是root权限
//        FileSystem fs = FileSystem.get(configuration);
        // 3. 使用filesystem对象创建一个目录
//        fs.mkdirs(new Path("/api_test"));
        fs.mkdirs(new Path("/api_test1"));
        // 4. 释放资源
        fs.close();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>hdfs-client</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--        <dependency>-->
        <!--            <groupId>org.apache.logging.log4j</groupId>-->
        <!--            <artifactId>log4j-core</artifactId>-->
        <!--            <version>2.8.2</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

查看 hdfs 文件系统

04.HDFS 之 API 客户端上传下载文件_1

  • 上传文件

上传文件默认3个副本

修改上传文件的默认副本数: 1. 代码; 2. 配置文件; 代码的优先级更高

    @Before
    public void init() throws Exception {
        configuration = new Configuration();
//        configuration.set("fs.defaultFS","hdfs://192.168.56.102:9000");
//        configuration.set("dfs.replication", "2"); // 设置副本数量(方法一)
        fs = FileSystem.get(
//                new URI("hdfs://192.168.56.102:9000"), configuration, "root");
                new URI("hdfs://127.0.0.1:9000"), configuration, "root");
    }

    @Test
    public void copyLocalToHdfs() throws Exception {
        // 上传文件
        // src: 源文件路径
        // dst: 目标文件路径
        fs.copyFromLocalFile(
                new Path("D:/tbl_user.sql"),
                new Path("/tbl_user.sql")
        );
        // 默认创建3个副本
    }

resources/hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!--方法二-->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>
  • 下载文件
    // 下载文件
    @Test
    public void copyHdfsToLocal() throws Exception {
        fs.copyToLocalFile(
                // 是否删除源文件
                true,
                // hdfs文件目录
                new Path("/tbl_user.sql"),
                // 本地目录
                new Path("F:\\codes\\bigdata\\hadoop\\hdfs" +
                        "\\client\\client1\\src\\main\\resources")
        );
    }

05.HDFS 之 API 客户端文件详情及文件类型判断_1

  • 删除文件
    // 删除文件或文件夹
    @Test
    public void deleteFile() throws Exception {
        // 参数2: (如果有子集)是否递归删除
        fs.delete(new Path("/api_test4"), true);
    }
  • 文件信息
    // 遍历hdfs根目录, 得到文件以及文件夹的信息: 名称 权限 大小...
    @Test
    public void listFiles() throws Exception {
        // 参数2: (如果有子集)是否递归显示
        RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path("/"), true);
        // 遍历
        while (iterator.hasNext()) {
            LocatedFileStatus fileInfo = iterator.next();
            // 文件名称
            String fileName = fileInfo.getPath().getName();
            System.out.println(fileName);
            // 文件大小
            long len = fileInfo.getLen();
            System.out.println(len);
            // 权限
            FsPermission permission = fileInfo.getPermission();
            System.out.println(permission);
            // 分组
            String group = fileInfo.getGroup();
            System.out.println(group);
            // 所属用户
            String owner = fileInfo.getOwner();
            System.out.println(owner);

            // 块信息
            BlockLocation[] blockLocations = fileInfo.getBlockLocations();
            for (BlockLocation blockLocation : blockLocations) {
                String[] hosts = blockLocation.getHosts();
                for (String host : hosts) {
                    System.out.println("主机名称: " + host);
                }
            }
        }
    }

    // 文件及文件夹判断
    @Test
    public void URISyntaxException() throws Exception {
        FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
        for (FileStatus fileStatus : fileStatuses) {
            boolean flag = fileStatus.isFile();
            if (flag) {
                System.out.println("文件: " + fileStatus.getPath().getName());
            } else {
                System.out.println("文件夹: " + fileStatus.getPath().getName());
            }
        }
    }

Alt text

06.HDFS之API客户端IO流操作_1

02.模块二 Hadoop生态圈技术栈(上)

01.任务一:数据仓库工具Hive及交互工具Hue

03.模块三 Hadoop生态圈技术栈(中)【更多资源:www.vipc9.com】


  目录