一、从hdfs下载文件到windows本地:

package com.css.hdfs01;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; /**
* 从hdfs下载文件到windows本地
*
* 注意:
* 1.需要配置hadoop环境变量
* 2.需要编译好的winutils包
*/
public class HdfsClientDemo02 {
public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException {
// 1.加载配置
Configuration conf = new Configuration();
// 2.设置副本数
conf.set("dfs.replication", "2");
// 3.设置块大小
conf.set("dfs.blocksize", "64m");
// 4.构造客户端
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.146.132:9000"), conf, "root");
// 5.hdfs数据下载到windows本地
fs.copyToLocalFile(new Path("/hdfs-site.xml"), new Path("c:/"));
// 6.关闭资源
fs.close();
}
}

二、hdfs常用的API:

package com.css.hdfs02;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test; /**
* hdfs常用的API
*/
public class HdfsClientTest { FileSystem fs =null; @Before
public void init() throws IOException, InterruptedException, URISyntaxException {
// 1.加载配置
Configuration conf = new Configuration();
// 2.设置副本数
conf.set("dfs.replication", "2");
// 3.设置块大小
conf.set("dfs.blocksize", "64m");
// 4.构造客户端
fs = FileSystem.get(new URI("hdfs://192.168.146.132:9000/"), conf, "root");
} /**
* 在hdfs中创建文件夹
* hdfs dfs -mkdir /文件夹名
*/
@Test
public void hdfsMkdir() throws IllegalArgumentException, IOException{
// 1.调用创建文件夹方法
fs.mkdirs(new Path("/hello"));
// 2.关闭资源
fs.close();
} /**
* 在hdfs中 移动/修改文件
* hdfs dfs -mv /hdfs路径 /hdfs路径
* hdfs dfs -cp /hdfs路径 /hdfs路径
*/
@Test
public void hdfsRename() throws IllegalArgumentException, IOException{
// 1.调用移动修改文件方法
fs.rename(new Path("/aa.txt"), new Path("/hello/aa.txt"));
// 2.关闭资源
fs.close();
} /**
* 在hdfs中 删除文件/文件夹
* hdfs dfs -rm /文件名
* hdfs dfs -rm -r /文件夹名
*/
@Test
public void hdfsRm() throws IllegalArgumentException, IOException{
// 1.调用删除文件方法
// 下面的一个参数的方法已弃用
// fs.delete(new Path("/aaaa.txt"));
// 参数1:要删除的路径 参数2:是否递归删除
fs.delete(new Path("/aaa111.txt"), true);
// 2.关闭资源
fs.close();
} /**
* 查询hdfs下指定的目录信息
*/
@Test
public void hdfsLs() throws IllegalArgumentException, IOException{
// 1.调用方法,返回远程迭代器
RemoteIterator<LocatedFileStatus> iter = fs.listFiles(new Path("/"), true);
// 2.取迭代器数据
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("===============================");
}
// 3.关闭资源
fs.close();
} /**
* 判断文件还是文件夹
*/
@Test
public void hdfsFile() throws IllegalArgumentException, IOException{
// 1.展示状态信息
FileStatus[] listStatus = fs.listStatus(new Path("/"));
// 2.遍历所有文件
for(FileStatus ls:listStatus){
if (ls.isFile()) {
// 文件
System.out.println("文件-----f-----" + ls.getPath().getName());
}else {
// 文件夹
System.out.println("文件夹-----d-----" + ls.getPath().getName());
}
}
}
}

三、hdfs读写文件:

package com.css.hdfs03;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test; /**
* hdfs读写文件
*/
public class ReadData { FileSystem fs =null;
@Before
public void init() throws IOException, InterruptedException, URISyntaxException {
// 1.加载配置
Configuration conf = new Configuration();
// 2.构造客户端
fs = FileSystem.get(new URI("hdfs://192.168.146.132:9000/"), conf, "root");
} /**
* 读数据方式一
*/
@Test
public void testReadData1() throws IllegalArgumentException, IOException{
// 1.拿到流
FSDataInputStream in = fs.open(new Path("/a.txt"));
byte[] buf = new byte[1024];
in.read(buf);
System.out.println(new String(buf));
// 2.关闭资源
in.close();
fs.close();
} /**
* 读数据方式二
*/
@Test
public void testReadData2() throws IllegalArgumentException, IOException{
// 1.拿到流
FSDataInputStream in = fs.open(new Path("/hdfs-site.xml"));
// 2.缓冲流
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
// 3.按行读取
String line = null;
// 4.读数据
while ((line = br.readLine()) != null) {
System.out.println(line);
}
// 5.关闭资源
br.close();
in.close();
fs.close();
} /**
* 读取hdfs中指定偏移量
*/
@Test
public void testRandomRead() throws IllegalArgumentException, IOException{
// 1.拿到流
FSDataInputStream in = fs.open(new Path("/hdfs-site.xml"));
// 2.移动文件读取指针到指定位置
in.seek(14);
byte[] b = new byte[5];
// 3.从指针位置开始读取数组b的长度个字节
in.read(b);
System.out.println(new String(b));
// 4.关闭资源
in.close();
} /**
* 在hdfs中写数据方式一
*/
@Test
public void testWriteData() throws IllegalArgumentException, IOException{
// 1.输出流
FSDataOutputStream out = fs.create(new Path("/windows.txt"), false);
// 2.输入流
FileInputStream in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\1012.txt");
byte[] buf = new byte[1024];
int read = 0;
while ((read = in.read(buf)) != -1) {
out.write(buf, 0, read);
}
// 3.关闭资源
in.close();
out.close();
fs.close();
} /**
* 在hdfs中写数据方式二
*/
@Test
public void testWriteData1() throws IllegalArgumentException, IOException{
// 1.创建输出流
FSDataOutputStream out = fs.create(new Path("/love"));
// 2.写数据
out.write("Areyouokmylove".getBytes());
// 3.关闭资源
IOUtils.closeStream(out);
fs.close();
}
}

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

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

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

  2. HDFS中JAVA API的使用

    HDFS中JAVA API的使用   HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...

  3. HDFS的java api操作

    hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...

  4. hdfs基本操作

    hdfs基本操作 1.查询命令 hadoop dfs -ls /   查询/目录下的所有文件和文件夹 hadoop dfs -ls -R 以递归的方式查询/目录下的所有文件 2.创建文件夹 hadoo ...

  5. HDFS的Java API

    HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...

  6. Hadoop(四)HDFS的高级API操作

    一 HDFS客户端环境准备 1.1 jar包准备 1)解压hadoop-2.7.6.tar.gz到非中文目录 2)进入share文件夹,查找所有jar包,并把jar包拷贝到_lib文件夹下 3)在全部 ...

  7. Hadoop之HDFS(三)HDFS的JAVA API操作

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

  8. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  9. Sample: Write And Read data from HDFS with java API

    HDFS: hadoop distributed file system 它抽象了整个集群的存储资源,可以存放大文件. 文件采用分块存储复制的设计.块的默认大小是64M. 流式数据访问,一次写入(现支 ...

随机推荐

  1. jQuery新建HTML Element

    举个例: 创建一个<i>HelloWorld.</i> var italicText = $("<i></i>").text(&qu ...

  2. DOM节点的三个属性

    在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType :节点的类 ...

  3. poj3693(后缀数组)

    http://poj.org/problem?id=3693 题意:给出一串字符,需要求这串字符中的最长重复子串,要是有多个,输出字典序最小的......... 我自己的一些想法:这个思路我一开始倒是 ...

  4. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...

  5. php代码检查

    最近写php,几个同事都是没写过c的,经常写的变量没有定义,而php没有编译,错误无法发现. 我们现在用的是NetBeans,好在其提供了语法检测,如下图,让编辑器强制显示我错误

  6. RDD缓存学习

    首先实现rdd缓存 准备了500M的数据 10份,每份 100万条,存在hdfs 中通过sc.textFile方法读取 val rdd1 = sc.textFile("hdfs://mini ...

  7. PHP之PHP文件引用详解

    HP的文件引用涉及到四个函数: 文件引用 1.include()2.include_once()3.require()4.require_once() 这四个函数常常会给PHP初学者造成困扰,总的来说 ...

  8. linux 测试工具

    最近在寻找linux的测试工具,试用了一些.记录如下. memtester 内存测试工具,通过对内存进行读写进行测试.可以对同一块空间进行多次的读写. 源码分析 http://www.cnblogs. ...

  9. Spring Framework 官方文档学习(二)之IoC容器与bean lifecycle

    到目前为止,已经看了一百页.再次感慨下,如果想使用Spring,那可以看视频或者找例子,但如果想深入理解Spring,最好还是看官方文档. 原计划是把一些基本接口的功能.层次以及彼此的关系罗列一下.同 ...

  10. Think Python: How to Think Like a Computer Scientist

    Think Python: How to Think Like a Computer Scientist:http://greenteapress.com/thinkpython/html/index ...