HDFS的Java操作方式

在eclipse中调用JavaAPI实现HDFS中的相关操作

1、创建一个java工程

2、右键工程,在属性里添加上hadoop解压后的相关jar包(hadoop目录下的jar包和lib目录下的jar包)

3、调用相关代码,实现相关hdfs操作

 1 package hdfs;
 2
 3 import java.io.InputStream;
 4 import java.net.URL;
 5
 6 import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
 7 import org.apache.hadoop.io.IOUtils;
 8
 9 public class App1 {
10     /**
11      * 异常:unknown host: chaoren 本机没有解析主机名chaoren
12      * 在C:\Windows\System32\drivers\etc\hosts文件中添加192.168.80.100
13      * chaoren(win10中要添加写入权限才能写入)
14      */
15     static final String PATH = "hdfs://chaoren:9000/hello";
16
17     public static void main(String[] args) throws Exception {
18         // 让URL能够解析hdfs协议
19         URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
20         URL url = new URL(PATH);
21         InputStream in = url.openStream();
22         /**
23          * @param in
24          *            输入流
25          * @param out
26          *            输出流
27          * @param buffSize
28          *            缓冲大小
29          * @param close
30          *            在传输结束后是否关闭流
31          */
32         IOUtils.copyBytes(in, System.out, 1024, true);// 读取文件hello中的内容
33     }
34
35 }
 1 package hdfs;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.IOException;
 6 import java.net.URI;
 7 import java.net.URISyntaxException;
 8
 9 import org.apache.hadoop.conf.Configuration;
10 import org.apache.hadoop.fs.FSDataInputStream;
11 import org.apache.hadoop.fs.FSDataOutputStream;
12 import org.apache.hadoop.fs.FileStatus;
13 import org.apache.hadoop.fs.FileSystem;
14 import org.apache.hadoop.fs.Path;
15 import org.apache.hadoop.io.IOUtils;
16
17 public class App2 {
18     static final String PATH = "hdfs://chaoren:9000/";
19     static final String DIR = "/d1";
20     static final String FILE = "/d1/hello";
21
22     public static void main(String[] args) throws Exception {
23         FileSystem fileSystem = getFileSystem();
24
25         // 创建文件夹 hadoop fs -mkdir /d1
26         mkDir(fileSystem);
27
28         // 上传文件 hadoop fs -put src des
29         putData(fileSystem);
30
31         // 下载文件 hadoop fs -get src des
32         getData(fileSystem);
33
34         // 浏览文件夹 hadoop fs -lsr path
35         list(fileSystem);
36
37         // 删除文件夹 hadoop fs -rmr /d1
38         remove(fileSystem);
39     }
40
41     private static void remove(FileSystem fileSystem) throws IOException {
42         fileSystem.delete(new Path(DIR), true);
43     }
44
45     private static void list(FileSystem fileSystem) throws IOException {
46         FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
47         for (FileStatus fileStatus : listStatus) {
48             String isDir = fileStatus.isDir() ? "文件夹" : "文件";
49             String permission = fileStatus.getPermission().toString();
50             int replication = fileStatus.getReplication();
51             long len = fileStatus.getLen();
52             String path = fileStatus.getPath().toString();
53             System.out.println(isDir + "\t" + permission + "\t" + replication
54                     + "\t" + len + "\t" + path);
55         }
56     }
57
58     private static void getData(FileSystem fileSystem) throws IOException {
59         FSDataInputStream inputStream = fileSystem.open(new Path(FILE));
60         IOUtils.copyBytes(inputStream, System.out, 1024, true);
61     }
62
63     private static void putData(FileSystem fileSystem) throws IOException,
64             FileNotFoundException {
65         FSDataOutputStream out = fileSystem.create(new Path(FILE));
66         FileInputStream in = new FileInputStream("C:/Users/ahu_lichang/cp.txt");// 斜杠方向跟Windows下是相反的
67         IOUtils.copyBytes(in, out, 1024, true);
68     }
69
70     private static void mkDir(FileSystem fileSystem) throws IOException {
71         fileSystem.mkdirs(new Path(DIR));
72     }
73
74     private static FileSystem getFileSystem() throws IOException,
75             URISyntaxException {
76         FileSystem fileSystem = FileSystem.get(new URI(PATH),
77                 new Configuration());
78         return fileSystem;
79     }
80
81 }

RPC
1.1 RPC (remote procedure call)远程过程调用.
  远程过程指的是不是同一个进程。
1.2 RPC至少有两个过程。调用方(client),被调用方(server)。
1.3 client主动发起请求,调用指定ip和port的server中的方法,把调用结果返回给client。
1.4 RPC是hadoop构建的基础。

示例:

1 package rpc;
2
3 import org.apache.hadoop.ipc.VersionedProtocol;
4
5 public interface MyBizable extends VersionedProtocol{
6     long VERSION = 2345L;
7     public abstract String hello(String name);
8 }
 1 package rpc;
 2
 3 import java.io.IOException;
 4
 5 public class MyBiz implements MyBizable{
 6
 7     public long getProtocolVersion(String arg0, long arg1) throws IOException {
 8         return VERSION;
 9     }
10
11     public String hello(String name) {
12         System.out.println("方法被调用了(检测方法是不是在服务器上被调用的?)");
13         return "hello "+name;
14     }
15
16 }
 1 package rpc;
 2
 3 import org.apache.hadoop.conf.Configuration;
 4 import org.apache.hadoop.ipc.RPC;
 5 import org.apache.hadoop.ipc.RPC.Server;
 6
 7 public class MyServer {
 8     static final String ADDRESS = "localhost";
 9     static final int PORT = 12345;
10     public static void main(String[] args) throws Exception {
11         /**
12          * 构造一个RPC的服务端
13          * @param instance 这个实例中的方法会被调用
14          * @param bindAddress 绑定的地址是用于监听连接的
15          * @param port 绑定的端口是用于监听连接的
16          * @pparam conf
17          */
18         Server server = RPC.getServer(new MyBiz(), ADDRESS, PORT, new Configuration());
19         server.start();
20     }
21
22 }
 1 package rpc;
 2
 3 import java.net.InetSocketAddress;
 4
 5 import org.apache.hadoop.conf.Configuration;
 6 import org.apache.hadoop.ipc.RPC;
 7
 8 public class MyClient {
 9     public static void main(String[] args) throws Exception {
10         /**
11          * 构造一个客户端代理对象,该代理对象实现了命名的协议。代理对象会与指定地址的服务器通话
12          */
13         MyBizable proxy = (MyBizable) RPC.waitForProxy(MyBizable.class,
14                 MyBizable.VERSION, new InetSocketAddress(MyServer.ADDRESS,
15                         MyServer.PORT), new Configuration());
16         String result = proxy.hello("hadoop!!!");
17         System.out.println("客户端RPC后的结果:" + result);
18         // 关闭网络连接
19         RPC.stopProxy(proxy);
20     }
21 }

通过例子获得的认识
2.1 RPC是一个远程过程调用。
2.2 客户端调用服务端的方法,意味着调用服务端的对象中的方法。
2.3 如果服务端的对象允许客户端调用,那么这个对象必须实现接口。
2.4 如果客户端能够调用到服务端对象的方法,那么这些方法一定位于对象的接口中。

时间: 2024-10-17 20:26:07

HDFS的Java操作方式的相关文章

HDFS的JAVA客户端编写

HDFS的shell操作很简单,直接查看文档就可以,和Linux指令类似,下面简单总结一下HDFS的JAVA客户端编写. 如图建立工程,其中客户端放在hdfs包下面: 需要导包,在hadoop的share文件夹下面,里面会找到不同的jar包.我把我的贴出来供大家参考: 剩下的就是编写客户端代码了.在Linux下面编写不会有那么多问题,但是在windows下面会莫名其妙各种错误,下面会提到. 首先看core-site.xml文件: <?xml version="1.0" encod

从本地上传整个文件夹到hdfs的java程序

首先在网上找了好久没有找到从本地文件系统上传整个文件夹到hdfs文件系统的程序,权威指南上也没有,都是单个文件上传,所以这里自己编写了一个程序,封装成jar包运行可以复制. 先说明一下代码:需要手动输入两个路径,一个本地文件/文件夹路径,第二个是hdfs文件夹路径.好直接上代码: import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.Input

Hadoop2.4.1 HDFS的Java客户端开发

我是在linux的环境下的Eclipse中开发这个程序的,如果你是在windows环境下写这个程序,请自行调整. 第一步:首先我们确定自己的hadoop的hdfs的环境是好的,我们在linux中启动hdfs,然后在web页面上通过URL测试:http://uatciti:50070 第二步:在Linux下打开Eclipse, 写我们的客户端代码. 说明:我们在Linux系统的/usr/local/devtool/java文件下,有JDK的文件.我们希望把这个文件上传到hdfs系统的根目录下的jd

[HDFS_4] HDFS 的 Java 应用开发

0. 说明 在 IDEA下 进行 HDFS 的 Java 应用开发 通过编写代码实现对 HDFS 的读写操作 1. 流程 1.1 在项目下新建 Moudle 略 1.2 为 Moudle 添加 Maven 框架支持 略 1.3 添加 Maven 依赖 <dependencies> <!-- Hadoop Client依赖 --> <dependency> <groupId>org.apache.hadoop</groupId> <artif

HDFS的Java操作

实验环境: Windows 10 Eclipse Mars.2 Release (4.5.2) CentOS 7 Hadoop-2.7.3 先决条件: 1) Windows上各环境变量已配置OK.  如: PATH, HADOOP_HOME; 2) 与Hadoop版本及Windows平台(x86或x64)对应的 hadoop.dll, winutils.exe工具已配置OK. 1.新建Java项目,如图: 2.导入外部JAR包,即HDFS jar包: 3.Java代码: package hdfs

HDFS中JAVA API的使用

转自:http://www.cnblogs.com/liuling/p/2013-6-17-01.html 相关源代码:http://www.cnblogs.com/ggjucheng/archive/2013/02/19/2917020.html HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的文件操作主要涉及一下几个类: Configurat

Hadoop HDFS (3) JAVA访问HDFS

现在我们来深入了解一下Hadoop的FileSystem类.这个类是用来跟Hadoop的文件系统进行交互的.虽然我们这里主要是针对HDFS,但是我们还是应该让我们的代码只使用抽象类FileSystem,这样我们的代码就可以跟任何一个Hadoop的文件系统交互了.在写测试代码时,我们可以用本地文件系统测试,部署时使用HDFS,只需配置一下,不需要修改代码了. 在Hadoop 1.x以后的版本中引入了一个新的文件系统接口叫FileContext,一个FileContext实例可以处理多种文件系统,而

HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)

1.通过java.net.URL实现屏幕显示demo1文件的内容 1 package Hdfs; 2 import java.io.InputStream; 3 import java.net.URL; 4 import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; 5 import org.apache.hadoop.io.IOUtils; 6 7 public class JarDemo { 8 static{ 9 URL.setURLStr

[0014] HDFS 常用JAVA 操作实战

目的: 学习用java进行的常用hdfs操作 参考: [0002] Hadoop HDFS cmd常用命令练手 环境: hadoop2.6.4 win7 下的eclipse环境调试已经配置好,参考前面的文章 代码: 1. 创建文件夹 1 package hdfs; 2 3 import java.io.IOException; 4 5 import org.apache.hadoop.conf.Configuration; 6 import org.apache.hadoop.fs.FileSy