通过流的方式访问hdfs
时间:2019-04-20
本文章向大家介绍通过流的方式访问hdfs,主要包括通过流的方式访问hdfs使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.需求
通过流的方式访问hdfs,在mapreduce底层实现中会有直接应用。
2.环境配置
(1)hadoop为本地模式
(2)pom文件代码如下
<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies>
3.使用hdfs的javaAPI操作hdfs的代码
(1)初始化环境
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;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
public class hadoopStreamApiDemo {
FileSystem fs = null;
@Before
public void init() throws IOException, URISyntaxException, InterruptedException {
Configuration configuration = new Configuration();
//设置文件系统为hdfs
//获取文件系统的客户端实例对象
fs = FileSystem.get(new URI("hdfs://127.0.0.1:9900"),configuration,"hadoop");
}
}
(2)使用流的方式上传文件
@Test
public void testUpload() throws IOException {
FSDataOutputStream outputStream = fs.create(new Path("/xx/aa"),true);
FileInputStream inputStream = new FileInputStream("[本地路径]");
//将本地文件拷贝到hdfs上
IOUtils.copyBytes(inputStream,outputStream,4096);
}
(3)使用流的方式下载文件
@Test
public void testDownLoadFileToLocal() throws IOException {
FSDataInputStream inputStream = fs.open(new Path("/xx/aa"));
FileOutputStream outputStream = new FileOutputStream(new File("[本地路径]"));
//将hdfs上的文件输入流传输到本地
IOUtils.copyBytes(inputStream,outputStream,4096);
}
(4)随机访问,读取时候带有偏移量
@Test
public void testTandomAccess() throws IOException {
FSDataInputStream in = fs.open(new Path("/xx/aa"));
FileOutputStream outputStream = new FileOutputStream(new File("[本地路径]"));
//从输入流中截取前19个字节
IOUtils.copyBytes(in,outputStream,19L,true);
}
(5)将hdfs上文件内容打印到屏幕上
@Test
//将hdfs上的文件内容打印到屏幕上(System.out)
public void testCat() throws IOException {
FSDataInputStream in = fs.open(new Path("/xx/aa"));
IOUtils.copyBytes(in,System.out,1024);
}
4.github链接
https://github.com/gulu2016/STBigData/hadoopStreamApiDemo.java
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode栈之用两个栈实现队列
- Ubuntu 18.04通过命令禁用/开启触控板
- 如何利用watch帮你重复执行命令
- Linux查看当前登录用户并踢出用户的命令
- centos7下安装java及环境变量配置技巧
- Ubuntu系统下扩展LVM根目录的方法
- 将宝塔面板linux版装在/www以外的目录的方法
- 详解在Linux下9个有用的touch命令示例
- 一步步教你如何开启、关闭ubuntu防火墙
- Linux环境ActiveMQ部署方法详解
- Ubuntu 16.04无法切换root权限问题的解决
- leetcode栈之用队列实现栈
- 在Linux上识别同样内容的文件详解
- Ubuntu下pycharm无法导入类的解决方法
- leetcode栈之最小栈