前几天看到篇文章,是用java的API操作HDFS的文件系统。那篇文章单独介绍了每个api的使用,为了以后方便使用,我写成了一个类,现分享给大家。
文件操作类:
比较简单,大家也可以自己完善。
import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; 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 org.apache.hadoop.io.IOUtils; public class HDFS_File { //read the file from 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) { // TODO Auto-generated catch block e.printStackTrace(); } } //copy the file from HDFS to local public void GetFile(Configuration conf, String srcFile, String dstFile){ try { FileSystem hdfs = FileSystem.get(conf); Path srcPath = new Path(srcFile); Path dstPath = new Path(dstFile); hdfs.copyToLocalFile(true,srcPath, dstPath); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //copy the local file to 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) { // TODO Auto-generated catch block e.printStackTrace(); } } //create the new file public FSDataOutputStream CreateFile(Configuration conf, String FileName){ try { Configuration config = new Configuration(); FileSystem hdfs = FileSystem.get(config); Path path = new Path(FileName); FSDataOutputStream outputStream = hdfs.create(path); return outputStream; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //rename the file name public boolean ReNameFile(Configuration conf, String srcName, String dstName){ try { Configuration config = new Configuration(); FileSystem hdfs = FileSystem.get(config); Path fromPath = new Path(srcName); Path toPath = new Path(dstName); boolean isRenamed = hdfs.rename(fromPath, toPath); return isRenamed; }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } //delete the file // tyep = true, delete the directory // type = false, delece the file public boolean DelFile(Configuration conf, String FileName, boolean type){ try { Configuration config = new Configuration(); FileSystem hdfs = FileSystem.get(config); Path path = new Path(FileName); boolean isDeleted = hdfs.delete(path, type); return isDeleted; }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } //Get HDFS file last modification time public long GetFileModTime(Configuration conf, String FileName){ try{ Configuration config = new Configuration(); FileSystem hdfs = FileSystem.get(config); Path path = new Path(FileName); FileStatus fileStatus = hdfs.getFileStatus(path); long modificationTime = fileStatus.getModificationTime(); return modificationTime; }catch(IOException e){ e.printStackTrace(); } return 0; } //checke if a file exists in HDFS public boolean CheckFileExist(Configuration conf, String FileName){ try{ Configuration config = new Configuration(); FileSystem hdfs = FileSystem.get(config); Path path = new Path(FileName); boolean isExists = hdfs.exists(path); return isExists; }catch(IOException e){ e.printStackTrace(); } return false; } //Get the locations of a file in the HDFS cluster public List<String []> GetFileBolckHost(Configuration conf, String FileName){ try{ List<String []> list = new ArrayList<String []>(); Configuration config = new Configuration(); FileSystem hdfs = FileSystem.get(config); 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; } //Get a list of all the nodes host names in the HDFS cluster public String[] GetAllNodeName(Configuration conf){ try{ Configuration config = new Configuration(); FileSystem fs = FileSystem.get(config); DistributedFileSystem hdfs = (DistributedFileSystem) fs; DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats(); String[] names = new String[dataNodeStats.length]; for (int i = 0; i < dataNodeStats.length; i++) { names[i] = dataNodeStats[i].getHostName(); } return names; }catch(IOException e){ e.printStackTrace(); } return null; } }
自己写的测试程序:
import java.io.IOException; import java.util.Date; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; public class File_Operation { public static void main(String args[]){ Configuration conf = new Configuration(); HDFS_File file = new HDFS_File(); //print all the node name String[] host_name = file.GetAllNodeName(conf); for (int i = 0; i<host_name.length; i++) { System.out.println("the host name:"+host_name); } //create the file String File_Name = "my_test"; FSDataOutputStream fs = file.CreateFile(conf, File_Name); if (fs != null){ try { fs.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(File_Name+"create OK"); } else{ System.out.println(File_Name+"create fail"); } //check the file exists if (file.CheckFileExist(conf, File_Name) == true){ System.out.println(File_Name+"the file exists"); } else{ System.out.println(File_Name+"the file not exists"); } //delete the file if (file.DelFile(conf, File_Name, false) == true){ System.out.println(File_Name+"the file delete"); } else{ System.out.println(File_Name+"the file not delete"); } //copy the file to HDFS String srcFile = "/home/jackydai/my"; String ToFile = "/home/jackydai/my11"; String dstFile = "/user/jackydai/my"; file.PutFile(conf, srcFile, dstFile); System.out.println("copy file ok!"); //check the file last modfiy time long mod_time = file.GetFileModTime(conf, dstFile); Date d = new Date(mod_time); System.out.println("the modefile time"+d); //get the locations of a file in HDFS List<String []> list = file.GetFileBolckHost(conf, dstFile); for (int i = 0; i < list.size(); i++){ for(int j = 0; j < list.get(i).length; j++){ System.out.println("the bolck host name:"+list.get(i)[j]); } } System.out.println("host name over!"); //read the file file.ReadFile(conf, dstFile); System.out.println("read over!"); //copy the file to local file.GetFile(conf, dstFile, ToFile); System.out.println("copy ok"); } }
您还没有登录,请您登录后再发表评论
在这个Java API中,我们可以找到一系列的类和接口,它们允许开发者编写应用程序来利用Hadoop的功能。 在Hadoop 2.x及以上版本中,Java API进行了许多优化和改进,以提高性能和稳定性。以下是一些主要的组件和概念:...
在Hadoop生态系统中,Java...总之,Java与Hadoop 2.4的HDFS交互涉及配置、连接、I/O操作以及文件和目录的管理。通过熟练掌握`FileSystem` API,你可以有效地编写管理HDFS的Java程序,实现对大数据集的高效存储和处理。
在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...
通过本次实验学习到了Hadoop Shell接口和Java接口的基本使用方法,理解了如何通过Shell命令和Java程序操作HDFS。特别需要注意的是路径的正确设置以及JAR包的正确导入。在实验过程中还发现了一些细节问题,例如使用...
Java API提供了访问HDFS的接口,例如`org.apache.hadoop.fs.FileSystem`类,可以用于读取、写入和管理文件系统中的文件。 2. **Hadoop MapReduce**:MapReduce是Hadoop用于并行处理和分析大数据的编程模型。在GROUP...
本主题将深入探讨如何使用Java编程语言与SSH工具在Hadoop平台上进行文件操作和结果查询。Hadoop作为开源的大数据处理框架,提供了一个分布式文件系统(HDFS)和MapReduce计算模型,使得大规模数据处理变得可能。 ...
1. **HDFS操作**:代码可能包含了使用Hadoop的FSDataInputStream和FSDataOutputStream接口读写HDFS文件的示例,以及如何创建、删除、移动和复制文件或目录的操作。 2. **MapReduce编程**:Java源码中会包含Mapper和...
Hadoop HDFS模块提供了对HDFS的编程接口,让开发者可以编写代码来操作文件系统。 使用这些依赖包时,Java开发者首先需要在项目中引入对应的jar文件,通常通过Maven或Gradle等构建工具管理依赖。然后,他们可以利用...
HDFS提供了丰富的Java接口,允许开发人员在应用程序中直接操作HDFS。例如,`FileSystem`类提供了创建、打开、关闭文件或目录的方法,`DFSClient`类负责实际的网络通信,而`DFSOutputStream`和`DFSInputStream`则用于...
HDFS的JAR包包含了实现文件系统接口的类,如`hadoop-hdfs-client.jar`,以及在集群中运行的DataNode和NameNode的服务器端组件,如`hadoop-hdfs.jar`。 2. **MapReduce**:Hadoop的MapReduce是一种编程模型,用于大...
本文件描述的是一个名为`HdfsService`的Java类,该类用于执行HDFS上的基本文件操作,如上传、下载、查看以及管理目录。下面将详细解释这些操作的实现及其相关的Hadoop API。 首先,`HdfsService`类初始化了一个`...
Java编程包是Hadoop的核心组成部分,因为Hadoop主要是用Java编写的,并且提供了丰富的API供开发者进行扩展和自定义。下面将详细讨论Hadoop与Java编程的相关知识点。 1. **Hadoop的基本概念** - **分布式文件系统...
**Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...
无论采用哪种配置方法,都需要对Hadoop集群的core-site.xml文件进行相应的配置,包括设置文件系统默认名称为viewfs:///,以及配置BeeGFS抽象文件系统的实现类。此外,还需要为Hadoop集群中的每个目录创建挂载表条目...
- 文件操作:如创建、打开、关闭、重命名和删除文件或目录。`FileSystem`类提供了这些操作的方法,例如`FileSystem.create()`用于创建文件,`FileSystem.rename()`用于重命名。 - 数据读写:`FSDataInputStream`和...
可能的教学内容包括Hadoop的架构介绍、Java MapReduce编程模型、HDFS的操作和管理,以及如何在集群上运行和调试Java写的Hadoop程序。 总的来说,"Hadoop教学使用java_jdk"涵盖了大数据处理的关键技术和工具,通过...
为了方便Java开发者与HDFS进行交互,Hadoop提供了丰富的JAVA接口API。下面我们将深入探讨HDFS的JAVA接口API操作实例。 首先,使用HDFS API前,需要在项目中引入Hadoop的相关依赖。通常,这可以通过Maven或Gradle来...
1. **权限问题**:确保用户具有足够的权限来执行文件操作。 2. **网络问题**:检查客户端和HDFS集群之间的网络连接是否正常。 3. **配置文件**:确保`core-site.xml`等配置文件正确无误,并且与Hadoop集群的实际情况...
Hadoop的核心库`hadoop-core`包含了实现这些功能的Java类和接口。在`hadoop-core-0.20.2-320-sources.jar`这个文件中,我们可以找到源代码,这对于开发者来说非常有价值,因为它允许他们深入了解Hadoop的工作原理,...
相关推荐
在这个Java API中,我们可以找到一系列的类和接口,它们允许开发者编写应用程序来利用Hadoop的功能。 在Hadoop 2.x及以上版本中,Java API进行了许多优化和改进,以提高性能和稳定性。以下是一些主要的组件和概念:...
在Hadoop生态系统中,Java...总之,Java与Hadoop 2.4的HDFS交互涉及配置、连接、I/O操作以及文件和目录的管理。通过熟练掌握`FileSystem` API,你可以有效地编写管理HDFS的Java程序,实现对大数据集的高效存储和处理。
在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...
通过本次实验学习到了Hadoop Shell接口和Java接口的基本使用方法,理解了如何通过Shell命令和Java程序操作HDFS。特别需要注意的是路径的正确设置以及JAR包的正确导入。在实验过程中还发现了一些细节问题,例如使用...
Java API提供了访问HDFS的接口,例如`org.apache.hadoop.fs.FileSystem`类,可以用于读取、写入和管理文件系统中的文件。 2. **Hadoop MapReduce**:MapReduce是Hadoop用于并行处理和分析大数据的编程模型。在GROUP...
本主题将深入探讨如何使用Java编程语言与SSH工具在Hadoop平台上进行文件操作和结果查询。Hadoop作为开源的大数据处理框架,提供了一个分布式文件系统(HDFS)和MapReduce计算模型,使得大规模数据处理变得可能。 ...
1. **HDFS操作**:代码可能包含了使用Hadoop的FSDataInputStream和FSDataOutputStream接口读写HDFS文件的示例,以及如何创建、删除、移动和复制文件或目录的操作。 2. **MapReduce编程**:Java源码中会包含Mapper和...
Hadoop HDFS模块提供了对HDFS的编程接口,让开发者可以编写代码来操作文件系统。 使用这些依赖包时,Java开发者首先需要在项目中引入对应的jar文件,通常通过Maven或Gradle等构建工具管理依赖。然后,他们可以利用...
HDFS提供了丰富的Java接口,允许开发人员在应用程序中直接操作HDFS。例如,`FileSystem`类提供了创建、打开、关闭文件或目录的方法,`DFSClient`类负责实际的网络通信,而`DFSOutputStream`和`DFSInputStream`则用于...
HDFS的JAR包包含了实现文件系统接口的类,如`hadoop-hdfs-client.jar`,以及在集群中运行的DataNode和NameNode的服务器端组件,如`hadoop-hdfs.jar`。 2. **MapReduce**:Hadoop的MapReduce是一种编程模型,用于大...
本文件描述的是一个名为`HdfsService`的Java类,该类用于执行HDFS上的基本文件操作,如上传、下载、查看以及管理目录。下面将详细解释这些操作的实现及其相关的Hadoop API。 首先,`HdfsService`类初始化了一个`...
Java编程包是Hadoop的核心组成部分,因为Hadoop主要是用Java编写的,并且提供了丰富的API供开发者进行扩展和自定义。下面将详细讨论Hadoop与Java编程的相关知识点。 1. **Hadoop的基本概念** - **分布式文件系统...
**Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...
无论采用哪种配置方法,都需要对Hadoop集群的core-site.xml文件进行相应的配置,包括设置文件系统默认名称为viewfs:///,以及配置BeeGFS抽象文件系统的实现类。此外,还需要为Hadoop集群中的每个目录创建挂载表条目...
- 文件操作:如创建、打开、关闭、重命名和删除文件或目录。`FileSystem`类提供了这些操作的方法,例如`FileSystem.create()`用于创建文件,`FileSystem.rename()`用于重命名。 - 数据读写:`FSDataInputStream`和...
可能的教学内容包括Hadoop的架构介绍、Java MapReduce编程模型、HDFS的操作和管理,以及如何在集群上运行和调试Java写的Hadoop程序。 总的来说,"Hadoop教学使用java_jdk"涵盖了大数据处理的关键技术和工具,通过...
为了方便Java开发者与HDFS进行交互,Hadoop提供了丰富的JAVA接口API。下面我们将深入探讨HDFS的JAVA接口API操作实例。 首先,使用HDFS API前,需要在项目中引入Hadoop的相关依赖。通常,这可以通过Maven或Gradle来...
1. **权限问题**:确保用户具有足够的权限来执行文件操作。 2. **网络问题**:检查客户端和HDFS集群之间的网络连接是否正常。 3. **配置文件**:确保`core-site.xml`等配置文件正确无误,并且与Hadoop集群的实际情况...
Hadoop的核心库`hadoop-core`包含了实现这些功能的Java类和接口。在`hadoop-core-0.20.2-320-sources.jar`这个文件中,我们可以找到源代码,这对于开发者来说非常有价值,因为它允许他们深入了解Hadoop的工作原理,...