`
booby325
  • 浏览: 386492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop hdfs java api 文件操作类

 
阅读更多

package test.hadoop.util;

import java.util.Iterator;
import java.util.Map.Entry;
import org.apache.commons.lang.exception.ExceptionUtils;
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.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import com.emar.adwiser.common.util.LogUtil;
import com.emar.adwiser.common.util.Logs;
/***
 * HDFS 工具类
 * @author zhaidw
 *
 */
public class HDFSUtil {
	private static Logs log = LogUtil.getLog(HDFSUtil.class);
	public synchronized static FileSystem getFileSystem(String ip, int port) {
		FileSystem fs = null;
		String url = "hdfs://" + ip + ":" + String.valueOf(port);
		Configuration config = new Configuration();
		config.set("fs.default.name", url);
		try {
			fs = FileSystem.get(config);
		} catch (Exception e) {
			log.error("getFileSystem failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
		return fs;
	}
	public synchronized static void listNode(FileSystem fs) {
		DistributedFileSystem dfs = (DistributedFileSystem) fs;
		try {
			DatanodeInfo[] infos = dfs.getDataNodeStats();
			for (DatanodeInfo node : infos) {
				System.out.println("HostName: " + node.getHostName() + "/n"
						+ node.getDatanodeReport());
				System.out.println("--------------------------------");
			}
		} catch (Exception e) {
			log.error("list node list failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	/**
	 * 打印系统配置
	 * 
	 * @param fs
	 */
	public synchronized static void listConfig(FileSystem fs) {
		Iterator<Entry<String, String>> entrys = fs.getConf().iterator();
		while (entrys.hasNext()) {
			Entry<String, String> item = entrys.next();
			log.info(item.getKey() + ": " + item.getValue());
		}
	}
	/**
	 * 创建目录和父目录
	 * 
	 * @param fs
	 * @param dirName
	 */
	public synchronized static void mkdirs(FileSystem fs, String dirName) {
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		String dir = workDir + "/" + dirName;
		Path src = new Path(dir);
		// FsPermission p = FsPermission.getDefault();
		boolean succ;
		try {
			succ = fs.mkdirs(src);
			if (succ) {
				log.info("create directory " + dir + " successed. ");
			} else {
				log.info("create directory " + dir + " failed. ");
			}
		} catch (Exception e) {
			log.error("create directory " + dir + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	/**
	 * 删除目录和子目录
	 * 
	 * @param fs
	 * @param dirName
	 */
	public synchronized static void rmdirs(FileSystem fs, String dirName) {
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		String dir = workDir + "/" + dirName;
		Path src = new Path(dir);
		boolean succ;
		try {
			succ = fs.delete(src, true);
			if (succ) {
				log.info("remove directory " + dir + " successed. ");
			} else {
				log.info("remove directory " + dir + " failed. ");
			}
		} catch (Exception e) {
			log.error("remove directory " + dir + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	/**
	 * 上传目录或文件
	 * 
	 * @param fs
	 * @param local
	 * @param remote
	 */
	public synchronized static void upload(FileSystem fs, String local,
			String remote) {
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		Path dst = new Path(workDir + "/" + remote);
		Path src = new Path(local);
		try {
			fs.copyFromLocalFile(false, true, src, dst);
			log.info("upload " + local + " to  " + remote + " successed. ");
		} catch (Exception e) {
			log.error("upload " + local + " to  " + remote + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	/**
	 * 下载目录或文件
	 * 
	 * @param fs
	 * @param local
	 * @param remote
	 */
	public synchronized static void download(FileSystem fs, String local,
			String remote) {
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		Path dst = new Path(workDir + "/" + remote);
		Path src = new Path(local);
		try {
			fs.copyToLocalFile(false, dst, src);
			log.info("download from " + remote + " to  " + local
					+ " successed. ");
		} catch (Exception e) {
			log.error("download from " + remote + " to  " + local + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	/**
	 * 字节数转换
	 * 
	 * @param size
	 * @return
	 */
	public synchronized static String convertSize(long size) {
		String result = String.valueOf(size);
		if (size < 1024 * 1024) {
			result = String.valueOf(size / 1024) + " KB";
		} else if (size >= 1024 * 1024 && size < 1024 * 1024 * 1024) {
			result = String.valueOf(size / 1024 / 1024) + " MB";
		} else if (size >= 1024 * 1024 * 1024) {
			result = String.valueOf(size / 1024 / 1024 / 1024) + " GB";
		} else {
			result = result + " B";
		}
		return result;
	}
	/**
	 * 遍历HDFS上的文件和目录
	 * 
	 * @param fs
	 * @param path
	 */
	public synchronized static void listFile(FileSystem fs, String path) {
		Path workDir = fs.getWorkingDirectory();
		Path dst;
		if (null == path || "".equals(path)) {
			dst = new Path(workDir + "/" + path);
		} else {
			dst = new Path(path);
		}
		try {
			String relativePath = "";
			FileStatus[] fList = fs.listStatus(dst);
			for (FileStatus f : fList) {
				if (null != f) {
					relativePath = new StringBuffer()
							.append(f.getPath().getParent()).append("/")
							.append(f.getPath().getName()).toString();
					if (f.isDir()) {
						listFile(fs, relativePath);
					} else {
						System.out.println(convertSize(f.getLen()) + "/t/t"
								+ relativePath);
					}
				}
			}
		} catch (Exception e) {
			log.error("list files of " + path + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		} finally {
		}
	}
	public synchronized static void write(FileSystem fs, String path,
			String data) {
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		Path dst = new Path(workDir + "/" + path);
		try {
			FSDataOutputStream dos = fs.create(dst);
			dos.writeUTF(data);
			dos.close();
			log.info("write content to " + path + " successed. ");
		} catch (Exception e) {
			log.error("write content to " + path + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	public synchronized static void append(FileSystem fs, String path,
			String data) {
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		Path dst = new Path(workDir + "/" + path);
		try {
			FSDataOutputStream dos = fs.append(dst);
			dos.writeUTF(data);
			dos.close();
			log.info("append content to " + path + " successed. ");
		} catch (Exception e) {
			log.error("append content to " + path + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
	}
	public synchronized static String read(FileSystem fs, String path) {
		String content = null;
		// Path home = fs.getHomeDirectory();
		Path workDir = fs.getWorkingDirectory();
		Path dst = new Path(workDir + "/" + path);
		try {
			// reading
			FSDataInputStream dis = fs.open(dst);
			content = dis.readUTF();
			dis.close();
			log.info("read content from " + path + " successed. ");
		} catch (Exception e) {
			log.error("read content from " + path + " failed :"
					+ ExceptionUtils.getFullStackTrace(e));
		}
		return content;
	}
}
 
分享到:
评论

相关推荐

    02--HDFS Java API操作.docx

    HDFS Java API 是 Hadoop 中的一部分,提供了一个 Java 编程接口来访问和操作 HDFS 中的文件和目录。该 API 提供了多种方法来操作文件和目录,包括创建、删除、读取和写入文件,列出目录中的文件和子目录等。 二、...

    java操作Hadoop源码之HDFS Java API操作-上传文件

    在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...

    hdfs-java-api

    * 高性能:HDFS Java API 提供了高性能的文件操作,能够满足大规模数据处理的需求。 * 高可靠性:HDFS Java API 提供了高可靠性的文件操作,能够确保数据的安全。 * 高灵活性:HDFS Java API 提供了高灵活性的文件...

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    Java API提供了访问HDFS的接口,例如`org.apache.hadoop.fs.FileSystem`类,可以用于读取、写入和管理文件系统中的文件。 2. **Hadoop MapReduce**:MapReduce是Hadoop用于并行处理和分析大数据的编程模型。在GROUP...

    java操作Hadoop源码之HDFS Java API操作-创建目录

    以上就是使用Java API操作Hadoop HDFS创建目录的完整过程。在实际应用中,你可能需要处理异常,优化错误处理,并根据具体需求进行更复杂的操作,比如读写文件、检查文件是否存在等。通过熟练掌握HDFS的Java API,你...

    elcipse java hadoop操作hdfs的api

    本资料主要涵盖了如何使用Eclipse环境进行Java开发,利用Hadoop的HDFS API来操作分布式文件系统。以下是对这些知识点的详细阐述: 1. **HDFS API**:HDFS API是Hadoop的核心组件之一,提供了对分布式文件系统的基本...

    ecplise远程连接hadoop--hdfs java api操作文件.pdf

    开发者需要使用Hadoop的HDFS API提供的类和方法来实现这些操作。编写代码之后,就是运行测试用例,以验证代码逻辑的正确性和功能的实现。 需要注意的是,上述步骤中涉及到的文件名和目录可能因为操作系统的不同以及...

    基于Hadoop HDFS的分布式文件系统操作工具.zip

    它提供了一系列API和工具类,用于简化与HDFS的交互,包括文件的上传、下载、删除、目录创建等操作。通过这些工具,用户可以方便地管理和操作存储在HDFS上的文件和目录。 项目的主要特性和功能 1. 文件上传与下载 ...

    大数据技术基础实验报告-调用Java API实现HDFS操作.doc

    在实际编程中,我们通常会创建一个Java类,导入Hadoop的相关库,然后使用FileSystem类和Path类等来执行HDFS操作。例如,使用`FileSystem.get(conf)`获取FileSystem实例,其中conf是包含HDFS配置信息的Configuration...

    java整合spring和hadoop HDFS全部jar

    例如,我们可以创建一个`HdfsTemplate`的bean,用于执行HDFS操作。配置中需要提供HDFS的地址、端口以及认证信息等。 3. **编写Java代码**:在Spring环境中,我们可以注入`HdfsTemplate`,然后调用其提供的方法来...

    JavaWeb操作hadoop2.6 HDFS,从页面上传,下载,列表展示的demo

    6. **MyBatis映射**:虽然HDFS操作主要是文件I/O,但在某些场景下,可能需要将文件元数据存储在关系数据库中,以便于管理和查询。MyBatis可以帮助我们方便地完成这些数据库操作。 7. **前端界面**:使用HTML、CSS和...

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

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

    Hadoop+HBase+Java API

    **Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...

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

    在Hadoop生态系统中,Java...总之,Java与Hadoop 2.4的HDFS交互涉及配置、连接、I/O操作以及文件和目录的管理。通过熟练掌握`FileSystem` API,你可以有效地编写管理HDFS的Java程序,实现对大数据集的高效存储和处理。

    HDFSJavaAPI.tar.gz_HDFS JAVA API_hdfs

    HDFS Java API是Hadoop提供的一套接口,允许开发者通过编写Java代码来与HDFS进行交互。以下是一些关键的HDFS Java API知识点: 1. **初始化HDFS客户端**:使用`Configuration`类配置HDFS连接参数,如NameNode地址。...

    利用javaAPI访问HDFS的文件

    在Java程序中操作HDFS文件主要依赖于`org.apache.hadoop.fs.FileSystem`类,该类提供了许多方法用于执行文件系统操作,如创建文件、删除文件、读写文件等。 ##### 1. 创建文件系统实例 ```java Configuration conf ...

    详细简单的hdfs java的api接口实现

    HDFS API是Hadoop的核心组件之一,它提供了一组Java类和接口,允许用户在HDFS上执行各种操作。主要涉及的类有`FileSystem`、`DFSClient`和`DFSOutputStream`等,而核心接口包括`DFSInputStream`、`DFSOutputStream`...

    springmvc+hadoop+maven实现文件上传至hdfs

    在实际实现中,可能还需要编写一个HDFS操作工具类,这个类封装了连接HDFS、上传文件等操作。例如,可能会有一个名为`HdfsUploader`的类,其中包含如`uploadFile()`这样的方法,该方法接受文件路径和HDFS目标路径作为...

Global site tag (gtag.js) - Google Analytics