`

Hadoop-常用操作

 
阅读更多
使用URL的方式读取一个文件内容,需要设置一个handler工厂,这个工厂只能设置一次
	static {
		URL.setURLStreamHandlerFactory( new FsUrlStreamHandlerFactory() );
	}
	
	public void test1() throws IOException {
		URL u = new URL("hdfs://IP:8020/test");
		InputStream is = u.openStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		String line = null;
		
		while( (line=br.readLine()) != null ) {
			System.out.println(line);
		}
		br.close();
	}



使用hadoop的FileSystem读取文件
	public void test2() throws IOException {
		String url = "hdfs://IP:8020/test-data/hello.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		InputStream is = null;
		is = fs.open(new Path(url));
		IOUtils.copyBytes(is, System.out, 4096, false);	
	}


将一个本地文件拷贝到hadoop文件系统中
	public void test3() throws IOException {
		String src = "C:\\test.txt";
		String dest = "hdfs://IP:8020/test-data/hello.txt";
		InputStream is = new BufferedInputStream(new FileInputStream(src));
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(dest), config);
		OutputStream os = fs.create(new Path(dest), new Progressable() {
			@Override
			public void progress() {
				System.out.print(".");
			}
		});
		IOUtils.copyBytes(is, os, 4096, true);
		System.out.println("ok~");
	}


列出文件属性
	public void test4() throws IOException {
		String url = "hdfs:/IP:8020/test-data/hello.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		FileStatus status = fs.getFileStatus(new Path(url));
		System.out.println("AccessTime : "+status.getAccessTime());
		System.out.println("BlockSize : "+status.getBlockSize());
		System.out.println("group : "+status.getGroup());
		System.out.println("len : "+status.getLen());
		System.out.println("ModificationTime : "+status.getModificationTime());
		System.out.println("owner : "+status.getOwner());
		System.out.println("is dir ? : "+status.isDir());
		System.out.println("path : "+status.getPath());
		System.out.println("permission : "+status.getPermission());
		System.out.println("replication : "+status.getReplication());
	}



通过路径过滤器查找文件
	public void test5() throws IOException {
		String url = "hdfs://IP:8020/test-data/*";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		
		FileStatus[] status = fs.globStatus( new Path(url), new RegexPathFilter("^.*hello.*$") );
		for(FileStatus s:status) {
			System.out.println(s.getPath().toString());
		}
		System.out.println("filter execute ok");
	}
//路径正则过滤器类
	public class RegexPathFilter implements PathFilter {
		private final String regex;
		
		public RegexPathFilter(String regex) {
			this.regex = regex;
		}
		
		@Override
		public boolean accept(Path path) {
			return path.toString().matches(regex);
		}
	}


删除,支持递归删除
	public void delete() throws IOException {
		String url = "hdfs://IP:8020/test-data/xxx.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		fs.delete(new Path(url), false);
		System.out.println("delete ok");
	}


重命名
	public void test5_rename() throws IOException {
		String url = "hdfs://IP:8020/test-data/xx.txt";
		String url2 = "hdfs://IP:8020/test-data/modify-xx.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		boolean isok = fs.rename(new Path(url), new Path(url2));
		System.out.println("complete : "+isok);
	}



检查文件是否存在
	public void exist() throws IOException {
		String url = "hdfs:/IP:8020/test-data/modify-xx.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		boolean isExist = fs.exists( new Path(url));
		System.out.println("exist ? "+isExist);
	}



查找某个文件在HDFS中的位置
	public void test5_location() throws IOException {
		String url = "hdfs://IP:8020/test-data/hello.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		FileStatus status = fs.getFileStatus(new Path(url));		
		BlockLocation[] bls = fs.getFileBlockLocations(status, 0, status.getLen());
		for(int i=0;i<bls.length;i++) {
			String[] hosts = bls[i].getHosts();
			System.out.println("block :"+i+"\tlocation : "+hosts[i]);
		}
	}


获取HDFS集群上所有节点的名称
	public void test5_allnode() throws IOException {
		String url2 = "hdfs://IP:8020/test-data/modify-xx.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url2),config);
		DistributedFileSystem hdfs = (DistributedFileSystem)fs;
		DatanodeInfo[] status = hdfs.getDataNodeStats();
		for(DatanodeInfo d:status) {
			System.out.println(d.getHostName());
		}
}



创建本地和远端的checksum
	public void localCreateChecksum() throws IOException {
		String url = "file:///C:/zzzz/abc.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		ChecksumFileSystem cfs = new LocalFileSystem(fs);
		FSDataOutputStream fsdos = cfs.create(new Path(url));
		fsdos.write("hehe".getBytes());
		fsdos.flush();
		fsdos.close();
	}
	
	
	public void distributeCreateChecksum() throws IOException {
		String url = "hdfs://IP:8020/test/abc.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url),config);
		ChecksumFileSystem cfs = new LocalFileSystem(fs);
		FSDataOutputStream fsdos = cfs.create(new Path(url));
		fsdos.write("hehe~".getBytes());
		fsdos.flush();
		fsdos.close();
	}



压缩和解压缩,压缩池
	public void compress() throws IOException {
		FileInputStream fis = new FileInputStream("C:\\zzzz\\xx.txt");
		GzipCodec gc = new GzipCodec();
		String url = "hdfs://IP:8020/test/compress.txt";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url), config); 
		OutputStream fdos = fs.create(new Path(url));
		byte[] buf = new byte[10240];
		int len = fis.read(buf);
		System.out.println("content:");
		System.out.println( new String(buf,0,len) );
		CompressionOutputStream cos = gc.createOutputStream(fdos);
		cos.write(buf,0,len);
		cos.flush();
		cos.close();
	}
	
	public void decompress() throws IOException {
		String url = "hdfs://IP:8020/test/compress.gz";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(url), config); 
		GzipCodec gc = new GzipCodec();
		FSDataInputStream fdis = fs.open(new Path(url));
		CompressionInputStream cis = gc.createInputStream(fdis);
		IOUtils.copy(cis, System.out);
	}
	
	public void comprssPool() throws IOException {
		FileInputStream fis = new FileInputStream("C:\\zzzz\\abc.txt");
		GzipCodec gc = new GzipCodec();
		FileOutputStream fdos = new FileOutputStream("C:/zzzz/pool.txt");	
		Compressor compressor = CodecPool.getCompressor(gc);
		CompressionOutputStream cos = gc.createOutputStream(fdos, compressor);
		IOUtils.copy(fis, cos);
		CodecPool.returnCompressor(compressor);
		
	}

分享到:
评论

相关推荐

    Hadoop-2.8.5全面资料

    - **winutils.exe**:此文件是Windows环境下Hadoop操作的工具集,包括了常用的HDFS命令行工具等。对于在Windows系统下使用Hadoop的用户来说非常有用。 - **插件**:Hadoop插件不仅可以提高开发效率,还可以帮助...

    hadoop-2.7.1.tar.gz

    标题中的"hadoop-2.7.1.tar.gz"是一个压缩包...用户需要了解Hadoop的基本架构和操作流程,以及如何在Windows环境下配置Hadoop的相关参数。同时,这个版本的Hadoop带来了更高效的数据处理能力和更稳定的分布式存储系统。

    hadoop-native原始包-压缩-native-2.7.2-ct7.x.tgz

    这个压缩包包含了与Hadoop相关的C/C++编写的本地库,这些库能够提升Hadoop在特定硬件或操作系统上的性能,特别是在I/O操作和计算密集型任务方面。 描述中提到的 "native-2.7.2-ct7.x.tgz" 是该压缩包的文件名,暗示...

    hadoop3.3.0-winutils所有bin文件

    Java是编写Hadoop和Spark程序的常用语言,而Scala则提供了一种更高级、更简洁的方式来编写Spark应用。通过结合使用这些工具和技术,开发者可以构建复杂的数据处理管道,高效地处理PB级别的数据。 在Windows环境中...

    hadoop-2.7.4.tar.gz

    2. `sbin`: 存放管理脚本,用于集群级别的操作,如启动和停止整个Hadoop集群。 3. `lib`: 包含Hadoop运行所需的库文件。 4. `conf`: 默认配置文件,用户可以根据自己的集群设置进行修改。 5. `src`: Hadoop的源代码...

    Linux-Hadoop-安装和操作指南(内涵代码,工具,以及文档指南)

    Linux是Hadoop最常用的运行平台,因为它提供了稳定、高性能的服务器环境。你需要了解基本的Linux命令行操作,如文件和目录管理(ls、cd、mkdir、rm等)、文本编辑器(如vim或nano)的使用,以及网络配置和权限管理。...

    hadoop-eclipse-plugin-2.8.0.zip 亲测Eclipse2020+Hadoop2.10可用

    此外,插件还可能提供HDFS资源浏览器,允许开发者查看和操作Hadoop集群上的文件和目录。总的来说,"hadoop-eclipse-plugin"极大地提高了Hadoop开发的效率和便利性,是Hadoop开发者不可或缺的工具之一。 总结一下,...

    window-hadoop-nutils-master.zip

    1. **Hadoop客户端**: 这通常指的是Hadoop的命令行工具,如hadoop fs(用于文件操作)、hadoop jar(用于运行jar包中的MapReduce作业)等,这些工具允许用户在本地与远程Hadoop集群交互。 2. **环境配置**: 工具包...

    idea hadoop-hdfs插件

    通过本文的介绍,我们对"Idea hadoop-hdfs插件"有了全面的认识,它为Hadoop开发人员提供了强大的HDFS操作支持,让数据操作变得更为便捷。在大数据开发的日常工作中,熟练掌握并利用这样的工具,无疑会大大提高我们的...

    搭建hadoop-1.2.1环境

    WordCount是一个简单的程序,用于统计文本文件中单词出现的次数,是验证Hadoop集群功能的常用方法。 总的来说,搭建Hadoop-1.2.1环境涉及多个组件的配置和安装,包括操作系统、JDK、SSH、Hadoop二进制文件,以及...

    hadoop-3.0.1winutils.rar

    3. **SSH配置**:尽管Windows不常用SSH,但Hadoop的一些功能如YARN和HDFS的远程管理需要SSH支持。可以使用OpenSSH for Windows或者第三方工具如PuTTY。 4. **安全认证**:如果涉及到安全性,可能需要配置Kerberos以...

    windows-hadoop-2.7.4-bin

    这种方法简化了在非Linux操作系统上搭建Hadoop集群的步骤。" 【知识点详述】 1. Hadoop简介:Hadoop是由Apache基金会开发的一个开源框架,它允许在廉价硬件上进行大规模数据处理。其核心包括两个主要组件:HDFS...

    hadoop-3.1.3.tar.gz.gz

    3. "hadoop运维命令总结.txt":这可能是对Hadoop操作和维护常用命令的汇总,包括启动、停止Hadoop服务,监控HDFS状态,以及执行MapReduce作业等操作。 从这些文件我们可以学习到的知识点有: 1. **Hadoop的安装与...

    hadoop-fs指令学习.pdf

    下面是一些常用的HDFS shell命令及其使用方法: - **-ls**:列出指定路径下的所有文件和目录。例如,`hadoop fs -ls /path/to/directory`。 - **-lsr**:递归地列出指定路径下的所有文件和目录。 - **-du**:显示...

    hadoop-2.7.3+zookeeper-3.4.8+hadoop-2.7.3分布式环境搭建整理(王三旗亲试成功安装)

    在这里,我们选择 CentOS 6.5 作为操作系统。下载 CentOS 6.5 的镜像文件,并将其烧录到安装媒体中。启动安装程序,选择 Install CentOS 6.5,回车,继续安装。选择语言,默认是 English,学习可以选择中文,正时...

    02-Hadoop-HDFS.docx

    以上就是关于Hadoop-HDFS的知识点总结,涵盖了HDFS的基本概念、优缺点、架构以及Shell命令操作等内容。HDFS作为Hadoop的核心组件之一,在大数据处理领域具有极其重要的地位。掌握HDFS的相关知识对于从事大数据领域的...

    hadoop-2.8.5所需jar

    在Windows环境下,Eclipse作为常用的Java开发IDE,如果缺少了这些特定的JAR依赖,那么尝试运行含有Hadoop相关代码的Java程序时,会遇到编译或运行错误。 描述中提到的“在Windows下eclipse运行java程序,报错原因是...

    Hadoop-2.8.1+Zookeeper-3.4.6(HDFS,YARN HA)部署指南

    根据提供的文档内容,本文将详细解析Hadoop-2.8.1与Zookeeper-3.4.6在高可用环境下的部署步骤与注意事项,重点包括版本兼容性、主机规划、目录规划以及常用的脚本与命令。 ### 版本兼容性 在搭建Hadoop集群时,...

    hadoop大数据培训零基础学习hadoop-北京尚学堂.pdf

    - 学习如何在不同操作系统上安装和配置Hadoop,包括单机模式、伪分布式模式和完全分布式模式。 4. **Java版本的选择**: - J2EE适用于Web开发,尤其在处理和展示大数据时,可以利用其服务器端功能。 - J2SE是...

    Hadoop-HDFS.docx

    【Hadoop-HDFS概述】 Hadoop-HDFS,全称为Hadoop Distributed File System,是一种分布式文件系统,旨在解决大规模数据...这些命令是HDFS开发和运维人员日常工作中常用的基本操作,掌握它们对于有效管理HDFS至关重要。

Global site tag (gtag.js) - Google Analytics