最近一段时间又开始做hadoop相关开发,包括hdfs、mr、hbase、hive等,又有了更进一步的了解,下边就简单写些封装好的java操作hdfs的工具类中的方法。
1、从HDFS上指定的文件中读取子目录
public static List<String> getSubDirs(String rootDir) {
// 存放最后返回的文件夹列表
List<String> fileList = new ArrayList<String>();
try {
FileSystem fs = FileSystem.get(URI.create(rootDir),
ConfigurationUtil.conf);
Path rootPath = new Path(rootDir);
FileStatus fileStatus = fs.getFileStatus(rootPath);
// 如果传入的是个文件则不再遍历之
if (!fileStatus.isDir()) {
fileList.add(fileStatus.getPath().toString());
} else {
FileStatus[] fileStatusArray = fs.listStatus(rootPath);
for (FileStatus fileState : fileStatusArray) {
fileList.add(fileState.getPath().toString());
}
}
// fs.close();
} catch (Exception e) {
e.printStackTrace();
}
return fileList;
}
2、从HDFS上读取文件,并存储到本地
public static void readFromHdfs(String fromFile,String outputFile) throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(fromFile), conf);
FSDataInputStream hdfsInStream = fs.open(new Path(fromFile));
OutputStream out = new FileOutputStream(outputFile);
byte[] ioBuffer = new byte[1024];
int readLen = hdfsInStream.read(ioBuffer);
while (-1 != readLen) {
out.write(ioBuffer, 0, readLen);
System.out.println(new String(ioBuffer, "utf-8"));
readLen = hdfsInStream.read(ioBuffer);
}
out.close();
hdfsInStream.close();
// fs.close();
}
3、将指定的文件路径从hdfs读取并转换为byte array
public static byte[] readFromFileToByteArray(String srcFile)
throws Exception {
if (StringOperatorUtil.isBlank(srcFile)) {
throw new Exception("所要读取的源文件" + srcFile + ",不存在,请检查!");
}
FileSystem fs = FileSystem.get(ConfigurationUtil.conf);
FSDataInputStream hdfsInStream = fs.open(new Path(srcFile));
byte[] byteArray = new byte[65536];
// 存放最后的所有字节数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// 实际读过来多少
int readLen = 0;
while ((readLen = hdfsInStream.read(byteArray)) > 0) {
bos.write(byteArray);
byteArray = new byte[65536];
}
// logger.info("srcFile---"+srcFile+"读到的字节数为---"+readLen);
// System.out.println("srcFile---" + srcFile + "读到的字节数为---" +);
hdfsInStream.close();
// fs.close();
return bos.toByteArray();
}
4、将一个本地文件或文件夹上传到hdfs上 isCheckExist是否检查输出目录的存在性,若检查,则存在时不予执行复盖操作
public static boolean copyLocalFileToHdfs(String fromFile, String toFile,
Boolean isCheckExist) throws Exception {
try {
FileSystem fs = FileSystem.get(ConfigurationUtil.conf);
Path srcPath = new Path(fromFile); // 原路径
Path dstPath = new Path(toFile); // 目标路径
// 首先判断源路径是否存在,和输出路轻是否存在,则存在抛出异常,防止被误覆盖掉
if (!new File(fromFile).exists()) {
throw new Exception("要拷贝源文件" + fromFile + ",不存在,请检查!");
}
if (isCheckExist) {
if (fs.exists(dstPath)) {
// throw new Exception("要拷贝到的输出目录或文件已存在" + dstPath +
// ",请检查!");
logger.info("要粘贴到的目录" + toFile + ",已存在,不再重新粘贴!");
return true;
}
}
// 调用文件系统的文件复制函数,前面参数是指是否删除原文件,true为删除,默认为false
fs.copyFromLocalFile(false, srcPath, dstPath);
// fs.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
分享到:
相关推荐
HDFSUtil类是Java中用于与HDFS进行交互的工具类,它封装了HDFS API的基本操作。这些操作包括但不限于: - 构造`Configuration`对象:这是HDFS客户端与HDFS集群通信的关键,用于存储HDFS的相关配置信息。 - 设置...
本篇将深入探讨如何利用Hadoop的Java接口进行文件操作,实现对Hadoop服务的增、删、改、查等功能。 首先,我们要了解Hadoop的核心组件:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是Hadoop的数据...
ArrayList、LinkedList、HashSet、HashMap等都是常用的数据结构,它们提供了高效存储和操作数据的方式。此外,Java 8引入了流(Stream)和Lambda表达式,这些新特性极大地简化了对集合的处理,提高了代码的可读性和...
首先,Java基础部分通常包括Java语法、面向对象编程概念(如封装、继承和多态)、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)以及输入/输出流。这些基本概念是每个Java开发者必须掌握的,它们构成了...
- **封装**:将数据和操作数据的方法绑定在一起,隐藏内部实现细节。 - **继承**:子类继承父类的特性,实现代码复用。 - **多态**:同一操作作用于不同的对象可以有不同的解释,并产生不同的执行结果。 - **变量**...
3. **基本数据类型与封装类**:Java中的基本数据类型如int、float等与对应的封装类如Integer、Float等有明显的区别,封装类提供了更多的方法和功能,但会占用更多内存。 4. **类型转换**:浮点型常量默认为double...
3. **面向对象编程**:面向对象编程(OOP)是Java的基础,强调封装、继承和多态性。简历中提到的常用设计模式如单例、装饰、策略、模板、工厂、观察者等都是OOP设计原则的体现。 4. **JavaWeb技术**:涵盖了JSP、...
1. **Java基础**:Java语言是大数据处理的基础,掌握其基本语法、面向对象编程概念(封装、继承、多态)、异常处理、集合框架(List、Set、Map)以及并发编程(线程、锁机制)是基础中的基础。 2. **Java高级特性**...
Java Archive (JAR) 文件是Java编程语言中用于封装多个类、资源和其他文件的容器,其目的是便于分发和管理这些组件。JAR文件本质上是一个采用ZIP压缩格式的归档文件,可以包含类文件、图像、声音、文本以及其他类型...
以上内容涵盖了Java面试中常见的知识点,包括Java基础、集合框架、高并发编程、JVM内存管理、Java 8新特性、网络协议、数据库操作、MVC框架以及Linux常用命令等方面,希望对准备面试的开发者有所帮助。
主数据库负责写操作,从数据库负责读操作。 - **复制方式**:包括异步复制和半同步复制。异步复制延迟较高但性能好;半同步复制延迟较低但可能会影响写入性能。 ##### 4. 动静态分离 - **Nginx配置**:通过Nginx将...
**Linux操作系统**:Linux是大数据平台的常用操作系统,课程介绍了Linux的基本概念、安装方法,以及VMware Workstation虚拟机的使用。在Ubuntu上,学习了常用命令,如进程管理、权限管理,以及网络配置等,这些都是...
本项目采用经典的“jsp+javabean+servlet”模式进行开发,这是一种在Java Web开发中常用的技术栈,具有良好的可维护性和扩展性。 1. **JSP(JavaServer Pages)**:JSP是Java EE平台的一部分,用于创建动态网页。...
数据结构与算法(Java)部分,主要内容包括常用数据结构(线性表、栈、队列、树、图等)的特点、存储表示、排序算法、查找算法等,旨在培养学生的数据结构和算法知识,并掌握度量算法效率的基本方法。 应用统计学与...
这一课程旨在让学生掌握计算机基本操作,包括硬件知识、操作系统安装、Windows系统操作、办公软件使用、DOS操作与网络基础,以及常用工具软件的熟练使用。教学方式以线上学习为主,辅以教师指导,考核则结合在线打字...
1. **Java基础**:Java语言的基础部分是面试中的常见话题,包括变量、数据类型、运算符、控制结构(if/else, for, while, switch)、类与对象、封装、继承、多态、接口、异常处理等。 2. **集合框架**:深入理解...
DIRS: Distributed Image Retrieval System === 本项目实现了基于分布式数据库的图像检索系统。其中,TF-IDF作为相似度依据,MapReduce...imtools.py 封装了常用的操作,例如生成路径列表 HBaseConfigure.py HBase配置
- **HDFS Java API**:提供利用Java API访问HDFS的示例代码。 - **InputSplit和OutputSplit**:解释MapReduce任务中的输入分割和输出分割机制。 - **Block Size配置**:探讨HDFS块大小的配置选项及其对性能的影响。 ...
- **Java开发基础知识**:包括Eclipse开发环境的使用,Java语言的基本语法,如类、对象、封装、继承、多态等面向对象特性。 - **多线程技术**:Java中如何创建和管理线程,线程同步机制,如synchronized关键字、...
这个类可能封装了一些常用操作,如HFile的生成、移动以及与HBase的交互。具体实现可能包括: - 提供方便的方法来配置和启动MapReduce作业。 - 自动计算和设置目标Region的信息。 - 实现HFile的移动和清理逻辑。 - ...