HDFS的API操作

URL方式访问

package hdfs;

import java.io.IOException;

import java.io.InputStream;

import java.net.MalformedURLException;

import java.net.URL;

import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;

import org.apache.hadoop.io.IOUtils;

public class App1 {

/**

* @param args

/

static final String PATH = "hdfs://h1:9000/hello";

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

/

* hadoop fs -ls hdfs://h1:9000/

* 类似于http://xxx:8080/

*

* 定义路径字符串

* 设置URL支持hadoop

* 创建URL对象传入path

* 获取输入流

* 输出到控制台

*/

URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

URL url = new URL(PATH);

InputStream in = url.openStream();

/**

* @param in 表示输入流

* @param out 表示输出流

* @param buffsize 表示缓冲大小

* @param close 表示在传输结束后是否关闭流

/

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

}

}

HDFS的FileSystemm 访问方式
获取FileSystem对象

FileSystem fileSystem = FileSystem.get(new URI(“hdfs://h1:9000/”), new Configuration());

写文件create

FSDataOutputStream out = fileSystem.create(new Path(“/version.sh”)); 保存到根目录名称为version.sh

FileInputStream in = new FileInputStream(“c:\1.sh”); 指定要上传的文件

IOUtils.copyBytes(in,out,1024,true); 这里的IOUtils是hadoop提供的

读取文件 open

FSDataInputStream in = fileSystem.open(new Path(“/version.sh”); 获得文件系统读取的输入流

IOUtils.copyBytes(in,System.out,1024,true); 使用IOUtils输出在控制台,并自动关闭流

删除文件或目录 delete

fileSystem.delete(new Path(“/version.sh”),true); 删除后自动关闭流

创建目录 mkdirs

fileSystem.mkdirs(new Path(“/h1”);

列出目录的内容和元数据信息 listStatus和getFileStatus

FileStatus[] listStatus = fileSystem.listStatus(new Path(“/”); 获取指定目录的列表数组

for(FileStatus fileStatus : listStatus){ 遍历元数据信息

String isDir = fileStatus.isDir()?”文件夹”:”文件”; 检查是文件还是文件夹

String permission = fileStatus.getPermission().toString(); 获取权限

short replication = fileStatus.getReplication(); 获取副本数

long len = fileStatus.getLen(); 获取文件大小,单位byte

Path path = fileStatus.getPath(); 获取目录信息

System.out.println(isDir+”\t”+permission+”\t”+replication+”\t”+len+”\t”+path); 打印数据信息

}

RPC调用

RPC概念

1、RPC(remote procedure call)远程过程调用

远程过程指的不是一个进程。

2、RPC执行有两个过程。一个是调用方法(client),一个是被调用方法(server)。

3、client主动发起请求,调用指定server中的方法。把调用结果返回给client。

4、RPC是hadoop构建的基础。

5、客户端调用服务端的方法,意味着调用服务端的对象中的方法。

6、如果服务端的对象允许客户端调用,那么这个对象必须实现接口。

7、如果客户端能够调用到服务端对象的方法,那么这些方法一定位于对象的接口。

RPC实例

定义接口

package rpc;

import org.apache.hadoop.ipc.VersionedProtocol; //必须继承

public interface MyBizable extends VersionedProtocol {

long VERSION = 12345L;

public String hello(String name);

}

实现类

package rpc;

import java.io.IOException;

public class MyBiz implements MyBizable {

/ (non-Javadoc)

* @see rpc.MyBizable#hello(java.lang.String)

*/

public String hello(String name){

return "hello "+name;

}

@Override

public long getProtocolVersion(String arg0, long arg1) throws IOException {

return VERSION;

}

}

配置服务端

package rpc;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

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

public class MyServer {

/**

* @param args

*/

static final String ADDRESS = "localhost";

static final int PORT = 12345;

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

/**

* 构造一个RPC的服务端

* @param instance 这个示例中的方法会被调用

* @param bindAddress 绑定的地址是用于监听连接的

* @param port 板顶的端口是用于监听连接的

* @param conf 加载配置,new Configuration()

*/

Server server = RPC.getServer(new MyBiz(), ADDRESS, PORT, new Configuration());

server.start(); //启动服务器

}

}

使用客户端调用

package rpc;

import java.io.IOException;

import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import org.apache.hadoop.ipc.VersionedProtocol;

public class MyClient {

/**

* @param args

* @throws IOException

*/

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

/**

* 构造一个客户端代理对象,该代理对象实现了命名的协议。 这个代理对象会与制定的服务器通话

*/

MyBizable myBizable = (MyBizable) RPC.waitForProxy(MyBizable.class,

MyBizable.VERSION, new InetSocketAddress(MyServer.ADDRESS,

MyServer.PORT), new Configuration());

String hello = myBizable.hello("world!"); //远程调用方法

System.out.println("客户端结果:"+hello);

RPC.stopProxy(myBizable);

}

}

Hadoop学习记录(3)|HDFS API 操作|RPC调用的更多相关文章

  1. jackson学习之三:常用API操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. Hadoop学习记录(4)|MapReduce原理|API操作使用

    MapReduce概念 MapReduce是一种分布式计算模型,由谷歌提出,主要用于搜索领域,解决海量数据计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce( ...

  3. Hadoop学习笔记: HDFS

    注:该文内容部分来源于ChinaHadoop.cn上的hadoop视频教程. 一. HDFS概述 HDFS即Hadoop Distributed File System, 源于Google发表于200 ...

  4. 【Hadoop学习之四】HDFS HA搭建(QJM)

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 由于NameNode对于整个HDF ...

  5. hadoop学习记录1 初始hadoop

    起因 因为工作需要用到,所以需要学习hadoop,所以记录这篇文章,主要分享自己快速搭建hadoop环境与运行一个demo 搭建环境 网上搭建hadoop环境的例子我看蛮多的.但是我看都比较复杂,要求 ...

  6. ElasticSearch 学习记录之ES如何操作Lucene段

    近实时搜索 提交(Commiting)一个新的段到磁盘需要一个 fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据.但是每次提交的一个新的段都fsync 这样操作代价过大.可以使用 ...

  7. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  8. Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)

    在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...

  9. Hadoop学习记录(5)|集群搭建|节点动态添加删除

    集群概念 计算机集群是一种计算机系统,通过一组松散继承的计算机软件或硬件连接连接起来高度紧密地协作完成计算工作. 集群系统中的单个计算机通常称为节点,通过局域网连接. 集群特点: 1.效率高,通过多态 ...

随机推荐

  1. StringBuffer与StringBuilder原理与区别

    其实只要找下Google大神就有答案了:StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized ...

  2. 导入NGUI插件

    在Unity编辑器顶部菜单栏中的Assets菜单中选择Import Package,然后选择Custom Package(自定义资源包),弹出资源路径窗口,在其中找到NGUI资源包所在的位置,单击”打 ...

  3. WIN32api总结

    1.鼠标操作: win32api.SetCursorPos((101,156)) win32api.mouse_event(win32con.MOUSEEVENT_LEFTDOWN,0,0,0,0) ...

  4. iOS 设置代理过程

    iOS设置代理的过程 (以模拟 button 作用为例) 1.写协议 新建一个名为 MyButton 的文件,继承于 UIView,在该文件里 声明协议 myDelegate 2.写协议方法 为声明的 ...

  5. About Interface

      http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners   Interface can't have thi ...

  6. java Arrays.asList()和Collections.addAll()

    java中的方法Arrays.asList(arg1,arg2,arg3...),经常用在将多个元素或数组转化为List中的元素,但是在使用的时候,应该注意: arg1决定返回list的元素类型(即第 ...

  7. 【win8技巧】应用商店里面如何搜索应用app

    win8应用商店搜索app软件的技巧 1.组合键 WIN+C 打开屏幕最右边磁条 2.点击搜索,输入你想搜的软件名称,里面会列出你已经安装的app或者你点击下面的应用商店选项,就可以搜索互联网上应用商 ...

  8. 目标识别:Bag-of-words表示图像

    BOW (bag of words) 模型简介 Bag of words模型最初被用在文本分类中,将文档表示成特征矢量.它的基本思想是假定对于一个文本,忽略其词序和语法.句法,仅仅将其看做是一些词汇的 ...

  9. RichEdit 各个版本介绍

    RichEdit是开发中经常使用到的控件,其版本自1.0起,历经好几年,好几次的更新,在此引用一篇介绍RichEdit版本的博文(http://blogs.msdn.com/b/murrays/arc ...

  10. tlplayer for android V2.7(支持变速不变调) 2014-07-20更新

    2014-07-20新版本已经修复部分视频倾斜问题,已经更新到服务器,需要的朋友自行下载. 此版本修正了倾斜问题,增加水印等功能.可以动态添加水印. tlplayer for android V2.6 ...