package com.zhen.hdfs;

import java.io.IOException;
import java.io.InputStream;
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.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils; /**
* @author FengZhen
* @date 2018年8月12日
*
*/
public class FileSystemReadAPI { /**
* FileSystem实例有几个静态工厂方法
* public static FileSystem get(Configuration conf) throws IOException
* return get(getDefaultUri(conf), conf);
* 返回的是默认文件系统(在 conf/core-site.xml中指定的,如果没有指定,则使用默认的本地文件系统)
* public static FileSystem get(URI uri, Configuration conf) throws IOException
* 通过给定的URI方案和权限来确定要使用的文件系统,如果给定URI中没有指定方案,则返回默认文件系统
* public static FileSystem get(final URI uri, final Configuration conf, final String user) throws IOException, InterruptedException
* 作为给定用户来访问文件系统,对安全来说是至关重要的
*
* 在某些情况下,可能希望获取本地文件系统的运行实例,此时可以使用getLocal()方法
*/
public static void main(String[] args) {
String uri = "hdfs://fz/user/hdfs/MapReduce/data/test.txt";
String uri1 = "hdfs://fz/user/hdfs/MapReduce/data/test1.txt";
String user = "hadoop";
//getByUri(uri);
//getByUriAndUser(uri, user);
seekDoubleCat(uri1);
} public static void getByUri(String uri) {
Configuration conf = new Configuration();
InputStream inputStream = null;
try {
FileSystem fileSystem = FileSystem.get(new URI(uri), conf);
inputStream = fileSystem.open(new Path(uri));
IOUtils.copyBytes(inputStream, System.out, 4096, false);
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(inputStream);
}
} public static void getByUriAndUser(String uri, String user) {
Configuration conf = new Configuration();
InputStream inputStream = null;
try {
FileSystem fileSystem = FileSystem.get(new URI(uri), conf, user);
inputStream = fileSystem.open(new Path(uri));
IOUtils.copyBytes(inputStream, System.out, 4096, false);
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(inputStream);
}
} /**
* 实际上,FileSystem对象中的open方法返回的是FSDataInputStream对象,而不是标准的java.io类对象。这个类是继承了java.io.DataInputStream接口的一个特殊类,并支持随机访问,由此可以从流的任意位置读取数据
* public class FSDataInputStream extends DataInputStream
implements Seekable, PositionedReadable,
ByteBufferReadable, HasFileDescriptor, CanSetDropBehind, CanSetReadahead,
HasEnhancedByteBufferAccess {}
*/
/**
* Seekable接口支持在文件中找到指定位置,并提供一个查询当前位置相对于文件其实位置偏移量(getPos())的查询方法
* public interface Seekable {
void seek(long pos) throws IOException;
long getPos() throws IOException;
@InterfaceAudience.Private
boolean seekToNewSource(long targetPos) throws IOException;
}
调用seek方法来定位大于文件长度的位置会引发IOException异常。与java.io.InputStream的skip不同,seek可以移动到文件中任意一个绝对位置,skip则只能相对于当前位置定位到另一个新位置。、
注意,seek方法是一个相对高开销的操作,需要慎重使用
*/
public static void seekDoubleCat(String uri) {
Configuration conf = new Configuration();
FSDataInputStream inputStream = null;
try {
FileSystem fileSystem = FileSystem.get(new URI(uri), conf);
inputStream = fileSystem.open(new Path(uri));
IOUtils.copyBytes(inputStream, System.out, 4096, false);
System.out.println("-------------------end-----------------");
inputStream.seek(1);//索引
IOUtils.copyBytes(inputStream, System.out, 4096, false);
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(inputStream);
}
}
}

  

HDFS-文件读取API的更多相关文章

  1. HDFS文件读取详解

    客户端与HDFS文件读取 创建HDFS文件系统实例 FileSystem fs = FileSystem.get(new URI("hdfs://ns1"), new Config ...

  2. FileReader文件读取API

    :用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据. 1.FileReader接口的方法 Fi ...

  3. HDFS 文件读写过程

    HDFS 文件读写过程 HDFS 文件读取剖析 客户端通过调用FileSystem对象的open()来读取希望打开的文件.对于HDFS来说,这个对象是分布式文件系统的一个实例. Distributed ...

  4. 关于php文件读取的一些学习记录

    初学PHP的时候使用了一些文件读取API,但是没有真正弄清楚各API的区别以及差异,于是找了一篇学习了一下,贴在这里,引用自IBM社区的一篇文章, 整体整理测试如下 <?php /** * Cr ...

  5. Hadoop基础-HDFS的读取与写入过程

    Hadoop基础-HDFS的读取与写入过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了了解客户端及与之交互的HDFS,NameNode和DataNode之间的数据流是什么样 ...

  6. 深度学习_1_Tensorflow_2_数据_文件读取

    tensorflow 数据读取 队列和线程 文件读取, 图片处理 问题:大文件读取,读取速度, 在tensorflow中真正的多线程 子线程读取数据 向队列放数据(如每次100个),主线程学习,不用全 ...

  7. 读取hdfs文件之后repartition 避免数据倾斜

    场景一: api:  textFile("hfds://....").map((key,value)).reduceByKey(...).map(实际的业务计算逻辑) 场景:hdf ...

  8. Spark读取HDFS文件,文件格式为GB2312,转换为UTF-8

    package iie.udps.example.operator.spark; import scala.Tuple2; import org.apache.hadoop.conf.Configur ...

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

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

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

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

随机推荐

  1. codeblocks在进行多线程出现phread问题

    undefined reference to 'pthread_create' 出现这个错误是因为编译默认不会链接进程库. 可以选择用gcc进行编译 加上-lpthread 比如:gcc exampl ...

  2. 【BZOJ2140】稳定婚姻 Tarjan

    [BZOJ2140]稳定婚姻 Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. ...

  3. EasyPlayer-RTSP-Android安卓播放器播放RTSP延迟优化策略,极低延时!

    EasyPlayer-RTSP-Android安卓RTSP播放器低延迟播放延时优化策略 EasyPlayer-RTSP-Android播放器是一款专门针对RTSP协议进行过优化的流媒体播放器,其中我们 ...

  4. 基于HttpClient、Jsoup的爬虫获取指定网页内容

    不断尝试,发现越来越多有趣的东西,刚刚接触Jsoup感觉比正则表达式用起来方便,但也有局限只适用HTML的解析. 不能尝试运用到四则运算中(工作室刚开始联系的小程序). 在原来写的HttpClient ...

  5. mac安装yarn , MAC升级Nodejs

    Npm i -g yarn 第一步,先查看本机node.js版本: `$ node -v` 第二步,清除node.js的cache: `$ sudo npm cache clean -f` 第三步,安 ...

  6. SQL2008 R2直接恢复 mdf后缀数据文件

    数据库默认存储地址为   C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA  ,那么我首先把朋友给的,md ...

  7. Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)

    什么是依赖注入 在以前的java开发中,某个类中需要依赖其它类的方法时,通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,spring提出了依赖注入的思想,即依赖类不由程序员 ...

  8. Kafka的架构

    1.Kafka整体架构    一个典型的Kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU.memory等),若干broker(Kafka ...

  9. LeetCode-11-6

    1.  Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  10. Win10在右键菜单添加“在此处打开命令窗口”设置项

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令 ...