HDFS的shell命令行操作以及Java接口

HDFS的shell命令行操作

例如: $ hadoop fs -ls /

  1. -help |—— 功能:输出这个命令参数手册

  2. -ls |—— 功能:显示目录信息
    示例: hadoopfslshdfs://Master:9000/hdfs,> h a d o o p f s − l s h d f s : / / M a s t e r : 9000 / 备 注 : 这 些 参 数 中 , 所 有 的 h d f s 路 径 都 可 以 简 写 , – > hadoop fs -ls / 等同于上一条命令的效果

  3. -mkdir |—— 功能:在hdfs上创建目录
    示例:hadoop fs -mkdir -p /aaa/bbb/cc/dd

  4. -moveFromLocal |—— 功能:从本地剪切粘贴到hdfs
    示例:hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
    -moveToLocal |—— 功能:从hdfs剪切粘贴到本地
    示例:hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt

  5. –appendToFile |—— 功能:追加一个文件到已经存在的文件末尾
    示例:hadoop fs -appendToFile ./hello.txt hdfs://Master:9000/hello.txt
    可以简写为: Hadoop fs -appendToFile ./hello.txt /hello.txt

  6. -cat |—— 功能:显示文件内容
    示例:hadoop fs -cat /hello.txt
    -tail |—— 功能:显示一个文件的末尾
    示例:hadoop fs -tail /weblog/access_log.1
    -text |—— 功能:以字符形式打印一个文件的内容
    示例:hadoop fs -text /weblog/access_log.1

  7. -chgrp(只是更改文件的属组) -chmod(更改文件的权限) -chown(改文件的属主与属组)
    示例: hadoop fs -chmod 666 /hello.txt
    hadoop fs -chown someuser:somegrp /hello.txt

  8. -cp |—— 功能:从hdfs的一个路径拷贝hdfs的另一个路径
    示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
    -mv |—— 功能:在hdfs目录中移动文件
    示例: hadoop fs -mv /aaa/jdk.tar.gz /

  9. -get |—— 功能:等同于copyToLocal,就是从hdfs下载文件到本地
    示例:hadoop fs -get /aaa/jdk.tar.gz
    -getmerge |—— 功能:合并下载多个文件
    示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…
    hadoop fs -getmerge /aaa/log.* ./log.sum

  10. -put |—— 功能:等同于copyFromLocal
    示例:hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

  11. -rm |—— 功能:删除文件或文件夹
    示例:hadoop fs -rm -r /aaa/bbb/

  12. -rmdir |—— 功能:删除空目录
    示例:hadoop fs -rmdir /aaa/bbb/ccc

  13. -df |—— 功能:统计文件系统的可用空间信息
    示例:hadoop fs -df -h /
    -du |—— 功能:统计文件夹的大小信息
    示例: hadoop fs -du -s -h /aaa/*

  14. -count |—— 功能:统计一个指定目录下的文件节点数量
    示例:hadoop fs -count /aaa/

  15. -setrep |—— 功能:设置hdfs中文件的副本数量
    示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz
    <这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量

Hdfs的Java接口

获取api中的客户端对象:
    @Before
    public void init() throws Exception {

        // 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI
        // 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址
        // new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml
        // 然后再加载classpath下的hdfs-site.xml
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://Master:9000");

        // 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置
        conf.set("dfs.replication", "3");

        // 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户
        fs = FileSystem.get(new URI("hdfs:///Master:9000"), conf, "hadoop");
    }
具体使用的例子::
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;

public class HdfsJava {     
    FileSystem fs = null;
     // 初始化 为"hadoop"用户 ,有权限修改
    @Before
    public void init() throws IOException, URISyntaxException, InterruptedException {           
        fs = FileSystem.get(new URI("hdfs://Master:9000"), new Configuration(), "hadoop");  
    }   
    //  从本地上传一个文件到hdfs中,-->  fs.create
    @Test
    public void testUpload() throws IllegalArgumentException, IOException {     
        InputStream in = new FileInputStream("/home/hadoop/examples/friends/friends.jar");      
        OutputStream out = fs.create(new Path("/data/demon/friends/abc/friends.jar"));      
        IOUtils.copyBytes(in, out, 4096, true);
    }
    //  从hdfs中下载一个文件到本地里,  --> fs.copyFromLocalFile
    /*@Test
    public void testDownload() throws IllegalArgumentException, IOException {
        fs.copyFromLocalFile(new Path("/data/demon/friends/input/fri.txt"), new Path("/home/hadoop/examples/friends"));                     
    }*/ 
    //  创建一个文件夹,--> fs.mkdirs
    @Test
    public void TestDFSMkdirs() throws IllegalArgumentException, IOException {      
        boolean mkdir = fs.mkdirs(new Path("/data/demon/friends/abc"));
        System.out.println(mkdir);      
    }   
    //  删除一个文件夹/文件,  --> fs.delete, 其中 true 表示递归删除
    @Test
    public void testDel() throws IllegalArgumentException, IOException {        
        boolean flag = fs.delete(new Path("/data/demon/friends/abc"), true);
        System.out.println(flag);
    }
    // 查看文件及文件夹信息 
    @Test
    public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        String flag = "d--             ";
        for (FileStatus fstatus : listStatus) {
            if (fstatus.isFile())  flag = "f--         ";
            System.out.println(flag + fstatus.getPath().getName());
        }
    }
    //  通过流的方式访问 hdfs   
    public static void main(String[] args) throws IOException, URISyntaxException {     
        FileSystem fs = FileSystem.get(new URI("hdfs://Master:9000"), new Configuration()); 
        //  --> fs.open
        InputStream in = fs.open(new Path("/data/demon/friends/input/fri.txt"));        
        OutputStream out = new FileOutputStream("/home/hadoop/examples/friends/fri.txt");
        //  将输入流中数据传输到输出流,  ----> *IOUtils.copyBytes*   
        IOUtils.copyBytes(in, out, 4096, true);             
    }
}

总结:
***1. fs.create
2. fs.copyFromLocalFile
3. fs.mkdirs
4. fs.delete
5. fs.open
6. IOUtils.copyBytes***

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值