Hadoop HDFS 工具类

本文作者分享了在频繁操作HDFS时,为提高效率封装的一个HDFS工具类,使得代码更加简洁。文章附带了部分注释,并提到辅助的SizeConvert工具类用于单位转换。最后,作者祝愿大家节日快乐。
摘要由CSDN通过智能技术生成

今天操作hdfs有些频繁,作为一个资深的大四小白码农,封装是一种职业病,于是乎,忙里偷闲的写了一个工具类供其他类使用,看着main函数里简短的几行代码,不禁长吁一口气。
话不多说,贴上自己的代码。(为了更好的方便自己和他人,我破例写了一些注释,手动滑稽)

import java.io.IOException;
import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.Date;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.IOUtils;
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.FileUtil;
import org.apache.hadoop.fs.FsStatus;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;

public class HDFSUtils {
	private String strUri = "hdfs://192.168.52.129:9000";
	private String strHadoopTmp = "E:\\Application\\hadoop-3";
	private FileSystem fs = null;
	private String user = "hadoop";
	private Configuration conf = new Configuration();

	private void init() throws IOException, InterruptedException, URISyntaxException {
		if (System.getProperty("os.name").equalsIgnoreCase("windows")) {
			System.setProperty("hadoop.tmp.dir", strHadoopTmp);
		}
		fs = FileSystem.get(new URI(strUri), conf, user);
	}

	public HDFSUtils() throws IOException, InterruptedException, URISyntaxException {
		init();
	}

	/**
	 * 
	 * @param strUri       Hadoop URI
	 * @param strHadoopTmp hadoop.tmp.dir
	 * @param user         用户名
	 * @throws IOException
	 * @throws InterruptedException
	 * @throws URISyntaxException
	 */
	public HDFSUtils(String strUri, String strHadoopTmp, String user)
			throws IOException, InterruptedException, U
Hadoop是一个开源的框架,它允许使用简单的编程模型跨计算机集群分布式处理大数据。Hadoop的核心是HDFSHadoop Distributed File System),这是一个高度容错的系统,适合在廉价硬件上存储大数据。封装HDFS工具类通常是为了简化与HDFS的交互,使其更加方便和高效。一个典型的封装类可能会包含如下功能: 1. 连接和配置HDFS:设置Hadoop的配置参数,初始化FileSystem实例。 2. 文件操作:包括但不限于创建目录、列出文件、删除文件或目录、重命名文件、读写文件等。 3. 文件状态检查:获取文件或目录的元数据,比如大小、权限、复制因子等。 4. 错误处理:封装异常处理逻辑,处理常见的I/O异常,使上层调用更加清晰。 5. 资源管理:确保打开的资源被正确关闭,比如文件流、连接等。 在Java中,可以使用Hadoop提供的API来实现这样一个工具类。以下是一个简单的封装工具类的示例代码: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Progressable; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; public class HdfsUtil implements Closeable { private FileSystem fs; private Configuration conf; public HdfsUtil(String hdfsUri, String user) throws IOException { conf = new Configuration(); conf.set("fs.defaultFS", hdfsUri); fs = FileSystem.get(URI.create(hdfsUri), conf, user); } public void uploadFile(File src, String dst) throws IOException { Path dstPath = new Path(dst); Path srcPath = new Path(src.getPath()); fs.copyFromLocalFile(srcPath, dstPath); } public void downloadFile(String src, File dst) throws IOException { Path dstPath = new Path(dst.getPath()); Path srcPath = new Path(src); fs.copyToLocalFile(srcPath, dstPath); } // 更多的封装方法可以在这里实现,比如列出目录下的文件,删除文件等 @Override public void close() throws IOException { IOUtils.closeStream(fs); } } ``` 使用此类时,你可以这样操作: ```java public class HdfsExample { public static void main(String[] args) { try (HdfsUtil hdfsUtil = new HdfsUtil("hdfs://namenode:8020", "user")) { hdfsUtil.uploadFile(new File("localfile.txt"), "/user/hadoop/uploadedfile.txt"); hdfsUtil.downloadFile("/user/hadoop/uploadedfile.txt", new File("localfile_download.txt")); } catch (IOException e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值