大数据-Hadoop(HDFS-1)

1 HDFS产出背景

2. HDFS优缺点

3 .HDFS组成架构 

 

4. HDFS文件块大小(面试重点)

 

 5.HDFS的Shell操作(开发重点)

5.1基本语法

bin/hadoop fs 具体命令   OR  bin/hdfs dfs 具体命令

两个是完全相同的。

5.2查看命令大全

hdfs dfs df -h

5.3Hadoop fs 常用命令分类

本地推送到HDFS

LICENSE.txt,推送到HDFS上

hdfs dfs -put LICENSE.txt / 

hdfs dfs -copyFromLocal LICENSE.txt /(和put效果相同,不同点在于支持并发)

将文件移动到HDFS上,原始目录不会保留被移动的文件

hdfs dfs -moveFromLocal README.txt /

文件的追加

hdfs dfs -appendToFile README.txt / we.txt

                                      要追加的文件 追加到哪 追加到那个文件


HDFS内部操作
    cp
    mv
    chown
    chgrp
    chmod
    mkdir
    du
    df
    cat
    rm
    


HDFS拉取到本地

hdfs dfs -get / we.txt ./

hdfs dfs -copyToLocal / we.txt ./

                    哪里的文件 文件名 拉取到哪里

合并下载(将所有已TXT结尾的文件下载本地的1.txt文件中)

hdfs dfs - getmerge /*.txt ./1.txt

                                哪里的文件 下载到哪 下载到那个文件

 设置HDFS中文件的副本数量

注意:副本数量要和节点数量一致,一个节点没有多个副本,一个节点宕机所有副本都会消失,所以一个节点多个副本没有意义,设置副本数量只是在增加节点时可以自动增加副本

hdfs dfs -setrep 10 /README.txt

 

6.HDFS客户端操作

HDFS客户端环境准备

下载hadoop3.0.0(jdk环境为1.8)

配置HADOOP_HOME环境变量

配置Path环境变量。然后重启电脑 

 打开dos窗口输入winutils命令

 7.idea工具准备工作

7.1创建一个maven项目

 7.2导入依赖

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.1.3</version>
    </dependency>
</dependencies>

在项目的src/main/resources目录下,新建一个文件,命名为“log4j2.xml”,在文件中填入(info的日志在控制台输出)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" strict="true" name="XMLConfig">
    <Appenders>
        <!-- 类型名为Console,名称为必须属性 -->
        <Appender type="Console" name="STDOUT">
            <!-- 布局为PatternLayout的方式,
            输出样式为[INFO] [2018-01-22 17:34:01][org.test.Console]I'm here -->
            <Layout type="PatternLayout"
                    pattern="[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c{10}]%m%n" />
        </Appender>

    </Appenders>

    <Loggers>
        <!-- 可加性为false -->
        <Logger name="test" level="info" additivity="false">
            <AppenderRef ref="STDOUT" />
        </Logger>

        <!-- root loggerConfig设置 -->
        <Root level="info">
            <AppenderRef ref="STDOUT" />
        </Root>
    </Loggers>
</Configuration>

8.HDFS的API操作

8.1将本地文件上传到hdfs

package com.hanlin.qu;

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.net.URI;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }
    //上传文件
    @Test
    public void put() throws Exception {
    fileSystem.copyFromLocalFile(new Path(
            "E:\\BaiduNetdiskDownload/CentOS-7.5-x86_64-DVD-1804.iso"),new Path("/"));

    }
}

8.2下载文件

package com.hanlin.qu;

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;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }

    //下载文件
    @Test
    public void get() throws IOException {
        // boolean delSrc 指是否将原文件删除
        // Path src 指要下载的文件路径
        // Path dst 指将文件下载到的路径
        // boolean useRawLocalFileSystem 是否开启文件校验
        fileSystem.copyToLocalFile(true,new Path("/README.txt"),new Path("E:\\"),true);
    }
}

8.3HDFS文件夹删除

package com.hanlin.qu;

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;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }

    //删除文件
    @Test
    public void delete() throws IOException {
        fileSystem.delete(new Path("/we.txt"),true);
    }

8.4HDFS文件名更改

package com.hanlin.qu;

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;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }

    //HDFS文件名更改
    @Test
    public void Rename() throws IOException {
        fileSystem.rename(new Path("/LICENSE.txt"),new Path("/LICENSE1.txt"));
    }

 8.5HDFS文件详情查看 

package com.hanlin.qu;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.util.Map;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }
    //查看文件名称、权限、长度、块信息
    @Test
    public void testListFiles() throws IOException {
        //  获取文件详情
        RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles(new Path("/"), true);
       while (listFiles.hasNext()){
           LocatedFileStatus status = listFiles.next();
           // 文件名称
           System.out.println(status.getPath().getName());
           // 长度
           System.out.println(status.getLen());
           // 权限
           System.out.println(status.getPermission());
           // 分组
           System.out.println(status.getGroup());
           // 获取存储的块信息
           BlockLocation[] blockLocations = status.getBlockLocations();
           for (BlockLocation blockLocation : blockLocations) {
               // 获取存储的块信息
               String[] hosts = blockLocation.getHosts();
               for (String host : hosts) {
                   System.out.println(host);
               }

           }

       }
    }
}

8.6HDFS文件和文件夹判断

package com.hanlin.qu;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.util.Map;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }
    //文件夹的判断
    @Test
    public void testListStatus() throws IOException {
        FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : fileStatuses) {
            if(fileStatus.isFile()){
                System.out.println("是文件:"+fileStatus.getPath().getName());
            }else {
                System.out.println("不是文件:"+fileStatus.getPath().getName());
            }

        }
    }

8.7configuration对集群的配置

输入网址hadoop.apache.org

 

package com.hanlin.qu;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.util.Map;


public class HdfsClient {
    //定义传输对象
    FileSystem fileSystem;
    //
    Configuration configuration;

    @Before
    public void fileSystem() throws Exception {
        configuration = new Configuration();
        //创建连接
        fileSystem = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"atguigu");

    }
    //关闭资源
    @After
    public void close() throws Exception {
        fileSystem.close();
    }
    //configuration对集群的配置
    @Test
    public void block(){
        //设置副本数
        configuration.set("dfs.replication","6");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧冶渃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值