设为首页 加入收藏

TOP

利用JavaAPI访问HDFS的文件(一)
2014-11-24 07:51:34 来源: 作者: 【 】 浏览:3
Tags:利用 JavaAPI 访问 HDFS 文件

1、重读配置文件core-site.xml


< xml version="1.0" >


< xml-stylesheet type="text/xsl" href="configuration.xsl" >





hadoop.tmp.dir


/home/zhangzk/hadoop


A base for other temporary directories.





fs.default.name


hdfs://linux-zzk-113:9000






配置项:hadoop.tmp.dir表示命名节点上存放元数据的目录位置,对于数据节点则为该节点上存放文件数据的目录。


配置项:fs.default.name表示命名的IP地址和端口号,缺省值是file:///,对于JavaAPI来讲,连接HDFS必须使用这里的配置的URL地址,对于数据节点来讲,数据节点通过该URL来访问命名节点。


2、利用JavaAPI来访问HDFS的文件与目录


package com.demo.hdfs;


import java.io.BufferedInputStream;


import java.io.FileInputStream;


import java.io.FileNotFoundException;


import java.io.FileOutputStream;


import java.io.IOException;


import java.io.InputStream;


import java.io.OutputStream;


import java.net.URI;


import org.apache.hadoop.conf.Configuration;


import org.apache.hadoop.fs.FSDataInputStream;


import org.apache.hadoop.fs.FSDataOutputStream;


import org.apache.hadoop.fs.FileStatus;


import org.apache.hadoop.fs.FileSystem;


import org.apache.hadoop.fs.Path;


import org.apache.hadoop.io.IOUtils;


import org.apache.hadoop.util.Progressable;


/**


* @author zhangzk


*


*/


public class FileCopyToHdfs {


public static void main(String[] args) throws Exception {


try {


//uploadToHdfs();


//deleteFromHdfs();


//getDirectoryFromHdfs();


appendToHdfs();


readFromHdfs();


} catch (Exception e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


finally


{


System.out.println("SUCCESS");


}


}


/**上传文件到HDFS上去*/


private static void uploadToHdfs() throws FileNotFoundException,IOException {


String localSrc = "d://qq.txt";


String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";


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() {


public void progress() {


System.out.print(".");


}


});


IOUtils.copyBytes(in, out, 4096, true);


}


/**从HDFS上读取文件*/


private static void readFromHdfs() throws FileNotFoundException,IOException {


String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";


Configuration conf = new Configuration();


FileSystem fs = FileSystem.get(URI.create(dst), conf);


FSDataInputStream hdfsInStream = fs.open(new Path(dst));


OutputStream out = new FileOutputStream("d:/qq-hdfs.txt");


byte[] ioBuffer = new byte[1024];


int readLen = hdfsInStream.read(ioBuffer);


while(-1 != readLen){


out.write(ioBuffer, 0, readLen);


readLen = hdfsInStream.read(ioBuffer);


}


out.close();


hdfsInStream.close();


fs.close();


}


/**以append方式将内容添加到HDFS上文件的末尾;注意:文件更新,需要在hdfs-site.xml中添dfs.append.supporttrue*/


private static void appendToHdfs() throws FileNotFoundException,IOException {


String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";


Configuration conf = new Configuration();


FileSystem fs = FileSystem.get(URI.create(dst), conf);


FSDataOutputStream out = fs.append(new Path(dst));


int readLen = "zhangzk add by hdfs java api".getBytes().length;


while(-1 != readLen){


out.write("zhangzk add by hdfs java api".getBytes(), 0, readLen);


}


out.close();


fs.close();


}


/**从HDFS上删除文件*/


private static void deleteFromHdfs() throws FileNotFoundException,IOException {


String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq-bak.txt";


Configuration conf = new Configuration();


FileSystem fs = FileSystem.get(URI.create(d

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux内核学习笔记之进程进程的组.. 下一篇用C++编写一个使用嵌套循环的程序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)
·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)