(一)hadoop集群搭建——1.4hdfs的操作

  • 1.HDFS介绍
  • 1.1HDFS特点
  • 1.2HDFS文件块大小
  • 2.HDFS的shell操作
  • 3.使用java客户端操作hdfs
  • 3.1windows安装hadoop并配置到环境变量中。
  • 3.2创建项目
  • 3.3java客户端创建目录
  • 3.4上传文件
  • 3.5文件下载
  • 3.6文件删除
  • 3.7文件重命名
  • 3.8判断路径是否存在
  • 3.9判断路径是目录还是文件


1.HDFS介绍

1.1HDFS特点

a. HDFS是分布式文件管理系统中的一种,适用一次写入,多次读取,不支持对文件的随机写,可以追加,但不能进行修改。

原因:

  1. 文件在HDFS存储时,以block为基本单位存储,修改一个块中的内容,就会影响当前快之后所有的块,效率低。
  2. 没有对文件提供在线寻址功能。

b. HDFS具有高容错性,保存数据自动保存多个副本;适合处理大数据;可构建在廉价机器上。
c. HDFS不适合低延时数据访问,无法对大量小文件进行存储,不支持并发写入、文件随机修改。

1.2HDFS文件块大小

块大小取绝于dfs.blocksize,默认为128M,默认为128M原因,基于最佳传输损耗理论。

最佳传输损耗理论:在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输。

2.HDFS的shell操作

  1. 统计文件数
[hzhao@h2 ~]$ hadoop fs -count -h /
           7            0                  0 /
  1. 查看文件大小
[hzhao@h2 ~]$ hadoop fs -du /
	0  /tmp
  1. hadoop fs既可以对本地文件系统进行操作,还可以操作分布式文件系统;hdfs dfs只能操作分布式文件系统。

3.使用java客户端操作hdfs

3.1windows安装hadoop并配置到环境变量中。

3.2创建项目

使用idea创建maven工程,并导入相关依赖,pom.xml内容为

<?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>com.fanbai</groupId>
    <artifactId>hadoop</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
</dependencies>
</project>

3.3java客户端创建目录

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class TestHDFS {
    private FileSystem fs;
    private Configuration conf = new Configuration();
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        fs = FileSystem.get(new URI("hdfs://h1:9000"), conf, "hzhao");
    }
    @After
    public void close() throws IOException {
        fs.close();
    }
     /**
     * 创建目录:hadoop fs -mkdir 目录名
     * @throws IOException
     */
    @Test
    public void testMkdir() throws IOException{
        //创建一个客户端对象
        fs.mkdirs(new Path("/idea"));
        fs.close();
    }
}

目录创建成功

linux hdfs 新建文件命令 hdfs文件创建_java

3.4上传文件

/**
 * 上传文件:hadoop fs -put 本地文件 hdfs
 */
@Test
public void testUpload() throws IOException {
    fs.copyFromLocalFile(new Path("D:\\tmp\\test.txt"), new Path("/"));
}

文件上传成功

linux hdfs 新建文件命令 hdfs文件创建_hdfs_02

3.5文件下载

/**
 * 下载文件:hadoop fs -get hdfs 本地文件
 */
@Test
public void testDownload() throws IOException {
    fs.copyToLocalFile(new Path("/idea"), new Path("D:\\tmp"));
}

3.6文件删除

/**
 * 文件删除:hadoop fs -rm -rf 路径
 */
@Test
public void testDelete() throws IOException {
    fs.delete(new Path("/idea"), true);
}

3.7文件重命名

/**
 * 文件重命名:hadoop fs -mv 源文件 目标文件
 */
@Test
public void testRename() throws IOException {
    fs.rename(new Path("/test.txt"), new Path("/testRename.txt"));
}

3.8判断路径是否存在

/**
 * 判断当前路径是否存在
 */
@Test
public void fileIsExist() throws IOException {
    System.out.println(fs.exists(new Path("/idea")));
}

3.9判断路径是目录还是文件

/**
 * 判断当前路径是目录还是文件
 */
@Test
public void idDirOrFile() throws IOException {
Path path = new Path("/idea");
    FileStatus fileStatus = fs.getFileStatus(path);
    System.out.println("是否是目录:" + fileStatus.isDirectory());
    System.out.println("是否是文件:" + fileStatus.isFile());
}