HDFS的文件操作

格式化HDFS

命令:[email protected]:Hadoop$bin/hadoop namenode -format

启动HDFS

命令:[email protected]:hadoop$bin/start-dfs.sh

列出HDFS上的文件

命令:[email protected]:hadoop$bin/hadoop dfs -ls

使用hadoop API

public List<String[]>GetFileBolckHost(Configuration conf, String FileName) {

try {

List<String[]> list = new ArrayList<String[]>();

FileSystem hdfs = FileSystem.get(conf);

Path path = new Path(FileName);

FileStatus fileStatus = hdfs.getFileStatus(path);

BlockLocation[] blkLocations = hdfs.getFileBlockLocations(

fileStatus, 0,fileStatus.getLen());

int blkCount = blkLocations.length;

for (int i = 0; i < blkCount; i++) {

String[] hosts =blkLocations.getHosts();

list.add(hosts);

}

return list;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

在HDFS上创建目录

命令:[email protected]:hadoop$bin/hadoop dfs -mkdir /文件名

使用hadoop API

// 在HDFS新建文件

public FSDataOutputStream CreateFile(Configuration conf, StringFileName) {

try {

FileSystem hdfs = FileSystem.get(conf);

Path path = new Path(FileName);

FSDataOutputStream outputStream = hdfs.create(path);

return outputStream;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

上传一个文件到HDFS

命令:[email protected]:Hadoop$ bin/hadoopdfs -put 文件名/user/yourUserName/

使用hadoop API

// 上传文件到HDFS

public voidPutFile(Configuration conf, String srcFile, String dstFile) {

try {

FileSystem hdfs =FileSystem.get(conf);

Path srcPath = newPath(srcFile);

Path dstPath = newPath(dstFile);

hdfs.copyFromLocalFile(srcPath, dstPath);

} catch (IOExceptione) {

e.printStackTrace();

}

}

从 HDFS 中导出数据

命令:[email protected]:hadoop$ bin/hadoopdfs -cat foo

使用hadoop API

// 从HDFS读取文件

public voidReadFile(Configuration conf, String FileName) {

try {

FileSystem hdfs =FileSystem.get(conf);

FSDataInputStreamdis = hdfs.open(new Path(FileName));

IOUtils.copyBytes(dis, System.out, 4096, false);

dis.close();

} catch (IOExceptione) {

e.printStackTrace();

}

}

HDFS 的关闭

命令:[email protected]:hadoop$bin/stop-dfs.sh

HDFS全局状态信息

命令:bin/Hadoop dfsadmin -report

我们可以得到一份全局状态报告。这份报告包含了HDFS集群的基本信息,当然也有每台机器的一些情况。

以上讲的都是本地操作HDFS,都是基于在Ubuntu下并配置有hadoop环境下对HDFS的操作,作为客户端也可以在window系统下远程的对 HDFS进行操作,其实原理基本上差不多,只需要集群中namenode对外开放的IP和端口,就可以访问到HDFS

/**

* 对HDFS操作

* @author yujing

*

*/

public class Write {

public static voidmain(String[] args) {

try {

uploadTohdfs();

readHdfs();

getDirectoryFromHdfs();

} catch(FileNotFoundException e) {

e.printStackTrace();

} catch (IOExceptione) {

e.printStackTrace();

}

}

public static voiduploadTohdfs() throws FileNotFoundException, IOException {

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

String dst ="hdfs://192.168.1.11:9000/usr/yujing/test.txt";

InputStream in = newBufferedInputStream(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 voidprogress() {

System.out.println(".");

}

});

System.out.println("上传文件成功");

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

}

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

private static voidreadHdfs() throws FileNotFoundException, IOException {

String dst ="hdfs://192.168.1.11:9000/usr/yujing/test.txt";

Configuration conf =new Configuration();

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

FSDataInputStreamhdfsInStream = fs.open(new Path(dst));

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

byte[] ioBuffer = newbyte[1024];

int readLen =hdfsInStream.read(ioBuffer);

while (-1 != readLen){

out.write(ioBuffer, 0, readLen);

readLen =hdfsInStream.read(ioBuffer);

}

System.out.println("读文件成功");

out.close();

hdfsInStream.close();

fs.close();

}

/**

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

*append.support</name><value>true</value></property>

*/

private static voidappendToHdfs() throws FileNotFoundException,

IOException {

String dst ="hdfs://192.168.1.11:9000/usr/yujing/test.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 voiddeleteFromHdfs() throws FileNotFoundException,

IOException {

String dst ="hdfs://192.168.1.11:9000/usr/yujing";

Configuration conf =new Configuration();

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

fs.deleteOnExit(newPath(dst));

fs.close();

}

/** 遍历HDFS上的文件和目录 */

private static voidgetDirectoryFromHdfs() throws FileNotFoundException,

IOException {

String dst ="hdfs://192.168.1.11:9000/usr/yujing";

Configuration conf =new Configuration();

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

FileStatus fileList[]= fs.listStatus(new Path(dst));

int size =fileList.length;

for (int i = 0; i <size; i++) {

System.out.println("文件名name:" + fileList.getPath().getName()

+ "文件大小/t/tsize:" +fileList.getLen());

}

fs.close();

}

}

我们可以通过http://主机IP:50030就可以查看集群的所有信息,也可以查看到自己上传到HDFS上的文件。

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

时间: 2024-10-10 08:20:47

HDFS的文件操作的相关文章

HDFS的文件操作(Java代码实现)

对于hdfs的操作,可以使用hadoop fs 的命令,同时也可以使用java来进行操作,下面的一段小例子,就是简单介绍了java操作hdfs的文件等...... package com.hdfs.nefu; /** * @auther XD **/ import java.io.FileInputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import

HDFS读写文件操作

1    运行环境说明 1.1     硬软件环境 1.2     机器网络环境 2    书面作业1:编译并运行<权威指南>中的例3.2 2.1     书面作业1内容 2.2     运行代码 2.3     实现过程 2.3.1   创建代码目录 2.3.2   建立例子文件上传到hdfs中 2.3.3   配置本地环境 2.3.4   编写代码 2.3.5   编译代码 2.3.6   使用编译代码读取文件 3    书面作业2:写入HDFS成为一个新文件 3.1    书面作业2内容

Hadoop第4周练习—HDFS读写文件操作

1    运行环境说明... 3 1.1     硬软件环境... 3 1.2     机器网络环境... 3 2    书面作业1:编译并运行<权威指南>中的例3.2. 3 2.1     书面作业1内容... 3 2.2     运行代码... 3 2.3     实现过程... 4 2.3.1   创建代码目录... 4 2.3.2   建立例子文件上传到hdfs中... 4 2.3.3   配置本地环境... 5 2.3.4   编写代码... 5 2.3.5   编译代码... 6

【hadoop】使用javaAPI对hdfs进行文件操作

前提:1.搭建好hadoop伪分布式环境:2.安装好eclipse: 注:修改 /etc/hosts 添加 “本机IP hadoop01” , 那么代码中创建hdfs文件系统的时候的URI hdfs://hadoop01:9000 相当于  hdfs://hadoop服务器ip(例如:192.168.1.1XX):9000 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOExcep

在eclipse上的hdfs的文件操作

参考:http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/?tdsourcetag=s_pcqq_aiomsg:  http://dblab.xmu.edu.cn/blog/290-2/ 一.安装eclipse 附:centos7制作eclipse启动器: 原文地址:https://www.cnblogs.com/zhaochenguang/p/9735217.html

读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2.1 目录 一.java调用HDFS的常见操作 1.1.演示环境搭建 1.2.操作HDFS 1.3.java文件操作常用方法 二.深入了解HDFS写文件的流程和HDFS原理 2.1.Hadoop3.2.1 源码下载及介绍 2.2.文件系统:FileSystem 2.3.HDFS体系结构:namenod

Hadoop之HDFS文件操作

摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件    命令行     Java API HDFS是一种分布式文件系统,为MapReduce这种框架下的海量数据分布式处理而设计. Hadoop之HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具:另一种是JavaAPI,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件.

Hadoop学习笔记0002——HDFS文件操作

  说明:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式. 方式一:命令行方式 Hadoop文件操作命令形式为:hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命令,包括添加文件和目录.获取文件.删除文件等. 1 添加文件和目录 HDFS有一个默认工作目录/usr/$USER,其中$USER是你的登录用户名,作者的用户名是root.该目录不能自动创建,需要执行m

HDFS基本命令行操作及上传文件的简单API

一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据存储位置 <property> <name>dfs.namenode.name.dir</name> <value>/root/hd/dfs/name</value> </property> //配置数据存储位置 <property