HDFS JAVA API(Hadoop3.0系列)

  1. 实验环境:
    Linux Ubuntu 16.04

    jdk-8u191-linux-x64
    
    hadoop-3.0.0
    
    hadoop-eclipse-plugin-2.7.3.jar 
    
    eclipse-java-juno-SR2-linux-gtk-x86_64
    
  2. 切换目录到/apps/hadoop/sbin下,启动hadoop。

    view plain copy
    cd /apps/hadoop/sbin  
    ./start-all.sh  
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210331174300426.png)
    
  3. 在Linux本地创建/data/hadoop4目录
    mkdir -p /data/hadoop4

  4. 切换到/data/hadoop4目录,用wget命令,从…网址上下载依赖包hadoop2lib.tar.gz,并解压到当前目录。

  5. 打开clipse,新建JAVA项目,名为hadoop4。
    在这里插入图片描述

  6. 在hadoop4项目下新建包,名为my.hdfs。
    在这里插入图片描述

  7. 在hadoop4项目下创建目录,名为hadoop4lib,用于存放项目所需依赖包。
    在这里插入图片描述

  8. 从/data/hadoop4/hadoop2lib目录下拷贝所有jar包到项目下的hadoop4lib目录
    在这里插入图片描述

  9. 选中hadoop4lib里面的所有jar包,右键点击BuildPath=>Add to Build Path选项。
    在这里插入图片描述

  10. 这样就将jar包加载到项目里面了,然后是进行Java API对HDFS的各种基本操作。
    在这里插入图片描述

  11. 在my.hdfs包下,新建类MakeDir,程序功能是在HDFS的根目录下,创建名为hdfstest的目录

       ```java
       package my.hdfs;  
       import java.io.IOException;  
       import java.net.URI;  
       import java.net.URISyntaxException;  
       import org.apache.hadoop.conf.Configuration;  
       import org.apache.hadoop.fs.FileSystem;  
       import org.apache.hadoop.fs.Path;  
       public class MakeDir {  
           public static void main(String[] args) throws IOException, URISyntaxException {  
               Configuration conf = new Configuration();  
         
               String hdfsPath = "hdfs://localhost:9000";  
               FileSystem hdfs = FileSystem.get(new URI(hdfsPath), conf);  
         
               String newDir = "/hdfstest";  
         
               boolean result = hdfs.mkdirs(new Path(newDir));  
               if (result) {  
                   System.out.println("Success!");  
               }else {  
                   System.out.println("Failed!");  
               }  
           }  
       }  
       ```
    
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210331175637749.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhbmR5bHg=,size_16,color_FFFFFF,t_70)
  1. 点击运行
    在这里插入图片描述
  2. 在Eclipse里执行,然后在HDFS上查看实验结果
    在这里插入图片描述
  3. 在my.hdfs包下,新建类TouchFile,程序功能是在HDFS的目录/hdfstest下,创建名为touchfile的文件
package my.hdfs;  
import java.io.IOException;  
import java.net.URI;  
import java.net.URISyntaxException;  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FSDataOutputStream;  
import org.apache.hadoop.fs.FileSystem;  
import org.apache.hadoop.fs.Path;  
public class TouchFile {  
    public static void main(String[] args) throws IOException, URISyntaxException {  
        Configuration configuration = new Configuration();  
  
        String hdfsPath = "hdfs://localhost:9000";  
        FileSystem hdfs = FileSystem.get(new URI(hdfsPath), configuration);  
  
        String filePath = "/hdfstest/touchfile";  
  
        FSDataOutputStream create = hdfs.create(new Path(filePath));  
  
        System.out.println("Finish!");  
    }  
}  
  1. 在Eclipse里执行,然后在hdfs上查看实验结果。
    在这里插入图片描述
  2. 在/data/hadoop4下使用vim打开sample_data文件
  3. 写入
    在这里插入图片描述
  4. 在my.hdfs包下,创建类CopyFromLocalFile.class,程序功能是将本地linux操作系统上的文件/data/hadoop4/sample_data,上传到HDFS文件系统的/hdfstest目录下。
    在Eclipse里执行,然后在HDFS上查看实验结果。
    在这里插入图片描述
  5. 在my.hdfs包下,创建类CopyToLocalFile.class,程序功能是将HDFS文件系统上的文件/hdfstest/sample_data,下载到本地/data/hadoop4/copytolocal 。
package my.hdfs;  
import java.io.IOException;  
import java.net.URI;  
import java.net.URISyntaxException;  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FileSystem;  
import org.apache.hadoop.fs.Path;  
public class CopyToLocalFile {  
    public static void main(String[] args) throws IOException, URISyntaxException {  
        Configuration conf = new Configuration();  
  
        String hdfsPath = "hdfs://localhost:9000";  
        FileSystem hdfs = FileSystem.get(new URI(hdfsPath), conf);  
  
        String from_HDFS = "/hdfstest/sample_data";  
        String to_Linux = "/data/hadoop4/copytolocal";  
  
        hdfs.copyToLocalFile(false, new Path(from_HDFS), new Path(to_Linux));  
  
        System.out.println("Finish!");  
    }  
}  

在Eclipse里执行,然后在Linux本地/data/hadoop4上查看实验结果。

view plain copy
cd /data/hadoop4/copytolocal
ls

  1. 在my.hdfs包下,新建类ListFiles,程序功能是列出HDFS文件系统/hdfstest目录下,所有的文件,以及文件的权限、用户组、所属用户。
package my.hdfs;  
import java.io.IOException;  
import java.net.URI;  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FileStatus;  
import org.apache.hadoop.fs.FileSystem;  
import org.apache.hadoop.fs.Path;  
public class ListFiles {  
    public static void main(String[] args) throws IOException {  
        Configuration conf = new Configuration();  
        String hdfspath = "hdfs://localhost:9000/";  
        FileSystem hdfs = FileSystem.get(URI.create(hdfspath), conf);  
        String watchHDFS = "/hdfstest";  
        FileStatus[] files = hdfs.listStatus(new Path(watchHDFS));  
        for (FileStatus file : files) {  
            System.out.println(file.getPermission() + " " + file.getOwner()  
                    + " " + file.getGroup() + " " + file.getPath());  
        }  
    }  
}  

在Eclipse里执行,然后在Eclipse的控制界面Console上查看实验结果。
在这里插入图片描述

  1. 在my.hdfs包下,新建类IteratorListFiles,程序功能是列出HDFS文件系统/根目录下,以及各级子目录下,所有文件以及文件的权限、用户组,所属用户。
package my.hdfs;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.net.URI;  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FileStatus;  
import org.apache.hadoop.fs.FileSystem;  
import org.apache.hadoop.fs.Path;  
public class IteratorListFiles {  
    public static void main(String[] args) throws IOException {  
        Configuration conf = new Configuration();  
        String hdfspath = "hdfs://localhost:9000/";  
        FileSystem hdfs = FileSystem.get(URI.create(hdfspath), conf);  
        String watchHDFS = "/";  
  
        iteratorListFile(hdfs, new Path(watchHDFS));  
    }  
    public static void iteratorListFile(FileSystem hdfs, Path path)  
            throws FileNotFoundException, IOException {  
        FileStatus[] files = hdfs.listStatus(path);  
        for (FileStatus file : files) {  
            if (file.isDirectory()) {  
                System.out.println(file.getPermission() + " " + file.getOwner()  
                        + " " + file.getGroup() + " " + file.getPath());  
                iteratorListFile(hdfs, file.getPath());  
            } else if (file.isFile()) {  
                System.out.println(file.getPermission() + " " + file.getOwner()  
                        + " " + file.getGroup() + " " + file.getPath());  
            }  
        }  
    }  
}  

运行
在这里插入图片描述
22. 在my.hdfs包下,新建类LocateFile,程序功能是查看HDFS文件系统上,文件/hdfstest/sample_data的文件块信息。

package my.hdfs;  
import java.io.IOException;  
import java.net.URI;  
import java.net.URISyntaxException;  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.BlockLocation;  
import org.apache.hadoop.fs.FileStatus;  
import org.apache.hadoop.fs.FileSystem;  
import org.apache.hadoop.fs.Path;  
public class LocateFile {  
    public static void main(String[] args) throws IOException, URISyntaxException {  
        Configuration conf = new Configuration();  
        String hdfsPath = "hdfs://localhost:9000";  
        FileSystem hdfs = FileSystem.get(new URI(hdfsPath), conf);  
  
        Path file = new Path("/hdfstest/sample_data");  
        FileStatus fileStatus = hdfs.getFileStatus(file);  
  
        BlockLocation[] location = hdfs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());  
        for (BlockLocation block : location) {  
            String[] hosts = block.getHosts();  
            for (String host : hosts) {  
                System.out.println("block:" +block + " host:"+ host);  
            }  
        }  
    }  
}  
		![在这里插入图片描述](https://img-blog.csdnimg.cn/2021033118311962.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhbmR5bHg=,size_16,color_FFFFFF,t_70)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值