`
yu06206
  • 浏览: 111379 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

HDFS的文件操作

阅读更多

   在去年寒假的时候,我们已经完成了hadoop集群的搭建,已经初步搭建起来了自己的云平台,也测试了一下远程访问HDFS,这几天也回顾了一下和测试了一下远程对HDFS的操作。
HDFS的文件操作
格式化HDFS
命令:user@namenode:hadoop$ bin/hadoop namenode -format
启动HDFS
命令:user@namenode:hadoop$ bin/start-dfs.sh

列出HDFS上的文件

命令:user@namenode: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[i].getHosts();
				list.add(hosts);
			}
			return list;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

 

 

在HDFS上创建目录
命令:user@namenode:hadoop$ bin/hadoop dfs -mkdir /文件名

使用hadoop API

// 在HDFS新建文件
	public FSDataOutputStream CreateFile(Configuration conf, String FileName) {
		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
命令:user@namenode:hadoop$ bin/hadoop dfs -put 文件名 /user/yourUserName/

使用hadoop API

// 上传文件到HDFS
	public void PutFile(Configuration conf, String srcFile, String dstFile) {
		try {
			FileSystem hdfs = FileSystem.get(conf);
			Path srcPath = new Path(srcFile);
			Path dstPath = new Path(dstFile);
			hdfs.copyFromLocalFile(srcPath, dstPath);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 
从 HDFS 中导出数据

命令:user@namenode:hadoop$ bin/hadoop dfs -cat foo

使用hadoop API

// 从HDFS读取文件
	public void ReadFile(Configuration conf, String FileName) {
		try {
			FileSystem hdfs = FileSystem.get(conf);
			FSDataInputStream dis = hdfs.open(new Path(FileName));
			IOUtils.copyBytes(dis, System.out, 4096, false);
			dis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 
HDFS 的关闭
命令:user@namenode: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 void main(String[] args) {
		try {
			uploadTohdfs();
			readHdfs();
			getDirectoryFromHdfs();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void uploadTohdfs() throws FileNotFoundException, IOException {
		String localSrc = "D://qq.txt";
		String dst = "hdfs://192.168.1.11:9000/usr/yujing/test.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.println(".");
			}
		});
		System.out.println("上传文件成功");
		IOUtils.copyBytes(in, out, 4096, true);
	}

	/** 从HDFS上读取文件 */
	private static void readHdfs() 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);
		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);
		}
		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 void appendToHdfs() 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 void deleteFromHdfs() 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(new Path(dst));
		fs.close();
	}

	/** 遍历HDFS上的文件和目录 */
	private static void getDirectoryFromHdfs() 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[i].getPath().getName()
					+ "文件大小/t/tsize:" + fileList[i].getLen());
		}
		fs.close();
	}

}

 

 

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


 

 

分享到:
评论
2 楼 blackproof 2012-12-11  
编码问题如何解决
1 楼 napolengogo 2012-11-14  
远程访问的时候,client是非集群里的机器,就会存在权限问题,请问这个是怎么解决的

相关推荐

    Hadoop hdfs文件操作,mr demo,topN demo

    本篇文章将详细讲解Hadoop HDFS文件操作、MapReduce(MR)示例以及如何实现TopN问题。 首先,HDFS是分布式文件系统,设计用于跨大量廉价硬件节点存储和处理大规模数据。它具有高容错性,能够自动数据复制,确保数据...

    HDFS文件操作命令与HDFS编程

    文档详细的讲述了Hadoop中HDFS文件操作命令和HDFS编程

    java对大数据HDFS文件操作

    6. **项目示例**:提供的两个项目"java对HDFS文件操作jar包版"和"java对HDFS文件操作maven版.zip.zip"可能包含了上述操作的完整实现。`jar包版`可能是一个已经编译好的可执行程序,可以直接运行。而`maven版`则是一...

    SpringBoot整合Hadoop的案例代码demo,含HDFS文件操作、MapReduce分词操作、案例数据分析,系统推荐等

    本案例代码demo旨在帮助开发者更好地理解和应用这一技术组合,涵盖了HDFS文件操作、MapReduce分词处理以及数据分析和系统推荐等功能。 首先,HDFS(Hadoop Distributed File System)是Hadoop的核心组件之一,提供...

    HDFS实例基本操作

    2. HDFS API:通过FSDataInputStream,可以读取HDFS文件并写入本地文件系统。 四、HDFS的文件创建与删除 1. 创建文件夹:使用`hadoop fs -mkdir`命令创建目录,如`hadoop fs -mkdir /myfolder`。 2. 删除文件:...

    hadoop测试(1)---HDFS文件操作 完整测试代码

    hadoop测试(1)---HDFS文件操作 完整测试代码, 相关文章:http://www.cnblogs.com/yinpengxiang/archive/2011/07/03/2096605.html

    HDFS文件系统基本文件命令、编程读写HDFS

    HDFS 提供了一系列基本文件命令,用于管理和操作 HDFS 文件系统。这些命令包括: 1. mkdir:创建一个新的目录。 2. put:将本地文件上传到 HDFS。 3. get:从 HDFS 下载文件到本地文件系统。 4. rm:删除 HDFS 文件...

    HDFS文件读写操作

    ### HDFS文件读写操作详解 #### 一、HDFS架构概述 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目之一,旨在提供高吞吐量的数据访问,适用于大规模数据集上的应用。HDFS采用了Master/Slave的...

    云计算技术实验报告四HDFS文件的读写

    总的来说,这个实验加深了学生对HDFS文件操作的理解,尤其是文件的读写和合并,同时也锻炼了他们的环境配置和问题解决能力。通过实际操作,学生能更好地掌握Hadoop生态系统中的核心组件——HDFS的工作原理,这对于...

    hadoop入门java代码hdfs文件操作 wordCount源码

    hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计

    web中进行HDFS文件系统操作的demo

    在这个“web中进行HDFS文件系统操作的demo”中,我们将探讨如何通过Web界面与HDFS进行交互,使得用户能够方便地管理HDFS上的文件和目录,而无需直接使用命令行工具。这个demo是由jsp(JavaServer Pages)编写的,这...

    Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    以下是如何使用`pyhdfs`进行文件操作的示例: 1. **文件读取**: - 首先,需要导入`HdfsClient`,指定HDFS的地址和端口,例如:`client = HdfsClient(hosts='ghym:50070')` - 使用`client.open()`打开HDFS上的...

    windows平台下的HDFS文件浏览器

    标题中的“Windows平台下的HDFS文件浏览器”是指在Windows操作系统上使用的、用于浏览和管理Hadoop分布式文件系统(HDFS)的图形用户界面工具。这种工具通常提供了方便的方式来查看、上传、下载和管理HDFS中的文件和...

    HDFS存取实例(java)

    五、HDFS文件操作示例 以下是一个简单的Java代码示例,展示如何上传和下载文件至HDFS: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop...

    hadoop的hdfs文件操作实现上传文件到hdfs

    在分布式计算领域,Apache Hadoop 是一个开源框架,主要用于存储和处理大规模数据。Hadoop 的核心组件之一是 HDFS...通过实例化的 `FileSystem` 对象,你可以轻松地执行各种文件操作,从而充分利用 HDFS 的分布式特性。

    大数据技术基础实验报告-HDFS常用操作命令.doc

    HDFS的操作主要通过命令行客户端`hdfs dfs`进行,它提供了丰富的命令集来管理文件和目录。例如: 1. `hdfs dfs -ls`: 此命令用于列出指定路径下的文件和目录,基本形式是`hdfs dfs -ls &lt;path&gt;`。添加 `-d` 参数可以...

    java管理hdfs文件和文件夹项目hadoop2.4

    本文将深入探讨使用Java管理HDFS文件和文件夹的关键知识点,特别是基于Hadoop 2.4版本。 首先,理解HDFS的基础概念至关重要。HDFS是一种分布式文件系统,设计用于跨大量廉价硬件节点存储和处理大数据。它遵循主从...

    HDFS文件系统

    ### HDFS文件系统详解 #### 一、HDFS概述与分布式文件系统概念 Hadoop分布式文件系统(HDFS)作为Hadoop项目的核心组成部分之一,它为海量数据提供了高吞吐量的数据访问,非常适合大规模数据集的处理。HDFS的设计...

    实验二:熟悉常用的HDFS操作

    实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...

    搭建hadoop后hdfs基本操作 ecplisec操作

    总结起来,通过Eclipse与Hadoop的Java API,我们能实现HDFS的基本操作,包括文件的上传、下载、删除、移动以及目录的管理。这对于大数据开发人员来说是必不可少的技能,有助于理解和掌握Hadoop生态系统的工作原理。

Global site tag (gtag.js) - Google Analytics