一、从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. androidStudio简便安装

    最近在公司由eclipse换为androidstudio,说句实话,androidstudio还是蛮好用的,但是自己刚刚安装的时候遇到很多的问题,问了度娘,各种说法都有,还是捣鼓不得,于是自己尝试,弄 ...

  2. 跟着百度学习php之ThinkPHP的运行流程-2

    Thinkphp为了提高编译的效率,第一次运行的时候thinkphp会把文件全部编译到temp目录下的~runtime.php文件,在第二次运行的时候会直接读取这个文件.所以我们在线下自己写代码测试的 ...

  3. C++ 匿名对象初始化新对象

    //c++中匿名对象初始化新对象 #include<iostream> using namespace std; class Point{ public: Point(){ cout &l ...

  4. 通过公网IP主机建立ssh隧道

    环境描述 hostA: 有公网IP的linux主机 hostB: 私有路由器后端无公网IPlinux主机,能够ssh连接到hostA hostC: 个人pc机 隧道创建步骤 step1 在hostB上 ...

  5. Appium移动自动化测试(一)--工具软件安装

    Appium移动自动化测试(一)--工具软件安装 详情参考-- http://www.cnblogs.com/fnng/p/4552438.html 第一节  安装node.js Appium 官方网 ...

  6. 说说C#的async和await

    https://blog.csdn.net/tianmuxia/article/details/17675681/ C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步 ...

  7. Linux命令之乐--nmap

    Nmap是一款非常强大的实用工具,可用于:检测活在网络上的主机(主机发现)检测主机上开放的端口(端口发现或枚举)检测到相应的端口(服务发现)的软件和版本检测操作系统,硬件地址,以及软件版本检测脆弱性的 ...

  8. java基础---->java中nio的使用(一)

    JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的.面向块的 I/O.今天我们就简单的学习一下nio的知识.我笑,便面如春花,定是能感动人的,任他是谁. nio的简 ...

  9. input的disable和readonly

    在设计网页时,有时需要将输入框设置为只读状态,即其中的内容不可编辑,实现这种设计的方法有两种:使用input的disable和readonly两个属性. 先来看下二者的区别: <input ty ...

  10. [黑金原创教程] FPGA那些事儿《设计篇 II》- 图像处理前夕·续

    简介 一本为入门图像处理的入门书,另外还教你徒手搭建平台(片上系统),内容请看目录. 注意 为了达到最好的实验的结果,请准备以下硬件. AX301开发板, OV7670摄像模块, VGA接口显示器, ...