HDFS API基本操作

对HDFS API基本操作都是通过 org.apache.hadoop.fs.FileSystem类进行的,以下是一些常见的操作:

package HdfsAPI;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;

import junit.framework.TestCase;

public class HDFSAPI extends TestCase{
    public static String hdfsUrl = "hdfs://master:8020";
    //创建文件夹
    @Test
    public void testHDFSmkdir() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        Path path = new Path("/liguodong/hdfs");
        fs.mkdirs(path);
    }

    //创建文件
    @Test
    public void testHDFSmkFile() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        Path path = new Path("/liguodong/hdfs/liguodong.txt");
        FSDataOutputStream fdos = fs.create(path);
        fdos.write("hello hadoop".getBytes());
    }
    //重命名
    @Test
    public void testHDFSRenameFile() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        Path path = new Path("/liguodong/hdfs/liguodong.txt");
        Path Renamepath = new Path("/liguodong/hdfs/love.txt");
        System.out.println(fs.rename(path, Renamepath));
    }
    //上传一个本地文件
    @Test
    public void testHDFSPutLocalFile1() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        //由于在windows上面调试,所以选择的是windows的目录,
        //如果在Linxu,需要Linux目录。
        Path srcpath = new Path("g:/liguodong.txt");
        Path destpath = new Path("/liguodong/hdfs");
        fs.copyFromLocalFile(srcpath, destpath);
    }

    @Test
    public void testHDFSPutLocalFile2() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        //由于在windows上面调试,所以选择的是windows的目录,
        //如果在Linxu,需要Linux目录。
        String srcpath ="g:/oncemore.txt";
        Path destpath = new Path("/liguodong/hdfs/kkk.txt");
        InputStream is = new BufferedInputStream(
                new FileInputStream(new File(srcpath)));
        FSDataOutputStream fdos = fs.create(destpath);
        IOUtils.copyBytes(is, fdos, 4094);
    }

    //查看某个文件夹下面的所有文件
    @Test
    public void testHDFSListFiles() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        Path path = new Path("/liguodong/hdfs");
        FileStatus[] files = fs.listStatus(path);

        for (FileStatus file : files) {
            System.out.println(file.getPath().toString());
        }
    }

    //查看某个文件的数据块信息
    @Test
    public void testHDFSGetBlockInfo() throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
        Path path = new Path("/liguodong/hdfs/kkk.txt");
        FileStatus filestatus = fs.getFileStatus(path);
        BlockLocation[] blkLoc = fs.getFileBlockLocations
                (filestatus, 0, filestatus.getLen());
        for (BlockLocation loc : blkLoc) {
            for (int i = 0; i < loc.getHosts().length; i++) {
                //获取数据块在哪些主机上
                System.out.println(loc.getHosts()[i]);//获取文件块的主机名
                //由于这个文件只有一个块,所以输出结果为:slave2、slave1、slave5
            }
        }
    }
}
时间: 2024-11-05 02:16:43

HDFS API基本操作的相关文章

hadoop hdfs API操作

hadoop的hdfs API的基本操作 简单的介绍 hadoop为我们提供了hdfs非常方便的shell命令(类似于Linux文件操作的命令),再者.hadoop还为我们提供hdfsAPI,使我们开发人员可以对hfds进行一些操作.如:copy文件(从本地到hdfs,从hdfs到本地).删除文件或者目录.读取文件的内容.看文件的相关信息.列出文件的所有子目录,在文件后面追加内容.(注意:hdfs不支持文件中某一行的修改,只允许追加内容到文件的后面). 首先我初始化hdfs,最后将hdfs关闭:

HDFS API的java代码分析与实例

HDFS API的java代码分析与实例 1.HDFS常用的方法,我已经写好,我们看一下 // Create()方法,直接在HDFS中写入一个新的文件,path为写入路径,text为写入的文本内容 public static void  Create(String path,String text) throws IOException {             Configuration conf=new Configuration();                  conf.set(

KVM API基本操作

KVM API基本操作 KVM API基本操作 安装 命令行 列出虚拟机 查看虚拟机信息 启动停止虚拟机 暂停继续虚拟机 保存恢复虚拟机 安装 sudo yum install libvirt.x86_64 命令行 连接KVM $ virsh -c qemu+ssh://[email protected]<host>/system 列出虚拟机 virsh # list virsh # list --all 查看虚拟机信息 virsh # dominfo <vm> 启动/停止虚拟机

HDFS API的Helloworld

1.源码 import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; import java.io.InputStream; import java.net.URL; /**  * Example 3.1  */ public class URLCat {     static {         URL.setURLStreamHandlerFactory(new FsU

HBase-java api 基本操作

使用的是完全分布式,详细信息为: 操作的Java 代码(抄的别人的) 1 package org.admln.hbase; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.apache.hadoop.conf.Configuration; 7 import org.apache.hadoop.hbase.HBaseConfiguration; 8 import org.apache.hadoop.hb

【HDFS API编程】jUnit封装-改写创建文件夹

首先:什么是jUnit  回顾: https://www.cnblogs.com/Liuyt-61/p/10374732.html 上一节我们知道: /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是HDFS API的操作了 */ 回顾:https://www.cnblogs.com/Liuyt-61/p/10737466.html 先上代码: 1 public class H

hadoop: hdfs API示例

利用hdfs的api,可以实现向hdfs的文件.目录读写,利用这一套API可以设计一个简易的山寨版云盘,见下图: 为了方便操作,将常用的文件读写操作封装了一个工具类: 1 package yjmyzz; 2 3 import org.apache.hadoop.conf.Configuration; 4 import org.apache.hadoop.fs.FSDataOutputStream; 5 import org.apache.hadoop.fs.FileSystem; 6 impor

HDFS API 学习:几个常用的API

1.Hadoop-1.2.1 API 文档:http://hadoop.apache.org/docs/r1.2.1/api/ 2.几个API: create(Path f) :Opens an FSDataOutputStream at the indicated Path. copyFromLocalFile(Path src, Path dst) :The src file is on the local disk. create(Path f) :Opens an FSDataOutpu

干货--安装eclipse-hadoop-plugin插件及HDFS API编程两个遇到的重要错误的解决

在Windows的eclipse上写hdfs的API程序,都会遇到两个错误,在网上查了很多资料,都没有解决的办法,经过了很多时间的研究,终于把这个问题解决了 错误是 1.java.io.IOException :HADOOP_HOME or hadoop.home.dir are not set. 2.java.io.IOException:could not locate executable D:\hadoop-2.6.4\hadoop-2.6.4\bin/winutils.exe in t