Hadoop学习记录(3)|HDFS API 操作|RPC调用
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);
}
} FileSystem fileSystem = FileSystem.get(new URI(“hdfs://h1:9000/”), new Configuration()); 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提供的 FSDataInputStream in = fileSystem.open(new Path(“/version.sh”); 获得文件系统读取的输入流
IOUtils.copyBytes(in,System.out,1024,true); 使用IOUtils输出在控制台,并自动关闭流 fileSystem.delete(new Path(“/version.sh”),true); 删除后自动关闭流 fileSystem.mkdirs(new Path(“/h1”); 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); 打印数据信息
} 1、RPC(remote procedure call)远程过程调用
远程过程指的不是一个进程。
2、RPC执行有两个过程。一个是调用方法(client),一个是被调用方法(server)。
3、client主动发起请求,调用指定server中的方法。把调用结果返回给client。
4、RPC是hadoop构建的基础。
5、客户端调用服务端的方法,意味着调用服务端的对象中的方法。
6、如果服务端的对象允许客户端调用,那么这个对象必须实现接口。
7、如果客户端能够调用到服务端对象的方法,那么这些方法一定位于对象的接口。 定义接口
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 {
/
HDFS的FileSystemm 访问方式
获取FileSystem对象
写文件create
读取文件 open
删除文件或目录 delete
创建目录 mkdirs
列出目录的内容和元数据信息 listStatus和getFileStatus
RPC调用
RPC概念
RPC实例
* @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调用的更多相关文章
- jackson学习之三:常用API操作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Hadoop学习记录(4)|MapReduce原理|API操作使用
MapReduce概念 MapReduce是一种分布式计算模型,由谷歌提出,主要用于搜索领域,解决海量数据计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce( ...
- Hadoop学习笔记: HDFS
注:该文内容部分来源于ChinaHadoop.cn上的hadoop视频教程. 一. HDFS概述 HDFS即Hadoop Distributed File System, 源于Google发表于200 ...
- 【Hadoop学习之四】HDFS HA搭建(QJM)
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 由于NameNode对于整个HDF ...
- hadoop学习记录1 初始hadoop
起因 因为工作需要用到,所以需要学习hadoop,所以记录这篇文章,主要分享自己快速搭建hadoop环境与运行一个demo 搭建环境 网上搭建hadoop环境的例子我看蛮多的.但是我看都比较复杂,要求 ...
- ElasticSearch 学习记录之ES如何操作Lucene段
近实时搜索 提交(Commiting)一个新的段到磁盘需要一个 fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据.但是每次提交的一个新的段都fsync 这样操作代价过大.可以使用 ...
- 实验楼Python学习记录_挑战字符串操作
自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...
- Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)
在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...
- Hadoop学习记录(5)|集群搭建|节点动态添加删除
集群概念 计算机集群是一种计算机系统,通过一组松散继承的计算机软件或硬件连接连接起来高度紧密地协作完成计算工作. 集群系统中的单个计算机通常称为节点,通过局域网连接. 集群特点: 1.效率高,通过多态 ...
随机推荐
- Socket和SignalR
写到一半停电了,这心情真是哔了狗了,草稿箱竟然也没有!!! 好吧,这篇文档是之前写的记录,现在来完善(还是要完善的). 导读: 附件代码实现: Socket: 定义,同步实现,异步实现,还包括了TCP ...
- poj 1818 ATP
ATP 题意:足球锦标赛使用二分的策略,每次淘汰剩下人的一半,并且数据表明:排名相差k(include)之内的运动员,胜负难料,否则排名前的必定战胜排名后的:问给定n(n = 2x, x∈N, n & ...
- 在Linux上安装Memcached服务
下载并安装Memcache服务器端服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz ...
- 我的PHP之旅--PHP的判断、循环语句
if语句 <?php if ($a = "some string") { // 就算括号中不是bool值,php也会自动转换为bool值 上一节写过各个类型转换bool值 / ...
- UIApplication sharedApplication 的常用使用方法-b
下面是这个类的一些功能:1.设置icon上的数字图标 //设置主界面icon上的数字图标,在2.0中引进, 缺省为0 [UIApplicationsharedApplication].applicat ...
- css中table-layout:fixed 属性的用法
table-layout:fixed 属性的用法:如果想要一个table固定大小,里面的文字强制换行(尤其是在一长串英文文本,并且中间无空格分隔的情况下),以达到使过长的文字 不撑破表格的目的,一般是 ...
- uva 12648
一个简单的搜索: 反正树的结构不会变,只需要把节点的名称换一下就行: 可惜比赛的时候思路不清晰: #include<cstdio> #define maxn 5050 #include&l ...
- loadrunner 一个诡异问题
最近使用loadrunner压测一个项目的时候,发现TPS波动巨大.且平均值较低.使用jmeter压测则没有这个问题.经过多方排查发现一个让人极度费解的原因: 原脚本: //脚本其他代码...... ...
- 李洪强漫谈iOS开发[C语言-018]-scanf函数
- Dagger 2: Step To Step
文/iamwent(简书作者)原文链接:http://www.jianshu.com/p/7505d92d7748著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 假设你已经了解 依赖注 ...