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
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>
04.HDFS 之 API 客户端上传下载文件_1
- 上传文件
修改上传文件的默认副本数: 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());
}
}
}