对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
}
}
}
}

HDFS API基本操作的更多相关文章

  1. hadoop: hdfs API示例

    利用hdfs的api,可以实现向hdfs的文件.目录读写,利用这一套API可以设计一个简易的山寨版云盘,见下图: 为了方便操作,将常用的文件读写操作封装了一个工具类: import org.apach ...

  2. 【HDFS API编程】从本地拷贝文件,从本地拷贝大文件,拷贝HDFS文件到本地

    接着之前继续API操作的学习 CopyFromLocalFile: 顾名思义,从本地文件拷贝 /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)create Configur ...

  3. 【HDFS API编程】查看HDFS文件内容、创建文件并写入内容、更改文件名

    首先,重点重复重复再重复: /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 ...

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

    首先:什么是jUnit  回顾: https://www.cnblogs.com/Liuyt-61/p/10374732.html 上一节我们知道: /** * 使用Java API操作HDFS文件系 ...

  5. 【HDFS API编程】第一个应用程序的开发-创建文件夹

    /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 HDFS API的操作了*/ ...

  6. 【HDFS API编程】开发环境搭建

    使用HDFS API的方式来操作HDFS文件系统 IDEA Java 使用Maven来管理项目 先打开IDEA,New Project 创建GAV然后next 默认使用的有idea内置的Maven,可 ...

  7. Hadoop学习之路(十)HDFS API的使用

    HDFS API的高级编程 HDFS的API就两个:FileSystem 和Configuration 1.文件的上传和下载 package com.ghgj.hdfs.api; import org ...

  8. [转] Hadoop入门系列(一)Window环境下搭建hadoop和hdfs的基本操作

    转自:https://blog.csdn.net/qq_32938169/article/details/80209083 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载 ...

  9. Hadoop(五):HDFS的JAVA API基本操作

    HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...

随机推荐

  1. Linux文档时间戳查看和修改——stat

    查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20  Blocks: 8  IO Block: 4096  regular fileDevice: 801h/2 ...

  2. hdu 1849(巴什博弈)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. 线性SVM的推导

    线性SVM算法的一般过程 线性SVM的推导 超平面方程 SVM是用来分类的.给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的.比如,二维数据的超平面是 ...

  4. [笔记] 几个前端bug的解决方案

    jQuery UI下被拖动的元素上飘 症状出现在几乎所有浏览器里.使用 1.10.x 的draggable,在滚动栏下移(即非处于页面顶部)的时候拖动draggable的元素,它会向上跳一段距离.解决 ...

  5. scala windows 安装

    下载 https://downloads.lightbend.com/scala/2.11.11/scala-2.11.11.msi 第一步:设置 右击我的电脑,单击"属性",进入 ...

  6. git团队开发

    用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...

  7. TeX中的引号(UVa272)

    问题: 在Tex中,做双引号的" `` ",右双引号是"  '' "(两个回车左边的).输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式. 样例输入: ...

  8. day1 str字符串常用方法

    字符串是编程中常用的类型,字符型在内存中是以单个形式存储的,比如name = "alex",在内存中存储的形式为["a","l"," ...

  9. 面试题12:打印1到最大的n位数(大数问题)

    面试题是关于n位整数并且没有限定n的取值范围,或者是输入任意大小的整数,那么这个题目就很可能需要考虑大数问题.字符串是一个简单的.有效的表示大数的方法 这题比较难,用递归表达全排列,数字每一位都可能是 ...

  10. <<Javascript Patterns>>阅读笔记 -- 第2章 基本技巧(二)

    关于for-in循环 循环数据时, 强烈不推荐使用for-in循环.因为当Array对象被扩展后, 再用for-in循环遍历数据会导致逻辑上的错误, 举例说明: var arr = ['a', 'b' ...