hadoop java接口及常用api

# java接口及常用api

package com.yting.hadoop.hdfs;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.URI;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IOUtils;

/**

* 使用FileSystem

*

* eclipse创建方法快捷键 Shift+Alt+M

* eclipse创建局部变量名称快捷键 Shift+Alt+L

*

*/

public class HDFSJavaOperation {

public static final String HDFS_PATH = "hdfs://hadoop0:9000";

public static final String DIR_PATH = "/d1000";

public static final String FILE_PATH = "/d1000/f1000";

public static void main(String[] args) throws Exception {

final FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH), new Configuration());

//创建文件夹

//makeDirectory(fileSystem);

//上次文件

uploadData(fileSystem);

//下载文件

//downloadData(fileSystem);

//删除文件(夹)

//deleteFile(fileSystem);

}

private static void deleteFile(final FileSystem fileSystem)

throws IOException {

fileSystem.delete(new Path(FILE_PATH), true);

}

private static void downloadData(final FileSystem fileSystem)

throws IOException {

final FSDataInputStream in = fileSystem.open(new Path(FILE_PATH));

IOUtils.copyBytes(in, System.out, 1024, true);

}

private static void makeDirectory(final FileSystem fileSystem)

throws IOException {

fileSystem.mkdirs(new Path(DIR_PATH));

}

private static void uploadData(final FileSystem fileSystem)

throws IOException, FileNotFoundException {

final FSDataOutputStream out = fileSystem.create(new Path(FILE_PATH));

final FileInputStream in = new FileInputStream("c:/log.txt");

IOUtils.copyBytes(in, out, 1024, true);

}

}

# ---------------------------加深拓展----------------------

# RPC调用

Client发起调用请求,请求调用Server端的对象的方法

# MyRpcServer类

package com.yting.hadoop.rpc;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import org.apache.hadoop.ipc.RPC.Server;

public class MyRpcServer {

public static String BIND_ADDRESS = "localhost";   // 绑定地址

public static int PORT = 1129;                    // 绑定端口

/** Construct an RPC server. 构造一个RPC的Server

* @param instance the instance whose methods will be called 实例中的方法被客户端调用的实例

* @param conf the configuration to use 使用的配置

* @param bindAddress the address to bind on to listen for connection 绑定的地址用于监听链接的到来

* @param port the port to listen for connections on 端口也是用于监听链接的到来

* @throws Exception

*/

public static void main(String[] args) throws Exception {

MyInstance myInstance = new MyInstanceImpl();

final Server server = RPC.getServer(myInstance, BIND_ADDRESS, PORT, new Configuration());

server.start();

}

}

# MyRpcClient类

package com.yting.hadoop.rpc;

import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

public class MyRpcClient {

public static void main(String[] args) throws Exception {

/** Construct a client-side proxy object that implements the named protocol,

* talking to a server at the named address. */

/*

* Class<? extends VersionedProtocol> protocol,

* long clientVersion,

* InetSocketAddress addr,

* Configuration conf

*/

MyInstance proxy = (MyInstance) RPC.waitForProxy(MyInstance.class, MyInstance.versionID, new InetSocketAddress(MyRpcServer.BIND_ADDRESS, MyRpcServer.PORT), new Configuration());

String retVal = proxy.hello("world");

System.out.println("客户端调用结果:" + retVal);

RPC.stopProxy(proxy);

}

}

# MyInstance接口

package com.yting.hadoop.rpc;

import org.apache.hadoop.ipc.VersionedProtocol;

public interface MyInstance extends VersionedProtocol {

public static final long versionID = 1234567L;

public abstract String hello(String name);

}

# MyInstanceImpl 实现

package com.yting.hadoop.rpc;

import java.io.IOException;

public class MyInstanceImpl  implements MyInstance{

/* (non-Javadoc)

* @see com.yting.hadoop.rpc.MyInstance#hello(java.lang.String)

*/

@Override

public String hello(String name) {

System.out.println("我被调用了、、、");

return "hello" + name;

}

@Override

public long getProtocolVersion(String protocol, long clientVersion) throws IOException {

return MyInstance.versionID;

}

}

# 运行结果

客户端的运行结果

客户端调用结果:helloworld

服务端的运行结果

14/03/02 15:35:42 INFO ipc.Server: Starting SocketReader

14/03/02 15:35:42 INFO ipc.Server: IPC Server Responder: starting

14/03/02 15:35:42 INFO ipc.Server: IPC Server listener on 1129: starting

14/03/02 15:35:42 INFO ipc.Server: IPC Server handler 0 on 1129: starting

我被调用了、、、

# 结论

1、RPC 实际上就是RPC远程过程调用

2、被调用的对象位于服务端,并且这个对象必须有接口(jdk反射要求),实现VersionedProtocol(api要求)

3、客户端调用的对象中的方法必须位于接口中

4、在本地运行jps看看

由此可以推断出hadoop中启动的5个进程,也就是RPC的服务端

# HDFS的分布式存储架构的源码分析

# HDFS的高可靠

Fsimage备份

Secondarynamenode

# edits文件可以没有么?(必须有)下面是一个例子

F1 start transfer

F1 block1 shuff

F1 end transfer

Edits文件仅仅记录操作日志(确保事务的正确性)

hadoop java接口及常用api,布布扣,bubuko.com

时间: 2024-10-15 12:30:05

hadoop java接口及常用api的相关文章

Java笔记八.常用APIの字符串

字符串处理类与接口 一.String类和StringBuffer类 1.字符串类 Java定义String和StringBuffer两个类来封装对字符串的各种操作,他们都被放到java.lang包中. (1)String类:String类对象的内容一旦被初始化就不能再改变,String类用于比较两个字符串.查找和抽取串中的字符或子串;字符串与其他类型之间的相互转换等.字符间的串联,则需使    用StringBuffer或者StringBuilder或"+"方法. (2)StringB

java基础(15):常用API(Object、String、StringBuffer)

1. Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象的关系.接下来我们开始使用对象做事情,那么在使用对象做事情之前,我们要学习一些API中提供的常用对象.首先在学习API中的Object类之前,先来学习如何使用API. 1.1 Java 的API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了

Java笔记九.常用APIの数据类型包装类

数据类型包装类 一.概述 Java对数据既提供基本数据的简单类型,也提供了相应的包装类.使用基本简单数据类型,可以改善系统的性能,也能够满足大多数应用需求.但是,简单类型不具有对象的特性,不能满足某些特殊的需求.比如Java中很多类的很多方法的参数类型都是对象,如Integer类来包装整数,我们可以使用Integer对象很容易地实现整数与字符串的转换. 二.Integer类(java.lang.Object ->java.lang.Number) 整数类包装的原始类型int对象的值,一个整数类型

Selenium2(java)selenium常用API 四

WebElement相关方法 1.点击操作 WebElement button = driver.findElement(By.id("login")); button.click(); 由元素对象调用click()方法:   2.清除操作 WebElement username = driver.findElement(By.id("username_input")); username.clear(); 调用之后,会把输入框的内容全部清空:   3.获得元素属性

Java学习随笔---常用API(二)

Object类的toString方法 将一个对象返回为字符串形式,但一般使用的时候会覆盖重写toString方法 Object类是所有类的父亲 // public class Person { private String name; private int age; //============================================================================= public String toString(){//toString

Selenium2(java)selenium常用API 五

上传文件   元素标签是input时上传方式 上传是一个input,对于这种元素是input 的标签可以采用元素的sendKeys()方法来直接赋值,upload.html代码: <html> <head></head> <body> <input type="file" id="fileControl" value="选择文件"> </body> <style typ

Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访问, 类,方法,成员变量 private 权限修饰符,私有访问, 方法,成员变量 static 静态修饰符 方法,成员变量 final 最终修饰符 类,方法,成员变量,局部变量 abstract 抽象修饰符 类 ,方法 我们编写程序时,权限修饰符一般放于所有修饰符之前,不同的权限修饰

hadoop常用api编写

package hsfs常用api; import java.io.ByteArrayInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;

JAVA调用聚合天气api接口示例

查询天气预报在APP中常用的一个常用功能,聚合数据免费天气api接口可以根据根据城市名/id查询天气.根据IP查询天气.据GPS坐标查询天气.查询城市天气三小时预报,并且支持全国不同城市天气预报查询. 代码描述:基于JAVA的免费天气api接口调用示例,根据文档中注明的需求参数,调用接口返回数据. 关联数据:免费天气api 接口地址:https://www.juhe.cn/docs/api/id/39 step1:选择本文所示例的接口"免费天气api" url:https://www.