HDFS中JAVA API的使用

来自:http://www.cnblogs.com/liuling/p/2013-6-17-01.html


1、重读配置文件core-site.xml

要利用Java客户端来存取HDFS上的文件,不得不说的是配置文件Hadoop-0.20.2/conf/core-site.xml了,最初我就是在这里吃了大亏,所以我死活连不上HDFS,文件无法创建、读取。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!--- global properties -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/zhangzk/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://linux-zzk-113:9000</value>
</property>
</configuration>

配置项:hadoop.tmp.dir表示命名节点上存放元数据的目录位置,对于数据节点则为该节点上存放文件数据的目录。 

配置项:fs.default.name表示命名IP地址和端口号,缺省值是file:///,对于JavaAPI来讲,连接HDFS必须使用这里的配置的URL地址,对于数据节点来讲,数据节点通过该URL来访问命名节点。



HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件、删除文件、读取文件内容等操作。下面记录一下使用JAVA API对HDFS中的文件进行操作的过程。

  对分HDFS中的文件操作主要涉及一下几个类:

  Configuration类:该类的对象封转了客户端或者服务器的配置。

  FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。FileSystem fs = FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。

  FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入输出流。分别通过FileSystem的open方法和create方法获得。

  具体如何对文件操作清下下面例子:

复制代码
  1 package com.hdfs;
  2 
  3 import java.io.FileInputStream;
  4 import java.io.IOException;
  5 import java.io.InputStream;
  6 
  7 import org.apache.hadoop.conf.Configuration;
  8 import org.apache.hadoop.fs.FSDataOutputStream;
  9 import org.apache.hadoop.fs.FileStatus;
 10 import org.apache.hadoop.fs.FileSystem;
 11 import org.apache.hadoop.fs.Path;
 12 import org.apache.hadoop.io.IOUtils;
 13 
 14 public class HdfsTest {
 15     
 16     //创建新文件
 17     public static void createFile(String dst , byte[] contents) throws IOException{
 18         Configuration conf = new Configuration();
 19         FileSystem fs = FileSystem.get(conf);
 20         Path dstPath = new Path(dst); //目标路径
 21         //打开一个输出流
 22         FSDataOutputStream outputStream = fs.create(dstPath);
 23         outputStream.write(contents);
 24         outputStream.close();
 25         fs.close();
 26         System.out.println("文件创建成功!");
 27     }
 28     
 29     //上传本地文件
 30     public static void uploadFile(String src,String dst) throws IOException{
 31         Configuration conf = new Configuration();
 32         FileSystem fs = FileSystem.get(conf);
 33         Path srcPath = new Path(src); //原路径
 34         Path dstPath = new Path(dst); //目标路径
 35         //调用文件系统的文件复制函数,前面参数是指是否删除原文件,true为删除,默认为false
 36         fs.copyFromLocalFile(false,srcPath, dstPath);
 37         
 38         //打印文件路径
 39         System.out.println("Upload to "+conf.get("fs.default.name"));
 40         System.out.println("------------list files------------"+"\n");
 41         FileStatus [] fileStatus = fs.listStatus(dstPath);
 42         for (FileStatus file : fileStatus) 
 43         {
 44             System.out.println(file.getPath());
 45         }
 46         fs.close();
 47     }
 48     
 49     //文件重命名
 50     public static void rename(String oldName,String newName) throws IOException{
 51         Configuration conf = new Configuration();
 52         FileSystem fs = FileSystem.get(conf);
 53         Path oldPath = new Path(oldName);
 54         Path newPath = new Path(newName);
 55         boolean isok = fs.rename(oldPath, newPath);
 56         if(isok){
 57             System.out.println("rename ok!");
 58         }else{
 59             System.out.println("rename failure");
 60         }
 61         fs.close();
 62     }
 63     //删除文件
 64     public static void delete(String filePath) throws IOException{
 65         Configuration conf = new Configuration();
 66         FileSystem fs = FileSystem.get(conf);
 67         Path path = new Path(filePath);
 68         boolean isok = fs.deleteOnExit(path);
 69         if(isok){
 70             System.out.println("delete ok!");
 71         }else{
 72             System.out.println("delete failure");
 73         }
 74         fs.close();
 75     }
 76     
 77     //创建目录
 78     public static void mkdir(String path) throws IOException{
 79         Configuration conf = new Configuration();
 80         FileSystem fs = FileSystem.get(conf);
 81         Path srcPath = new Path(path);
 82         boolean isok = fs.mkdirs(srcPath);
 83         if(isok){
 84             System.out.println("create dir ok!");
 85         }else{
 86             System.out.println("create dir failure");
 87         }
 88         fs.close();
 89     }
 90     
 91     //读取文件的内容
 92     public static void readFile(String filePath) throws IOException{
 93         Configuration conf = new Configuration();
 94         FileSystem fs = FileSystem.get(conf);
 95         Path srcPath = new Path(filePath);
 96         InputStream in = null;
 97         try {
 98             in = fs.open(srcPath);
 99             IOUtils.copyBytes(in, System.out, 4096, false); //复制到标准输出流
100         } finally {
101             IOUtils.closeStream(in);
102         }
103     }
104     
105     
106     public static void main(String[] args) throws IOException {
107         //测试上传文件
108         //uploadFile("D:\\c.txt", "/user/hadoop/test/");
109         //测试创建文件
110         /*byte[] contents =  "hello world 世界你好\n".getBytes();
111         createFile("/user/hadoop/test1/d.txt",contents);*/
112         //测试重命名
113         //rename("/user/hadoop/test/d.txt", "/user/hadoop/test/dd.txt");
114         //测试删除文件
115         //delete("test/dd.txt"); //使用相对路径
116         //delete("test1");    //删除目录
117         //测试新建目录
118         //mkdir("test1");
119         //测试读取文件
120         readFile("test1/d.txt");
121     }
122 
123 }
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HDFSJava API可以在Eclipse使用。首先,需要在Eclipse创建一个Java项目,并将Hadoop的jar文件添加到项目的classpath。然后,可以使用HDFSJava API来编写代码,例如读取和写入文件,创建目录等。在运行代码之前,需要确保Hadoop集群正在运行,并且可以通过配置文件连接到HDFS。可以使用以下代码来连接到HDFS: Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); FileSystem fs = FileSystem.get(conf); 其,"localhost:9000"是HDFS的默认地址。然后,可以使用FileSystem对象来执行各种操作,例如: // 创建一个新的目录 fs.mkdirs(new Path("/mydir")); // 写入一个文件 FSDataOutputStream out = fs.create(new Path("/myfile.txt")); out.writeBytes("Hello, world!"); out.close(); // 读取一个文件 FSDataInputStream in = fs.open(new Path("/myfile.txt")); byte[] buffer = new byte[1024]; int bytesRead = in.read(buffer); in.close(); // 删除一个文件 fs.delete(new Path("/myfile.txt"), true); 这只是HDFS Java API的一小部分,还有很多其他的操作和函数可以使用。 ### 回答2: HDFS是Hadoop分布式文件系统的缩写,是一个可扩展的、基于分布式的文件系统。使用HDFS可以存储大型数据集并运行大型数据处理应用程序,其Java API可用于与HDFS进行交互和操作。其,Eclipse作为一种流行的Java开发环境,也可以用于开发基于HDFSJava应用程序。 在使用Eclipse开发HDFS Java程序之前,我们需要下载和安装Hadoop,并在Eclipse设置其环境变量。接下来,我们可以在Eclipse创建一个Java项目,并将Hadoop的相关JAR包添加到项目的类路径,以便能够使用Hadoop API。 首先,我们需要创建一个Configuration对象,该对象用于指定运行Hadoop的集群配置信息。该配置信息包括文件系统URI、用户ID和集群节点等信息。在创建Configuration对象时,我们可以使用已知的XML配置文件,也可以从程序指定。 接下来,我们可以使用FileSystem对象来操作HDFS文件系统。我们可以使用FileSystem的get()方法获取一个FileSystem实例,也可以从Configuration对象获取默认的文件系统。然后,我们可以使用FileSystem的一系列方法来操作HDFS文件系统,包括创建、删除、读取和写入文件等操作。 比如,我们可以使用FileSystem的create()方法创建一个HDFS文件,并使用write()方法向该文件写入数据;也可以使用mkdirs()方法在HDFS上创建一个目录;使用delete()方法删除一个文件或目录;使用open()方法读取一个文件,并使用read()方法读取文件数据等。此外,我们还可以使用FileStatus和FileStatus类来操作HDFS上的文件属性,比如获取文件大小、修改时间等信息。 总之,使用HDFSJava API可以方便地操作Hadoop分布式文件系统,而通过在Eclipse创建Java项目和添加Hadoop JAR包,我们可以使用Eclipse来开发基于HDFSJava应用程序。 ### 回答3: HDFS (Hadoop Distributed File System) 是 Hadoop 生态的关键组件之一,它为大数据存储提供了高可靠性和高扩展性的解决方案。HDFSJava API 充分利用了 Java 语言的优势,为 Java 开发者提供了方便的 HDFS 操作接口。本文介绍 HDFS Java API 在 Eclipse 开发环境下的使用方法。 1. 安装 Hadoop 首先需要在本地或远程服务器上安装 Hadoop 。安装方法不在本文讨论范围内,可以参考 Hadoop 官方文档或其他资料。 2. 新建 Java 项目 在 Eclipse 新建一个 Java 项目。这里以 Eclipse 2019-12 版本为例。点击菜单栏 File -> New -> Java Project,输入项目名称,点击 Finish 按钮即可创建项目。 3. 导入 Hadoop 依赖库 在项目使用 Hadoop 的 Java API 需要导入 Hadoop 相关的依赖库。可以手动下载相关的 jar 包,也可以使用 Maven 或 Gradle 等构建工具自动获取依赖。 3.1 手动导入依赖库 手动导入依赖库需要先从 Hadoop 官网上下载相关的 jar 包,然后将其添加到项目的 build path 。 方式1:直接复制 jar 包到项目 lib 目录下,然后在 Eclipse 右键项目 -> Build Path -> Add Library 选择 User Library,再点击 Next -> User Libraries -> New,输入 User library name,选择 jar 包,点击 OK、Finish 即可。 方式2:在项目右键 -> Properties -> Java Build Path -> Libraries 点击 Add External Jars… 按钮,选择 jar 包,然后点击 OK 即可。 3.2 使用 Maven 导入依赖库 使用 Maven 导入 Hadoop 依赖库需要在项目的 POM 文件添加 Hadoop 相关的依赖项。具体做法是打开项目的 POM 文件,添加以下配置项: ```xml <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.3.0</version> </dependency> </dependencies> ``` 4. 使用 HDFS Java API 完成依赖库的导入后,就可以开始使用 HDFS Java API 进行操作了。以下是一些基本操作的示例代码: ```java import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HdfsClient { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); FileSystem fs = FileSystem.get(conf); // 创建文件夹 String dirName = "/test"; Path dirPath = new Path(dirName); fs.mkdirs(dirPath); System.out.println("Create directory " + dirName + " successful"); // 创建文件 String fileName = "/test/readme.txt"; byte[] data = "Hello, Hadoop World!".getBytes(); Path filePath = new Path(fileName); fs.create(filePath).write(data); System.out.println("Create file " + fileName + " successful"); // 读取文件 byte[] buffer = new byte[data.length]; fs.open(filePath).read(buffer); System.out.println("Read file content: " + new String(buffer)); } } ``` 以上代码实现了创建文件夹、创建文件、读取文件等操作。需要注意的是,这里的 HDFS 根目录是 localhost:9000,可以根据实际情况进行修改。 5. 运行代码 完成代码编写后,就可以运行代码并验证操作结果了。选择 HdfsClient.java 文件,右键 -> Run As -> Java Application 即可运行代码。在控制台输出查看操作结果。 总结 HDFS Java API 提供了方便的操作接口,使得 Java 开发人员能够在 Eclipse 等开发环境下轻松使用 Hadoop 分布式文件系统。通过上述步骤,可以在 Eclipse 使用 HDFS Java API 进行开发,进而实现大规模数据存储和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值