IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> CDH6 搭建hadoop如何测试hdfs功能 -> 正文阅读

[大数据]CDH6 搭建hadoop如何测试hdfs功能

首先吐槽一句,CDH真的太难搭建了,里面各种小细节,一步错了,就会导致各种问题,不管怎么说,反正踩了各种坑,把CDH搭建起来了。下面来介绍一下如何测试HDFS的功能吧。。

我这里使用maven去测试,首先安装依赖

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.2</version>
        </dependency>
        <!--HDFS-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.2</version>
        </dependency>

然后测试文件,

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.Before;
import org.junit.Test;

/**
 *@ClassName Test
 *@Description TODO
 *@Author luziyuan
 *@Date 2021-07-26 22:08
 *@Version 1.0
 **/
public class TestHdfs {


        FileSystem fs = null;
        @Before
        // 初始化HDFS
        public void init() throws Exception
        {
            // 配置文件 默认加载src下的配置文件
            Configuration conf = new Configuration();
// conf.set("fs.defaultFS", "hdfs://master:9000");
            // 生成一个文件系统客户端操作对象
//     fs = FileSystem.get(conf);
            // 第一个参数是URI指明了是hdfs文件系统 第二个参数是配置文件 第三个参数是指定用户名 需要与hadoop用户名保持一致
            fs = FileSystem.get(new URI("hdfs://ip:8020"), conf, "hdfs");
        }

        @Test
        // 创建新的文件夹
        public void mkdir() throws Exception
        {
            Path path = new Path("/hello");
            fs.mkdirs(path);
            // 关闭
            fs.close();
        }

        @Test
        // 上传文件
        //这个如果重名话会覆盖
        public void upload() throws Exception
        {
            // 第一个参数是本地windows下的文件路径 第二个参数是hdfs的文件路径
            fs.copyFromLocalFile(new Path("/Users/luziyuan/Desktop/跨域测试.html"), new Path("/hello"));
            // 关闭
            fs.close();

        }
    /**
     * 拷贝大文件到HDFS文件系统:带进度
     */
    @Test
    public void copyFromLocalBigFile() throws Exception {
        //本地
        InputStream in = new BufferedInputStream(new FileInputStream(new File("/Users/luziyuan/Desktop/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm")));
        //hdfs
        FSDataOutputStream out = fs.create(new Path("/hello/jdk.rpm"),
                new Progressable() {
                    public void progress() {
                        System.out.print(".");
                    }
                });

        IOUtils.copyBytes(in, out ,4096);

    }
    //创建文件夹
    @Test
    public void create()throws Exception {
//        FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/a.txt"));
        FSDataOutputStream out = fs.create(new Path("/hello/aaa.txt"));
        out.writeUTF("hello pk: replication 1");
        out.flush();
        out.close();
    }

    //重命名文件
    @Test
    public void rename() throws Exception {
        Path oldPath = new Path("/hello/jdk.rpm");
        Path newPath = new Path("/hello/jdk111.rpm");
        boolean result = fs.rename(oldPath, newPath);
        System.out.println(result);

    }
    /**
     * 查看文件块信息因为他是分布式的文件系统。上传一个文件以后
     * 10.1.100.103:9866 : 0 : 2073 : [Ljava.lang.String;@5ddcc487
     * 10.1.100.102:9866 : 0 : 2073 : [Ljava.lang.String;@5ddcc487
     * 10.1.100.101:9866 : 0 : 2073 : [Ljava.lang.String;@5ddcc487
     */
    @Test
    public void getFileBlockLocations() throws Exception {

        FileStatus fileStatus = fs.getFileStatus(new Path("/hello/跨域测试.html"));
        BlockLocation[] blocks = fs.getFileBlockLocations(fileStatus,0,fileStatus.getLen());

        for(BlockLocation block : blocks) {

            for(String name: block.getNames()) {
                System.out.println(name +" : " + block.getOffset() + " : " + block.getLength() + " : " + block.getHosts());
            }
        }
    }
    /**
     * 拷贝HDFS文件到本地:下载
     */
    @Test
    public void copyToLocalFile() throws Exception {
        //hdfs
        Path src = new Path("/hello/购课数据.xls");
        //本地
        Path dst = new Path("/Users/luziyuan/Desktop/答案");
        fs.copyToLocalFile(src, dst);
    }

    /**
     * 递归查看目标文件夹下的所有文件
     */
    @Test
    public void listFilesRecursive() throws Exception {

        RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/hello"), true);

        while (files.hasNext()) {
            LocatedFileStatus file = files.next();
            String isDir = file.isDirectory() ? "文件夹" : "文件";
            String permission = file.getPermission().toString();
            short replication = file.getReplication();
            long length = file.getLen();
            String path = file.getPath().toString();


            System.out.println(isDir + "\t" + permission
                    + "\t" + replication + "\t" + length
                    + "\t" + path
            );
        }
    }

    //删除文件,删除文件夹
    @Test
    public void delete() throws Exception {
        boolean result = fs.delete(new Path("/hello"), true);
        System.out.println(result);
    }
    }

然后相信你已经测试完了,发现hdfs就是一个分布式的文件系统,
还有个小坑,测试时不要使用root用户,否则会告诉你权限不够没有写的权限,当然也有解决方案,可以上网搜索一下。

CDH搭建好的hadoop java连接hdfs默认端口是8020,不要搞错了

如果解决你的问题,
帮我点个赞吧。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 16:33:26  更:2021-07-28 16:33:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 5:44:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码