hdfs文件流操作方法一:

package it.dawn.HDFSPra;

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.zookeeper.common.IOUtils;
import org.junit.Before;
import org.junit.Test; /**
* @version 1.0
* @author Dawn
* @date 2019年4月28日22:28:53
* @return hdfs的读写操作。顺便练习一下java的IO操作
*/
public class HdfsReadData02 { public static FileSystem fs=null;
public static String hdfs="hdfs://bigdata11:9000"; @Before
public void init() throws IOException, InterruptedException, URISyntaxException {
//其实这一句我也不是很清楚。不加这个有个异常,我看起来感觉很恶心。不过没有影响。大家加不加都没问题
System.setProperty("hadoop.home.dir", "E:\\hadoop2.7.3\\hadoop-2.7.3");
//1 加载配置
Configuration conf=new Configuration();
//2 构造客服端
fs=FileSystem.get(new URI(hdfs), conf, "root");
} //读数据方式1
@Test
public void testReadData1() throws IllegalArgumentException, IOException {
//1 拿到流
//其实和这个没啥差别fs.copyToLocalFile(new Path("/xxx.txt"), new Path("f:/"));
FSDataInputStream in=fs.open(new Path("/xxx.txt")); byte[] buf=new byte[1024]; in.read(buf); //打印出来
System.out.println(new String(buf)); //记得关闭流
in.close();
fs.close();
} //读数据方式2 (加了一个缓冲流而已)
@Test
public void testReadData2() throws IllegalArgumentException, IOException {
//1 拿到流
FSDataInputStream in=fs.open(new Path("/xxx.txt")); //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("/xxx.txt")); in.seek(3); byte[] b=new byte[5]; in.read(b); System.out.println(new String(b)); in.close();
fs.close();
} /**
* 在hdfs中写数据 直接对存在的文件进行写操作
* fs.creat(hdfsFilename,false)
* @param Path f
* @param boolean overwrite
*/
@Test
public void testWriteData() throws IllegalArgumentException, IOException {
//拿到输出流
FSDataOutputStream out=fs.create(new Path("/dawn.txt"),false);//第二个参数。是否覆盖 //2.输入流
FileInputStream in=new FileInputStream("f:/temp/a.txt");//其实我觉得new一个File好一点 byte[] buf=new byte[1024]; int read=0; while((read=in.read(buf)) != -1) { //the total number of bytes read into the buffer, or -1 if there is no more data because the end of the file has been reached. out.write(buf,0,read);
} in.close();
out.close();
fs.close();
} /*
* 在hdfs中写数据 写一个新的数据
*/ @Test
public void testWriteData1() throws IllegalArgumentException, IOException {
//1.创建输出流
FSDataOutputStream out=fs.create(new Path("/haha")); //2.创建输入流
// FileInputStream in=new FileInputStream(new File("f:/temp/data.txt"));//没啥用 //3.写数据
out.write("dawn will success".getBytes()); //4.关闭资源
IOUtils.closeStream(out);
fs.close();
} }                       hdfs文件流操作方法二:
package it.dawn.HDFSPra;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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; /**
* @version 1.0
* @author Dawn
* @date 2019年4月28日23:21:03
* @return 使用IOUtills更为方便
*/
public class HdfsIOUtilsTest { public static String hdfs="hdfs://bigdata11:9000"; public static FileSystem fs=null; public static Configuration conf=null; @Before
public void init() throws IOException, InterruptedException, URISyntaxException { conf =new Configuration();
fs=FileSystem.get(new URI(hdfs), conf, "root");
} /*
* 文件上传HDFS
*
*/
@Test
public void putFileToHDFS() throws IllegalArgumentException, IOException {
//1.获取输入流
FileInputStream fis=new FileInputStream(new File("f:/temp/lol.txt")); //2获取输出流
FSDataOutputStream fos=fs.create(new Path("/dawn/n.txt")); //3 流的拷贝
IOUtils.copyBytes(fis, fos, conf); //4.关闭资源
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
} /*
* 文件下载HDFS
*/
@Test
public void getFileFromHDFS() throws IllegalArgumentException, IOException {
//1.获取输入流
FSDataInputStream fis=fs.open(new Path("/xxx.txt")); //2.获取输出流
FileOutputStream fos=new FileOutputStream("f:/temp/lala.txt"); //3.流的对拷
IOUtils.copyBytes(fis, fos, conf); //4.关闭资源
IOUtils.closeStream(fos);
IOUtils.closeStream(fis);
} }

 

附上读写流程图


大数据学习之HDFS基本API操作(下)06的更多相关文章

  1. 大数据学习之HDFS基本API操作(上)06

    package it.dawn.HDFSPra; import java.io.FileNotFoundException; import java.io.IOException; import ja ...

  2. 大数据学习之HDFS基本命令操作05

    1)hdfs的客户端 1.网页形式->测试用 http://192.168.40.11:50070/dfshealth.html#tab-overview 2.命令行形式->测试用 3.企 ...

  3. 大数据学习之hdfs集群安装部署04

    1-> 集群的准备工作 1)关闭防火墙(进行远程连接) systemctl stop firewalld systemctl -disable firewalld 2)永久修改设置主机名 vi ...

  4. 大数据学习笔记——HDFS写入过程源码分析(1)

    HDFS写入过程方法调用逻辑 & 源码注释解读 前一篇介绍HDFS模块的博客中,我们重点从实践角度介绍了各种API如何使用以及IDEA的基本安装和配置步骤,而从这一篇开始,将会正式整理HDFS ...

  5. 大数据学习笔记——HDFS写入过程源码分析(2)

    HDFS写入过程注释解读 & 源码分析 此篇博客承接上一篇未讲完的内容,将会着重分析一下在Namenode获取到元数据后,具体是如何向datanode节点写入真实的数据的 1. 框架图展示 在 ...

  6. 大数据学习笔记——HDFS理论知识之编辑日志与镜像文件

    HDFS文件系统——编辑日志和镜像文件详细介绍 我们知道,启动Hadoop之后,在主节点下会产生Namenode,即名称节点进程,该节点的目录下会保存一份元数据,用来记录文件的索引,而在从节点上即Da ...

  7. 大数据学习之HDFS的工作机制07

    1:namenode+secondaryNameNode工作机制 2:datanode工作机制 3:HDFS中的通信(代理对象RPC) 下面用代码来实现基本的原理 1:服务端代码 package it ...

  8. 大数据学习笔记——Hadoop编程实战之HDFS

    HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...

  9. 大数据学习路线,来qun里分享干货,

    一.Linux lucene: 全文检索引擎的架构 solr: 基于lucene的全文搜索服务器,实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面. 推荐一个大数据学习群 ...

随机推荐

  1. 20175209 实验二《Java面向对象程序设计》实验报告

    20175209 实验二<Java面向对象程序设计>实验报告 一.实验前期准备 了解三种代码 伪代码 产品代码 测试代码 我们先写伪代码,伪代码 从意图层面来解决问题: 有了伪代码 我们用 ...

  2. myeclipse使用maven整合ssh配置

    最近写项目,由于公司需求,使用myeclispe来开发maven项目,关于maven就不再介绍,无论是jar包管理功能,还是作为版本构建工具,优点自然是很多,下面先贴出所需要的配置文件. maven所 ...

  3. Django web编程3 -- 创建用户账户

    我们将建立一个用户注册和身份验证系统,让用户能够注册账户,进而登录和注销.我们将创建一个新的应用程序,其中包含与处理用户账户相关的所有功能.我们还将对模型Topic 稍做修改,让每个主题都归属于特定用 ...

  4. axios 或 ajax 请求文件

    axios 或 ajax 请求文件 axios({ url: path + '/monitor/exportPicture' + '?access_token=' + getToken(), meth ...

  5. 34 springboot项目之间依赖导致bean 无法加载问题

    方式一(OK) 模块A引入模块B ,但是模块B的bean一直注入不进来 原因: A模块的Application是在com.xx.xx包下,那么势必只能扫描到这个包下的bean, B模块的Applica ...

  6. [译]Async/Await - Best Practices in Asynchronous Programming

    原文 避免async void async void异步方法只有一个目的:使得event handler异步可行,也就是说async void只能用于event handler. async void ...

  7. Luogu P1082 同余方程(NOIP 2012) 题解报告

    题目传送门 [题目大意] 求关于x的同余方程 ax≡1(mod b)的最小整数解. [思路分析] 由同余方程的有关知识可得,ax≡1(mod b)可以化为ax+by=1,此方程有解当且仅当gcd(a, ...

  8. SpringMVC+Apache Shiro+JPA(hibernate)案例教学(三)给Shiro登录验证加上验证码

    序: 给Shiro加入验证码,有多种方式,当然你也可以通过继承修改FormAuthenticationFilter类,通过Shiro去验证验证码.具体实现请百度: 应用Shiro到Web Applic ...

  9. twfont

    module game { /** *Created by 渔歌烟火 on 2018/3/28. * 字体缓动动画 */ export class LabelEffect { private stat ...

  10. day 20 - 1 序列化模块,模块的导入

    序列化模块 首先我们来看一个序列:'sdfs45sfsgerg4454287789sfsf&*0' 序列 —— 就是字符串序列化 —— 从数据类型 --> 字符串的过程反序列化 —— 从 ...