Hadoop HDFS (3) JAVA訪问HDFS
这个类是用来跟Hadoop的文件系统进行交互的。尽管我们这里主要是针对HDFS。可是我们还是应该让我们的代码仅仅使用抽象类FileSystem。这样我们的代码就能够跟不论什么一个Hadoop的文件系统交互了。在写測试代码时,我们能够用本地文件系统測试,部署时使用HDFS。仅仅需配置一下,不须要改动代码了。
用Hadoop URL来读取HDFS里的文件
InputStream in = null;
try {in = new URL("hdfs://host/path").openStream();//操作输入流in。能够读取到文件的内容
} finally {IOUtils.closeStream(in);
}
import java.io.InputStream;
import java.net.URL;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;public class URLCat {static {URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());}public static void main(String[] args) throws Exception {InputStream in = null;try { in = new URL(args[0]).openStream(); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); }}
}
用FileSystem(org.apache.hadoop.fs.FileSystem)类来读取HDFS里的文件
public static FileSystem get(Configuration conf) throws IOException;
public static FileSystem get(URI uri, Configuration conf) throws IOException;
public static FileSystem get(final URI uri, final Configuration conf, final String user) throws IOException, InterruptedException;
public static LocalFileSystem getLocal(Configuration conf) throws IOException;
public FSDataInputStream open(Path f) throws IOException;
public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException;
import java.net.URI;
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;
public class FileSystemCat {public static void main(String[] args) throws Exception {String uri = args[0];Configuration conf = new Configuration();FileSystem fs = FileSystem.get(URI.create(uri), conf);//System.out.println(fs.getClass().getName()); //这里能够看到得到的实例是DistributedFileSystem,由于core-site.xml里配的是hdfsFSDataInputStream in = null;try {in = fs.open(new Path(uri));IOUtils.copyBytes(in, System.out, 4096, false);} finally {IOUtils.closeStream(in);}}
}
in.seek(0);
IOUtils.copyBytes(in, System.out, 4096, false);
public int read(long position, byte[] buffer, int offset, int length) throws IOException;
public void readFully(long position, byte[] buffer, int offset, int length) throws IOException;
public void readFully(long position, byte[] buffer) throws IOException;
用FileSystem类来向HDFS里写文件
public FSDataOutputStream create(Path f) throws IOException;
public FSDataOutputStream create(Path f, Progressable progress) throws IOException;
public interface Progressable {public void progress();
}
public FSDataOutputStream append(Path f) throws IOException;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;public class FileCopyWithProgress {public static void main(String[] args) throws Exception {String localSrc = args[0];String dst = args[1];InputStream in = new BufferedInputStream(new FileInputStream(localSrc));Configuration conf = new Configuration();FileSystem fs = FileSystem.get(URI.create(dst), conf);OutputStream out = fs.create(new Path(dst), new Progressable() {@Overridepublic void progress() {System.out.print(".");
// try {
// Thread.sleep(1000);
// } catch (Exception e) {
// e.printStackTrace();
// }}});IOUtils.copyBytes(in, out, 4096, true);System.out.println();System.out.println("end.");}
}
public long getPos() throws IOException;
创建文件夹
查询文件元信息:FileStatus(org.apache.hadoop.fs.FileStatus)
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class ShowFileStatusTest {private static final String SYSPROP_KEY = "test.build.data";/** MiniDFSCluster类在hadoop-hdfs-2.4.1-tests.jar中,是一个专门用于測试的in-process HDFS集群 */private MiniDFSCluster cluster;private FileSystem fs;@Beforepublic void setUp() throws IOException {Configuration conf = new Configuration();String sysprop = System.getProperty(SYSPROP_KEY);if (sysprop == null) {System.setProperty(SYSPROP_KEY, "/tmp");}cluster = new MiniDFSCluster(conf, 1, true, null);fs = cluster.getFileSystem();OutputStream out = fs.create(new Path("/dir/file"));out.write("content".getBytes("UTF-8"));out.close();}@Afterpublic void tearDown() throws IOException {if (fs != null) {fs.close();}if (cluster != null) {cluster.shutdown();}}@Test(expected = FileNotFoundException.class)public void throwsFileNotFoundForNonExistentFile() throws IOException {fs.getFileStatus(new Path("no-such-file"));}@Testpublic void fileStatusForFile() throws IOException {Path file = new Path("/dir/file");FileStatus stat = fs.getFileStatus(file);assertThat(stat.getPath().toUri().getPath(), is("/dir/file"));assertThat(stat.isDirectory(), is(false));assertThat(stat.getLen(), is(7L));assertTrue(stat.getModificationTime() <= System.currentTimeMillis());assertThat(stat.getReplication(), is((short)1));assertThat(stat.getBlockSize(), is(64 * 1024 * 1024L));assertThat(stat.getOwner(), is("norris"));assertThat(stat.getGroup(), is("supergroup"));assertThat(stat.getPermission().toString(), is("rw-r--r--"));}@Testpublic void fileStatusForDirectory() throws IOException {Path dir = new Path("/dir");FileStatus stat = fs.getFileStatus(dir);assertThat(stat.getPath().toUri().getPath(), is("/dir"));assertThat(stat.isDirectory(), is(true));assertThat(stat.getLen(), is(0L));assertTrue(stat.getModificationTime() <= System.currentTimeMillis());assertThat(stat.getReplication(), is((short)0));assertThat(stat.getBlockSize(), is(0L));assertThat(stat.getOwner(), is("norris"));assertThat(stat.getGroup(), is("supergroup"));assertThat(stat.getPermission().toString(), is("rwxr-xr-x"));}
}
Hadoop HDFS (3) JAVA訪问HDFS相关推荐
- Hadoop HDFS (3) JAVA訪问HDFS之二 文件分布式读写策略
先把上节未完毕的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法能够列出一 ...
- HDFS简单介绍及用C语言訪问HDFS接口操作实践
一.概述 近年来,大数据技术如火如荼,怎样存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有很广 ...
- hadoop安装以及Java API操作hdfs
因为工作需求,需要我这边实现一个大文件上传到HDFS的功能,因为本机无法连接公司内网的集群,无奈只好自己动手搭建一个单节点的Hadoop来满足工作的需求.下面简单介绍下安装过程中遇到的坑 我的机器是阿 ...
- 2021年大数据Hadoop(十二):HDFS的API操作
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS的API操作 ...
- Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS
场景 HDFS的访问方式之HDFS shell的常用命令: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119351218 在上 ...
- Hadoop大数据分布式文件系统hdfs的Java操作
搭建开发环境(eclipse,hdfs的jar包----hadoop的安装目录的share下) <dependency><groupId>org.apache.hadoop&l ...
- java hadoop api_Hadoop 系列HDFS的Java API( Java API介绍)
HDFS的Java API Java API介绍 将详细介绍HDFS Java API,一下节再演示更多应用. Java API 官网 如上图所示,Java API页面分为了三部分,左上角是包(Pac ...
- HDFS学习 Java连接hadoop
文章目录 建立连接获取hadoop下的文件信息 编写hadoop连接工具类 建立连接获取hadoop下的文件信息 import java.io.IOException; import java.net ...
- hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...
集群简单维护 查看日志 上篇我们搭建了集群,并且完成了hdfs的搭建,但在我的linux02和linux03上,发现一个问题,我启动了datanode之后,开始进程还在,一会就自己消失了,这是为什么呢 ...
最新文章
- html经过一段时间自动交换图像,Dreamweaver交换行为:实现图像交换
- 如何调用AngularJS指令中定义的方法?
- 可能是把Docker的概念讲的最清楚的一篇文章
- WPF usercontrol 自定义依赖属性
- Oracle --case、while、loop、for
- String类中IndexOf与SubString
- 使用OpenExif修改jpeg图片信息
- linux weblogic java_options_使用Linux脚本更新Weblogic部署的应用程序
- 死锁、EAT、页表、单双缓冲区典型题目及解析
- itext生成pdf间距_跳过APP打开pdf的烦恼,服务端直接将pdf转图片,别踩乱码之坑...
- 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)
- 5.中小型企业通用自动化运维架构 -- ELK
- Nginx Location 工作流程图及总结
- Spring Cloud Feign声明式服务调用 (学习总结)
- ROS学习(一)Ros 中使用kinect
- android 定时打开app,如何 定时启动你的Android App
- UVC驱动分析一条龙
- 【模拟电路】电极驱动H桥
- 解决win10下samba不能访问
- LaTeX插图命令使用教程(简单例子+清晰代码)(论文排版)
热门文章
- 最近调试人脸问题的总结--命令行+抽取第二级子目录的名称
- VS2010 小技巧
- test dword ptr [eax],eax ; probe page.
- bzoj 1024 [SCOI2009]生日快乐
- String和ByteBuffer互转
- ubuntu修改服务器端,修改ubuntu 服务器配置
- 寻找某个数c语言,C++_C语言实现两个递减数列中寻找某一个数,本文实例讲述了C语言实现两个 - phpStudy...
- 服务器LCD显示面板,DELL服务器2950的错误代码表(前LCD面板)
- C语言实现文件类型统计程序,C语言实现文件类型统计函数
- 求python一个类与对象的代码_Python基础系列(五)类和对象,让你更懂你的python代码...