Bootstrap

利用Java代码操作HDFS

Hadoop软件本身由java语言编写而成,可以说Hadoop跟Java是无缝对接。java中提供一套API可以用于操作的HDFS

在hdfs中提供很多操作文件系统命令:

创建文件夹

[root@hadoop1 ~]# hadoop fs -mkdir /linuxMkdir

删除文件夹

[root@hadoop1 ~]# hadoop fs -rmdir /linuxMkdir

上传一个文件到hdfs上:

[root@hadoop1 ~]# hadoop fs -put anaconda-ks.cfg /linuxMkdir

[root@hadoop1 ~]# hadoop fs -lsr /linuxMkdir

lsr: DEPRECATED: Please use 'ls -R' instead. -rw-r--r-- 3 root supergroup 1257 2022-12-07 07:02 /linuxMkdir/anaconda-ks.cfg

下载一个文件到linux中:

[root@hadoop1 ~]# hadoop fs -get /linuxMkdir/anaconda-ks.cfg /tmp

根据上述命令,编写java代码:

准备工作:

创建项目:

添加hadoop相关依赖

Maven:

a、用于构建项目

b、管理jar包

c、项目打包、运行工作

pox.xml添加如下依赖:

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

编写代码:

package org.tjcj.hdfs;

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

import java.io.IOException;

/**
 * 主要用于操作hdfs
 */
public class HDFSUtil {
    //文件系统
    private static FileSystem fileSystem;
    static{//静态代码块主要作用用于实例化fileSystem
        //获取当前的hadoop开发环境
        Configuration conf = new Configuration();
        //设置文件系统类型
        conf.set("fs.defaultFS","hdfs://192.168.2.199:9000");
        if(fileSystem == null){
            try {
                fileSystem = FileSystem.get(conf);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 创建一个文件夹方法
     * @param path
     */
    public static void createDir(String path) throws IOException {
        boolean flag = false;
        if (!fileSystem.exists(new Path(path))){//如果文件夹不存在
            flag = fileSystem.mkdirs(new Path(path));
        }
        if(flag){
            System.out.println("文件夹已经创建成功。。。");
        }else{
            System.out.println("文件夹已经存在。。。。");
        }
    }

    /**
     * 删除文件夹以及文件
     * @param path
     */
    public static void delete(String path) throws IOException {
        boolean flag = false;
        if(fileSystem.exists(new Path(path))){
            flag = fileSystem.delete(new Path(path),true);
        }
        if(flag){
            System.out.println("文件或者文件夹已经删除");
        }else{
            System.out.println("文件或者文件夹不存在");
        }
    }

    /**
     * 上传到hdfs上
     * @param srcPath
     * @param destPath
     * @throws IOException
     */
    public static void uploadFile(String srcPath,String destPath) throws IOException {
        fileSystem.copyFromLocalFile(false,true,new Path(srcPath),new Path(destPath));
        System.out.println("文件上传成功!!!");
    }
    public static void downloadFile(String srcPath,String destPath) throws IOException {
        fileSystem.copyToLocalFile(false,new Path(srcPath),new Path(destPath),true);
        System.out.println("文件下载成功");
    }
    public static void main(String[] args) throws IOException {
     //  createDir("/javaMkdir");
//        delete("/javaMkdir");
  //     uploadFile("D:\\tmp\\test.txt","/javaMkdir");
        downloadFile("/javaMkdir/test.txt","D:\\");
    }
}

运行可能出现错误解决方法:

解决方法:[root@hadoop1 ~]# hadoop fs -chmod -R 777 /

 

;