springboot上传下载文件(3)--java api 操作HDFS集群+集群配置_下列哪个hdfs java api中的类,其中封装了hdfs客户端或者hdfs集群的配置?

首先检查~/.bashrc中的JAVA_HOME

linux - Hadoop: «ERROR : JAVA_HOME is not set» - Stack Overflow

$sudo vim /usr/local/hadoop/hadoop-2.8.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_191

再试一次

成功

2.1、克隆此时的虚拟机

简单,省略

2.2、ssh免密登陆

接着上面1.3.1做

Ubantu 14.04下Hadoop完全分布式集群安装_服务器应用_Linux公社-Linux系统门户网站

SSH主要通过RSA算法来产生公钥与私钥,在数据传输过程中对数据进行加密来保障数

据的安全性和可靠性,公钥部分是公共部分,网络上任一结点均可以访问,私钥主要用于对数据进行加密,以防他人盗取数据。总而言之,这是一种非对称算法,想要破解还是非常有难度的。Hadoop集群的各个结点之间需要进行数据的访问,被访问的结点对于访问用户结点的可靠性必须进行验证,hadoop采用的是ssh的方法通过密钥验证及数据加解密的方式进行远程安全登录操作,当然,如果hadoop对每个结点的访问均需要进行验证,其效率将会大大降低,所以才需要配置SSH免密码的方法直接远程连入被访问结点,这样将大大提高访问效率。

1、3个虚拟机A,B,C 都进行下面的命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

测试:$ssh localhost

exit 退出

2、把A机下的id_rsa.pub复制到B,C机下,在B机的.ssh/authorized_keys文件里,用scp复制。BC机暂时没打算让它们登A机,若要,同理。

$ifconfig

192.168.23.137  A

192.168.23.135  B

192.168.23.136  C

就举一个例子:把A机下的id_rsa.pub复制到B:

hadoop@zj-virtual-machine:~$ scp ~/.ssh/id_dsa.pub hadoop@192.168.23.135:~/.ssh/authorized_keys

结果:

The authenticity of host ‘192.168.23.135 (192.168.23.135)’ can’t be established.

ECDSA key fingerprint is 75:7f:24:c6:cf:81:66:da:57:98:21:7b:a8:b3:91:1f.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.23.135’ (ECDSA) to the list of known hosts.

hadoop@192.168.23.135’s password:

id_dsa.pub                                     100%  615     0.6KB/s   00:00

命令解析:scp 远程复制

-r递归

本机文件地址 app是文件(从根目录开始)

远程主机名``@``远程主机``ip:``远程文件地址(从根目录开始)

在A机上测试:

ssh 192.168.23.135

exit

把A机下的id_rsa.pub复制到C:同上

ps:免密码登陆是分用户的(跟.ssh文件夹在用户文件夹下有关),如果机上有多个用户,如abc和hadoop,记得scp和ssh的时候用hadoop用户,另一个用户需要登陆的话需要重新从1开始生成密钥

2.3、修改hosts和hostname文件

先简单说明下配置hosts文件的作用,它主要用于确定每个结点的IP地址,方便后续

master结点能快速查到并访问各个结点。在上述3个虚机结点上均需要配置此文件

1、修改hostname文件
$sudo vim /etc/hostname

这个文件主要是确定这台机的名字,主机改为master,从机改为slave1, slave2,如果之前已经取好名字可以不用改(只要之后对应得上名字就行,并不一定要叫master,slave之类的)

查看当前虚机结点的IP地址是多少

$ifconfig

2、修改hosts文件
$sudo vim /etc/hosts

在文件中添加

127.0.0.1 localhost(一般已有这句,在下面加)

192.168.23.137 master

192.168.23.135 slave1

192.168.23.136 slave2

同时修改三个虚拟机

2.4、在主机上的hadoop中创建文件夹

$cd /usr/hadoop/hadoop-2.8.5
$mkdir tmp

$mkdir tmp/dfs

$mkdir tmp/dfs/data

$mkdir tmp/dfs/name
$sudo chown hadoop:hadoop tmp

2.5、在主机上修改hadoop的配置文件

主要涉及的文件有:

/usr/hadoop/hadoop-2.8.5/etc/hadoop中的:


hadoop-env.sh 
yarn-env.sh 
core-site.xml 
hdfs-site.xml 
yarn-site.xml 
mapred-site.xml 
slaves


$cd /usr/hadoop/hadoop-2.8.5/etc/hadoop

#修改其他文件时,把以下hadoop-env.sh替换成其他文件的名字

$cp hadoop-env.sh hadoop-env_old.sh

以下为各文件中的修改内容:

(1)hadoop-env.sh

找到JAVA_HOME的一行

注释掉原来的export, 修改为

export JAVA_HOME=/usr/java/jdk1.8.0_191

(2)yarn-env.sh

找到JAVA_HOME的一行

注释掉原来的export, 修改为

export JAVA_HOME=/usr/java/jdk1.8.0_191

(3)core-site.xml

<configuration>

       <!-- 指定hdfs的nameservice为ns1 -->

       <property>

                <name>fs.defaultFS</name>

                <value>hdfs://master:8020</value>

       </property>

       <property>

                <name>io.file.buffer.size</name>

                <value>131072</value>

        </property>

<!-- 指定hadoop临时目录,自行创建 -->

       <property>

               <name>hadoop.tmp.dir</name>

               <value>file:/usr/hadoop/hadoop-2.8.5/tmp</value>

               <description>Abase for other temporary directories.</description>

       </property>

        <property>

               <name>hadoop.proxyuser.hosts</name>

               <value>*</value>

       </property>

       <property>

               <name>hadoop.proxyuser.groups</name>

               <value>*</value>

       </property>



</configuration>

PS:

1、hdfs://master:8020 的master是主机名,和之前的hostname对应,8020是端口号,注意不要占用已用端口就可

2、file: /usr/hadoop/hadoop-2.8.5/tmp 指定到刚刚创建的文件夹

3、所有的配置文件< name >和< value >节点处不要有空格,否则会报错

4、fs.default.name是NameNode的URI。hdfs://主机名:端口/

5、hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。

6、以上三点下同

(4)hdfs-site.xml


<configuration>



        <property>

                <name>dfs.namenode.secondary.http-address</name>

               <value>master:9001</value>

       </property>

     <property>

             <name>dfs.namenode.name.dir</name>

             <value>file:/usr/hadoop/hadoop-2.8.5/tmp/dfs/name</value>

       </property>

      <property>

              <name>dfs.datanode.data.dir</name>

              <value>file:/usr/hadoop/hadoop-2.8.5/tmp/dfs/data</value>

       </property>

       <property>

               <name>dfs.replication</name>

               <value>3</value>

        </property>

        <property>

                 <name>dfs.webhdfs.enabled</name>

                  <value>true</value>

         </property>



</configuration>

dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。

dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。

dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

( 5 ) mapred-site.xml.template


<configuration>



        <property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

        </property>

        <property>

                 <name>mapreduce.jobhistory.address</name>

                 <value>master:10020</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>master:19888</value>

        </property>



</configuration>

( 6)yarn-site.xml

<configuration>

        <property>

               <name>yarn.nodemanager.aux-services</name>

               <value>mapreduce_shuffle</value>

        </property>

        <property>                                                               

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

               <value>org.apache.hadoop.mapred.ShuffleHandler</value>

        </property>

        <property>

               <name>yarn.resourcemanager.address</name>

               <value>master:8032</value>

       </property>

       <property>

               <name>yarn.resourcemanager.scheduler.address</name>

               <value>master:8030</value>

       </property>

       <property>

            <name>yarn.resourcemanager.resource-tracker.address</name>

             <value>master:8031</value>

      </property>

      <property>

              <name>yarn.resourcemanager.admin.address</name>

               <value>master:8033</value>

       </property>

       <property>

               <name>yarn.resourcemanager.webapp.address</name>

               <value>master:8088</value>

       </property>

</configuration>

(7) slaves

本文件记录了hadoop中的所有的从机节点

在文件中添加:


slave1

slave2

2.6、把修改好的hadoop复杂到从机中

从机和主机中的hadoop文件夹内容是一样的。如果从机的jdk路径或者hadoop路径不一样,在相应的文件中修改路径(包括之前的bashrc等)即可。为了方便,尽量让所有机上路径相同。所以把主机上的hadoop文件夹放到从机上的同一位置。直接放到usr下可能会没有权限,可以先scp到主文件夹下,再mv过去

$sudo scp -r /usr/hadoop/hadoop-2.8.5 hadoop@192.168.23.135:/home/hadoop

上传完毕后,在从机上会看到主文件夹下多出了hadoop-2.8.5文件夹

打开从机终端:

$cd /usr/hadoop

$mv hadoop-2.8.5 hadoop-2.8.5_old //将之前的改名

$cd ~
$ sudo mv hadoop-2.8.5 /usr/hadoop/

$ sudo chown hadoop:hadoop /usr/hadoop/hadoop-2.8.5

至此检查是否每一台机上都进行过开头所讲的所有步骤中的1-6步骤(复制过去的相当于已进行该步骤,但是若忘记复制前的某步修改或复制后忘记修改内容,如路径、主机名等,都可能导致之后出错)

slave2同上

2.7、主机中格式化namenode

$ cd /usr/hadoop/hadoop-2.8.5

$ bin/hdfs namenode -format

注意只能在初始时格式化namenode,运行中格式化会丢失数据

2.8、启动hdfs

$ start-all.sh

2.9、查看hdfs进程(命令行+浏览器)

在每一台机上运行

$ jps

可以看到,master 上运行着SecondaryNamenode, ResourceManager, NameNode

两个slave上运行着DataNode,NodeManager

浏览器:

默认访问地址:http://namenode的ip:50070

参考:hadoop 查看集群的网页监控状态_CD-CSDN博客_查看hadoop集群状态

2.10、终止hdfs

/usr/local/hadoop$ stop-all.sh

PS:关于防火墙:有些博客提到了关闭防火墙,我配置时并没有遇到问题所以跳过了该步骤

至此配置环境成功

参考:Ubuntu14.04全分布式安装hadoop2.7.2(四)全分布式安装_ycisacat的博客-CSDN博客

2、HDFS常用操作命令

hdfs dfs -ls 列出HDFS下的文件

hadoop dfs -ls in 列出HDFS下某个文档中的文件

hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功

hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录

hadoop dfs -rmr out 删除指定文件从HDFS上

hadoop dfs -cat in/* 查看HDFS上in目录的内容

hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下

hadoop dfsadmin -safemode leave 退出安全模式

hadoop dfsadmin -safemode enter 进入安全模式

=====================

命令在与bin目录同级的目录下使用:(我没陪环境变量)

hdfs dfs –ls /     :查看根目录文件

hdfs dfs -ls /tmp/data:查看/tmp/data目录

hdfs dfs -cat /tmp/a.txt :查看 a.txt,与 -text 一样

hdfs dfs -mkdir dir:创建目录dir

hdfs dfs -rmdir dir:删除目录dir

2.1、添加结点

可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改 H A D O O P _ H O M E / c o n f / m a s t e r 文件,加入 N a m e N o d e 主机名,然后在 N a m e N o d e 节点上修改 HADOOP\_HOME/conf/master文件,加入 NameNode主机名,然后在NameNode节点上修改 HADOOP_HOME/conf/master文件,加入NameNode主机名,然后在NameNode节点上修改HADOOP_HOME/conf/slaves文件,加入新加节点主机名,再建立到新加节点无密码的SSH连接

运行启动命令:

start-all.sh

然后可以通过http://(Masternode的主机名):50070查看新添加的DataNode

2.2、负载均衡

start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布

结束语:遇到问题时,先查看logs,很有帮助。

3、java 操作hdfs集群

参考:hadoop(02)、使用JAVA API对HDFS进行基本操作 - MaxBill个人空间 - OSCHINA - 中文开源技术交流社区、使用JAVA API对HDFS进行基本操作 - MaxBill个人空间 - OSCHINA - 中文开源技术交流社区")

https://gitee.com/MaxBill/hadoop/blob/master/src/main/java/com/maxbill/hadoop/hdfs/HdfsUtils.java

Hadoop之HDFS的FileSystem接口详解【图文】_wangwei4078_51CTO博客

前提:配置好hadoop集群

3.1、配置application.properties:

#HDFS相关配置
hdfs.defaultfs=fs.defaultFS
hdfs.host=hdfs://192.168.23.137:8020
hdfs.uploadPath=/user/hadoop/

=2019/03/27 更新=

springboot依赖忘贴了:P

hadoop相关依赖:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.8.2</version>
</dependency>

3.2、HdfsUtils

package jit.hf.agriculture.util;



import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;

import org.apache.hadoop.io.IOUtils;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;



import java.io.InputStream;

import java.net.URI;



/**

 * @Auther: zj

 * @Date: 2018/10/30 12:54

 * @Description: hdfs工具类

 */

@Component

public class HdfsUtils {



    @Value( "${hdfs.uploadPath}" )

    private  String userPath;



    @Value( "${hdfs.host}" )

    private  String hdfsPath;



    public void test1(){

        System.out.println( userPath);

        System.out.println( hdfsPath );

    }



    /**

     * @功能 获取HDFS配置信息

     * @return

     */

    private Configuration getHdfsConfig() {

        Configuration config = new Configuration();



        return config;

    }



    /**

     * @功能 获取FS对象

     */

    private FileSystem getFileSystem() throws Exception {

        //客户端去操作hdfs时,是有一个用户身份的,默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=hadoop

        //FileSystem hdfs = FileSystem.get(getHdfsConfig());

        //也可以在构造客户端fs对象时,通过参数传递进去

        FileSystem hdfs = FileSystem.get(new URI(hdfsPath), getHdfsConfig(), "hadoop");

        return hdfs;

    }



    /**

     * 递归创建目录

     *

     */

    public void mkdir(String path) throws Exception {

        FileSystem fs = getFileSystem();

        Path srcPath = new Path(path);

        boolean isOk = fs.mkdirs(srcPath);

        if (isOk) {

            System.out.println("create dir success...");

        } else {

            System.out.println("create dir failure...");

        }

        fs.close();

    }



    /**

     * 在HDFS创建文件,并向文件填充内容

     */

    public void createFile(String filePath, byte[] files){

        try {

            FileSystem fs = getFileSystem();

            //目标路径

            Path path = new Path( filePath );

            //打开一个输出流

            FSDataOutputStream outputStream = fs.create( path );

            outputStream.write( files );

            outputStream.close();

            fs.close();

            System.out.println( "创建文件成功!" );

        } catch (Exception e) {

            System.out.println( "创建文件失败!" );

        }

    }



    /**

     * 读取HDFS文件内容

     */

    public void readFile(String filePath) throws Exception {

        FileSystem fs = getFileSystem();

        Path path = new Path(filePath);

        InputStream in = null;

        try {

            in = fs.open(path);

            //复制到标准输出流

            IOUtils.copyBytes(in, System.out, 4096, false);

            System.out.println( "\n读取文件成功!" );

        } catch (Exception e) {

            System.out.println( "\n读取文件失败!" );

        }

            finally

        {

            IOUtils.closeStream(in);

        }

    }



    /**

     * 读取HDFS目录详细信息

     */

    public void pathInfo(String filePath) throws Exception {

        FileSystem fs = getFileSystem();

        FileStatus[] listStatus = fs.listStatus(new Path(filePath));

        for (FileStatus fileStatus : listStatus) {

            System.out.println(fileStatus.getPath() + ">>>>>" + fileStatus.toString());

        }

    }



    /**

     * 读取HDFS文件列表

     */

    public void listFile(String filePath) throws Exception {

        FileSystem fs = getFileSystem();

        //递归找到所有的文件

        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(filePath), true);

        while (listFiles.hasNext()) {

            LocatedFileStatus next = listFiles.next();

            String name = next.getPath().getName();

            Path path = next.getPath();

            System.out.println(name + "---" + path.toString());

        }

    }



    /**

     *  文件重命名

     */

    public void renameFile(String oldName, String newName) throws Exception {

        FileSystem fs = getFileSystem();

        Path oldPath = new Path(oldName);

        Path newPath = new Path(newName);

        boolean isOk = fs.rename(oldPath, newPath);

        if (isOk) {

            System.out.println("rename success...");

        } else {

            System.out.println("rename failure...");

        }

        fs.close();

    }



    /**

     *  删除指定文件

     */

    public void deleteFile(String filePath) throws Exception {

        FileSystem fs = getFileSystem();

        Path path = new Path(filePath);

        boolean isOk = fs.deleteOnExit(path);

        if (isOk) {

            System.out.println("delete success...");

        } else {

            System.out.println("delete failure...");

        }

        fs.close();

    }



    /**

     * 上传文件

     */

    public void uploadFile(String fileName, String uploadPath) throws Exception {

        FileSystem fs = getFileSystem();

        //上传路径

        Path clientPath = new Path(fileName);

        //目标路径

        Path serverPath = new Path(uploadPath);

        //调用文件系统的文件复制方法,前面参数是指是否删除原文件,true为删除,默认为false

        fs.copyFromLocalFile(false, clientPath, serverPath);

        fs.close();

        System.out.println( "上传文件成功!" );

    }



    /**

     * 下载文件

     */

    public void downloadFile(String fileName, String downPath) throws Exception {

        FileSystem fs = getFileSystem();

        fs.copyToLocalFile(new Path(fileName), new Path(downPath));

        fs.close();

        System.out.println( "下载文件成功!" );

    }



    /**

     *  判断文件是否存在

     */

    public boolean existFile(String FileName) throws Exception {

        FileSystem hdfs = getFileSystem();

        Path path = new Path(FileName);

        boolean isExists = hdfs.exists(path);

        return isExists;

    }

}

3.3、controller层

package jit.hf.agriculture.controller;


import jit.hf.agriculture.util.HdfsUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;





/**

 * @Auther: zj

 * @Date: 2018/10/30 12:52

 * @Description:

 */

@RestController

public class HdfsController {



    @Autowired

    private HdfsUtils hdfsUtils;



    //测试配置文件注入是否有效

    @GetMapping("/hdfs/test1")

    public void HdfsTest1(){

        hdfsUtils.test1();

    }



    /**

     * hdfs 创建目录

     *

     * 测试用例- - -

     * dir: aaa

     */

    @PostMapping("/hdfs/mkdir")

    public void HdfsMkdir(@RequestParam("dir") String path) throws Exception {

        hdfsUtils.mkdir( path );

    }



    /**

     * 在HDFS创建文件,并向文件填充内容

     *

     * 测试用例- - -

     * filepath: aaa/a.text

     * content: hello world

     */

    @PostMapping("/hdfs/vim")

    public void HdfsVim(@RequestParam("filepath") String filepath,

                        @RequestParam(value = "content",required=false,defaultValue = "") String content

                        ) throws Exception {

        hdfsUtils.createFile( filepath,content.getBytes() );

    }



    /**

     * 读取HDFS文件内容,cat

     * @param filepath

     * @throws Exception

     *

     * 测试用例- - -

     *filepath: aaa/a.text

     */

    @GetMapping("hdfs/cat")

    public void HdfsCat(@RequestParam("filepath") String filepath) throws Exception {

        hdfsUtils.readFile( filepath );

    }



    /**

     * 显示HDFS目录详细信息(包括目录下的文件和子目录)

     * @param filepath

     * @throws Exception

     *

     * 测试用例- - -

     * filepath:aaa

     */

    @GetMapping("hdfs/catdir")

    public void HdfsAndCatDir(@RequestParam("filepath") String filepath) throws Exception {

        hdfsUtils.pathInfo( filepath );

    }



    /**

     * 读取hdfs 指定目录下的文件列表

     * @param filepath

     * @throws Exception

     *

     * 测试用例- - -

     * filepath:aaa

     */

    @GetMapping("hdfs/ls")

    public void HdfsLs(@RequestParam("filepath") String filepath) throws Exception {

        hdfsUtils.listFile( filepath );

    }



    /**

     * 文件重命名

     *

     * 测试用例- - -

     * oldName:aaa/b.text

     * newName:aaa/c.text

     */

    @PostMapping("hdfs/renameFile")

    public void HdfsRenameFile(@RequestParam("oldName") String oldName,

                               @RequestParam("newName") String newName) throws Exception {

        hdfsUtils.renameFile( oldName,newName );

    }



    /**

     * 删除指定文件

     * @param filepath

     * @throws Exception

     *

     * 测试用例

     * filepath:aaa/c.text

     */

    @GetMapping("hdfs/deleteFile")

    public void HdfsDeleteFile(@RequestParam("filepath") String filepath) throws Exception {

        hdfsUtils.deleteFile( filepath );

    }



    /**

     * 上传文件

     * @param fileName

     * @param uploadFile

     * @throws Exception

     *

     * 测试用例

     *

     * fileName: C:\\Users\\zj\\Desktop\\hello.txt

     * uploadName:aaa

     */

    @PostMapping("hdfs/uploadFile")

    public void UploadFile(@RequestParam("fileName") String fileName,

                           @RequestParam("uploadFile") String uploadFile) throws Exception {

        hdfsUtils.uploadFile( fileName,uploadFile );

    }



    /**

     * 下载文件

     * @param fileName

     * @param downPath

     * @throws Exception

     *

     * 测试用例

     * fileName:aaa/hello.txt

     * downPath:C:\\

     */



# 最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

**目录:**

![全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)](https://img-blog.csdnimg.cn/img_convert/ed9aeef9ab264329689c63efd4a34ab8.webp?x-oss-process=image/format,png)

Java面试核心知识点

**一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!**

![全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)](https://img-blog.csdnimg.cn/img_convert/935e33fbc42a97bf62205a46f076ac7c.webp?x-oss-process=image/format,png)

Java面试核心知识点

**已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了**

![全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)](https://img-blog.csdnimg.cn/img_convert/46e92a8c10d53a3f77415534ce5c6fd0.webp?x-oss-process=image/format,png)


                  @RequestParam("newName") String newName) throws Exception {

        hdfsUtils.renameFile( oldName,newName );

    }



    /**

     * 删除指定文件

     * @param filepath

     * @throws Exception

     *

     * 测试用例

     * filepath:aaa/c.text

     */

    @GetMapping("hdfs/deleteFile")

    public void HdfsDeleteFile(@RequestParam("filepath") String filepath) throws Exception {

        hdfsUtils.deleteFile( filepath );

    }



    /**

     * 上传文件

     * @param fileName

     * @param uploadFile

     * @throws Exception

     *

     * 测试用例

     *

     * fileName: C:\\Users\\zj\\Desktop\\hello.txt

     * uploadName:aaa

     */

    @PostMapping("hdfs/uploadFile")

    public void UploadFile(@RequestParam("fileName") String fileName,

                           @RequestParam("uploadFile") String uploadFile) throws Exception {

        hdfsUtils.uploadFile( fileName,uploadFile );

    }



    /**

     * 下载文件

     * @param fileName

     * @param downPath

     * @throws Exception

     *

     * 测试用例

     * fileName:aaa/hello.txt

     * downPath:C:\\

     */



# 最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

**目录:**

[外链图片转存中...(img-SCEVpbJS-1726576160115)]

Java面试核心知识点

**一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!**

[外链图片转存中...(img-w9xHuquM-1726576160116)]

Java面试核心知识点

**已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了**

[外链图片转存中...(img-mMQ7VKKv-1726576160116)]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值