hdfs常用api(java)
1.下载文件到本地
public class HdfsUrlTest {
static{
//注册url 让java程序识别hdfs的url
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try {
String file = "hdfs://hadoop-yarn.test.com:8020/user/testi/conf/core-site.xml";
URL fileUrl = new URL(file);
in = fileUrl.openStream();
out = new FileOutputStream(new File("d:/core-site.xml"));
//下载文件到本地
IOUtils.copyBytes(in,out,4096, false);
} catch (Exception e) {
e.printStackTrace();
}finally{
IOUtils.closeStream(in);}}}
2.查看集群信息
public static void cluserStatus() throws Exception{
FileSystem fs = HdfsUtil.getFs();
DistributedFileSystem dfs = (DistributedFileSystem)fs;
FsStatus fss = dfs.getStatus();
DatanodeInfo[] datanodeInfos = dfs.getDataNodeStats();
for(DatanodeInfo datanodeinfo : datanodeInfos){
System.out.println(datanodeinfo.getHostName());}}
3.创建一个文件夹
public void testHDFSMkdir() throws Exception{
String hdfsUrl = "hdfs://192.168.10.11:8020";
Configuration conf= new Configuration();
FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
Path path = new Path("/bigdata");
fs.mkdirs(path);}
4.创建一个文件
public void testCreateFile() throws Exception{
String hdfsUrl = "hdfs://192.168.10.11:8020";
Configuration conf= new Configuration();
FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
Path path = new Path("/bigdata/a.txt");
FSDataOutputStream out = fs.create(path);
out.write("hello hadoop".getBytes());}
5.文件重命名
public void testRenameFile() throws Exception{
String hdfsUrl = "hdfs://192.168.10.11:8020";
Configuration conf= new Configuration();
FileSystem fs = FileSystem.get(URI.create(hdfsUrl),conf);
Path path = new Path("/bigdata/a.txt");
Path newPath = new Path("/bigdata/b.txt");
System.out.println(fs.rename(path, newPath));}
6.上传文件
public static void write() throws Exception{
FileSystem fs = HdfsUtil.getFs();
OutputStream outStream = fs.create(new Path("/user/lcc/conf/put-core-site.xml"));
FileInputStream inStream = new FileInputStream(new File("d:/core-site.xml"));
IOUtils.copyBytes(inStream, outStream, 4096, true);}
Hadoop程序想读取hdfs中的数据,最简单的方法是使用java的URL对象打开一个数据流,并从中读取数据。
需要一个fsUrlStreamHandlerFactory实例调用set过的一个URL,这种方法java虚拟机只能调用一次,缺点是如果程序的其他部分也设置了这个,会导致无法再从hadoop中读取数据。
新方法,需要使用filesystem的api打开一个文件的输入流。
文件在hadoop文件系统中被视为一个hadoop path对象,把一个文件夹或文件路径看做为一个hadoop文件系统的URL。
三种方法。
Get(conf)和get(uri,conf),newInstance
最新文章
- 【从零开始学BPM,Day5】报表配置及自定义功能页面开发
- bash shell,调用ffmpeg定期截图
- groups, usermod, chown, chgrp, chmod
- Python使用QRCode模块生成二维码
- 使用正则表达式获取Sql查询语句各项(表名、字段、条件、排序)
- Head First-策略模式
- CSS Sprite 图标
- java的Serialization 机制
- JQ图片跟着鼠标走
- 从Owin到System.Web.Http.Owin的HttpMessageHandlerAdapter看适配器模式
- Flask入门第三天
- python设计模式---创建型之工厂模式
- 专题1:记忆化搜索/DAG问题/基础动态规划
- 对于 url encode decode js 和 c# 有差异
- textarea 标签的使用
- Object.create(null)、Object.create({})、{} 三者创建对象的区别
- 【转】Caffe的solver文件配置
- OA系统高性能解决方案(史上最全的通达OA系统优化方案)
- HTML--思维导图
- Xtreme9.0 - Block Art 线段树
热门文章
- 性能测试必备知识(5)- 深入理解“CPU 上下文切换”
- 关于cnpm的命令出错 cant find module npm-cli.js,以及vue packages version mismatch出错
- Python os.pathconf() 方法
- PHP get_html_translation_table() 函数
- recv &; recvfrom
- luogu P5161 WD与数列 SAM 线段树合并 启发式合并
- 一个轻量级的基于RateLimiter的分布式限流实现
- 错误记录:MIME type may not contain reserved characters
- 可笑,你竟然不知道 Java 如何生成 UUID
- 【NOIP2017】跳房子 题解(单调队列优化线性DP)