zoukankan      html  css  js  c++  java
  • 大数据(3)---HDFS客户端命令及java连接

    一、参数设置

      之前有说到HDFS的备份数量和切块大小都是可以配置的,默认是备份3,切块大小默认128M

      文件的切块大小和存储的副本数量,都是由客户端决定!

      所谓的由客户端决定,是通过客户端机器上面的配置参数来定

      hdfs的客户端会读以下两个参数,来决定切块大小、副本数量:

      切块大小的参数: dfs.blocksize

      副本数量的参数: dfs.replication

      更多参数详见:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

      因此我们只需要在客户端的机器上面hdfs-site.xml中进行配置:

    <property>
    
    <name>dfs.blocksize</name>
    
    <value>64m</value>
    
    </property>
    
     
    
    <property>
    
    <name>dfs.replication</name>
    
    <value>2</value>
    
    </property>

      我们在两个客户端进行上传,一个客户端修改为上述配置,查看上传文件信息

      可以看见一个文件是3128m,另外一个是264m

    二、客户端命令行操作

    1、上传文件到hdfs

    hadoop fs -put /本地文件  /aaa

    2、下载文件到客户端本地磁盘

    hadoop fs -get /hdfs中的路径   /本地磁盘目录

    3、hdfs中创建文件夹

    hadoop fs -mkdir  -p /aaa/xxx

     

    4、移动hdfs中的文件(更名)

    hadoop fs -mv /hdfs的路径1  /hdfs的另一个路径2

     

    复制hdfs中的文件到hdfs的另一个目录

    hadoop fs -cp /hdfs路径_1  /hdfs路径_2

     

    5、删除hdfs中的文件或文件夹

    hadoop fs -rm -r /aaa

    6、查看hdfs中的文本文件内容

    hadoop fs -cat /demo.txt

    hadoop fs -tail -f /demo.txt

    更多命令:https://www.cnblogs.com/houkai/p/3848089.html

      三、java连接

    1.首先需要搭建本地开发环境,因为本地启动应用的时候会从hadoop里面回去调用c的函数操作本地文件系统,因此我们需要在本地配置hadoop的环境信息。

    hadoop压缩包解压出来,留下脚本所在的目录就可以了,其他的一些目录可以丢掉,留下下图圈上的即可

     配置hadoop环境变量,将bin目录的里面的文件替换问windows的脚本文件。

    windows的脚本文件去哪儿弄呢,可以自己去编译,也可以找别人编译好的:

    https://github.com/steveloughran/winutils

     这是别人已经编译好的windows脚本,换到自己的bin目录里面去就行了。

    配置好之后检查下能否识别hadoop指令

    2. 准备完毕就可以导包撸代码了

    导包:版本最好和自己安装hadoop版本一致

            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>${hadoop.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>${hadoop.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs-client</artifactId>
                <version>${hadoop.version}</version>
            </dependency>

    上代码:

    package com.nijunyang.hadoop.hdfs;
    
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.*;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.net.URI;
    import java.util.Arrays;
    
    /**
     * Description:
     * Created by nijunyang on 2019/12/25 20:26
     */
    public class HDFSDemo {
    
        FileSystem fs;
        
        @Before
        public void init() throws Exception{
    
            URI uri = new URI("hdfs://nijunyang68:9000/");
            /**
             * Configuration 构造会从 classpath中加载core-default.xml hdfs-default.xml core-site.xml hdfs-site.xml等文件
             * 也可使用set方法进行自己设置值
             * https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
             */
            Configuration conf = new Configuration();
            conf.set("dfs.replication", "2");
            // 切块的规格大小:32M
            conf.set("dfs.blocksize", "32m");
            fs = FileSystem.get(uri, conf, "root");
        }
    
        @Test
        public void test1() throws Exception {
            // 上传一个文件到HDFS中
            fs.copyFromLocalFile(new Path("E:/安装包/linux/jdk-8u191-linux-x64.tar.gz"), new Path("/soft/"));
            //下载到本地
            fs.copyToLocalFile(new Path("/soft/jdk-8u191-linux-x64.tar.gz"), new Path("f:/"));
            //在hdfs内部移动文件/修改名称
            fs.rename(new Path("/redis-5.0.5.tar.gz"), new Path("/redis5.0.5.tar.gz"));
            //在hdfs中创建文件夹
            fs.mkdirs(new Path("/xx/yy/zz"));
            //在hdfs中删除文件或文件夹
            fs.delete(new Path("/xx/yy/zz"), true);
            //查询hdfs指定目录下的文件信息
            RemoteIterator<LocatedFileStatus> iter = fs.listFiles(new Path("/"), true);
            while(iter.hasNext()){
                LocatedFileStatus status = iter.next();
                System.out.println("文件全路径:"+status.getPath());
                System.out.println("块大小:"+status.getBlockSize());
                System.out.println("文件长度:"+status.getLen());
                System.out.println("副本数量:"+status.getReplication());
                System.out.println("块信息:"+ Arrays.toString(status.getBlockLocations()));
                System.out.println("--------------------------------");
            }
            //查询hdfs指定目录下的文件和文件夹信息
            FileStatus[] listStatus = fs.listStatus(new Path("/"));
            for(FileStatus status:listStatus){
                System.out.println("文件全路径:"+status.getPath());
                System.out.println(status.isDirectory()?"这是文件夹":"这是文件");
                System.out.println("块大小:"+status.getBlockSize());
                System.out.println("文件长度:"+status.getLen());
                System.out.println("副本数量:"+status.getReplication());
                System.out.println("--------------------------------");
            }
            fs.close();
        }
    }

    简单来说java代码也就是一个客户端访问,所以说配置信息都可以塞到Configuration里面去。

  • 相关阅读:
    实习第五十七天
    武汉第五十六天
    武汉第五十五天
    常用环境配置
    http 基本验证(nginx)
    nginx configuration
    docker run demo
    初识Hadoop
    大数据简介
    HDFS 存放策略
  • 原文地址:https://www.cnblogs.com/nijunyang/p/12099233.html
Copyright © 2011-2022 走看看