首页 > 编程语言 >hadoop day3-java实现hdfs

hadoop day3-java实现hdfs

时间:2022-08-22 21:22:43浏览次数:83  
标签:hdfs fs java hadoop new bigdata19

如何用javaApi的方式来操作hdfs

 新建maven项目,然后建立一个子工程

在父工程中引入依赖(maven中hadoop hdfs,hadoop common和hadoop client)

 

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.6</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.6</version>
    <scope>test</scope>
</dependency>

 父工程引入后不会产生依赖,需要在子工程中引入

 代码

package com.shujia.xiaoyu.hdfs;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.logging.SimpleFormatter;

/*
使用java操作HDFS
创建文件夹,上传文件,下载文件,列出目录,查看block的信息
 */
public class TestHdfsApi {
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        //客户端发请求主要是对主节点发送请求,配置主节点信息
        conf.set("fs.defaultFS","hdfs://master:9000");
        //通过hadoop提供的FileSystem抽象类中的get方法,可以根据我们自己提供的配置获取操作hdfs的对象
        //抽象类可以写具体方法,接口不可以
        FileSystem fs = FileSystem.get(conf);

//        //在hdfs上创建文件夹
//        boolean b=fs.mkdirs(new Path("/shujia/bigdata19"));
//        System.out.println(b);
//        //需要把pom文件中的作用范围删了
//
//        //上传文件的操作(使用绝对路径(带盘符的路径))
//        fs.copyFromLocalFile(new Path("D:\\soft\\projects\\bigdata19-project\\bigdata19-hadoop\\data\\students.txt"),new Path("/shujia/bigdata19/students.txt"));
//
//        //下载文件的操作
//        fs.copyToLocalFile(new Path("/shujia/bigdata19/students.txt"),new Path("E:/students.txt"));

        //列出当前文件夹所有文件
        //使用到java中的迭代器,集合,增强for循环
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/shujia/bigdata19/"), true);
        while(listFiles.hasNext()){
            LocatedFileStatus fileStatus = listFiles.next();
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            for (BlockLocation location : blockLocations) {
                String[] names = location.getNames();
                String s = Arrays.toString(names);
                System.out.println(s);
            }
            //获取文件所属用户
            String owner = fileStatus.getOwner();
            System.out.println(owner);

            //获取文件名
            String name = fileStatus.getPath().getName();
            System.out.println(name);

            //获取文件权限
            FsPermission permission = fileStatus.getPermission();
            String s = permission.toString();
            System.out.println(s);

            //获取文件最后修改的时间
            long time=fileStatus.getModificationTime();
            System.out.println(time);//毫秒级别
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date=new Date(time);
            String s1 = sdf.format(date);
            System.out.println(s1);

            System.out.println("===========");
        }

      
//使用文件流的方式进行文件上传和下载
//输入流
BufferedReader br = new BufferedReader(new FileReader("D:\\soft\\projects\\bigdata19-project\\bigdata19-hadoop\\data\\students.txt"));
//输出流
FSDataOutputStream fsDataOutputStream = fs.create(new Path("/shujia/bigdata19/a.txt"));
//使用hadoop提供的工具类进行流与流读和写
//对流复制
IOUtils.copy(br,fsDataOutputStream);

//释放资源
IOUtils.closeQuietly(fsDataOutputStream);
IOUtils.closeQuietly(br);

//释放资源 fs.close(); } }

 

标签:hdfs,fs,java,hadoop,new,bigdata19
From: https://www.cnblogs.com/wqy1027/p/16614297.html

相关文章

  • java输出小数点后n位
    用DecimalFormat类的实例化对象的format的方法,在DecimalFormat构造的时候将所需要的格式传进去;具体代码为: 也可以for循环定义format的数量 但是如果输出0.22222......
  • 数据结构(java版)
    复杂度什么是算法算法是用于解决特定问题一系列执行步骤如果单从执行效率上进行评估,可能会想到这么一种方案比较不同算法对同一组输入的执行处理时间,这种叫事后统计法......
  • Java流程控制02(狂神说Java)
    一、While循环while是最基本的循环,他的结构为:while(布尔表达式){//循环内容}只要布尔表达式为true,循环就会一直执行下去。大多数情况是会让......
  • 【Java基础】求数组的最大值,最小值,和值,平均值
    1.实现int[]arr=newint[10];//赋值for(inti=0;i<arr.length;i++){arr[i]=(int)(Math.random()*90+10);......
  • Hadoop的由来、Block切分、进程详解
    Hadoop的由来、Block切分、进程详解一、hadoop的由来Google发布了三篇论文:GFS(GoogleFileSystem)MapReduce(数据计算方法)BigTable:HbaseDougcutting花费了两......
  • 【Java基础】二维数组实现杨辉三角
    1.什么是杨辉三角每一行头尾都为1,每个数都等于上面两个数之和arr[3][1]=arr[2][0]+arr[2][1];arr[3][2]=arr[2][1]+arr[2][2];2.实现int[][]arr=new......
  • hadoop简介
    一句话简述:Hadoop是一个适合海量数据的分布式存储和分布式计算的平台。Hadoop的由来Google爬取全球的网站,然后计算页面的PageRank要解决网站的问题:a:这些网站怎么存......
  • Java学习预科阶段
    一、什么是计算机概述Computer:全称电子计算机,俗称电脑。根据程序运行,自动、高速处理海量数据由硬件和软件组成包括台式计算机、笔记本计算机、大型计算机......
  • 博客粘贴图片自动上传到服务器(Java版)
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-......
  • java compair 自动变成1.5
    在idea中使用maven项目时,每次更新或重新载入maven项目后,项目或模块依赖的JDK都会重新变成JDK1.5,就算手动设置maven项目或者模块为JDK1.8,刷新后还是会变为JDK1.5。具体表现......