之前,我们简单介绍了一下Hadoop的核心之一HDFS,对其中的一些概念和他的原理做了一些解析。今天我们来看看HDFS的操作实例。
三、小试牛刀
1、shell命令
2、fs实例
在做之前,我们需要做一些准备环境,例如在Linux上安装hadoop,创建工程,导入需要的jar文件等等,网上分享的步骤很全,这里不在赘述,直接看它实际应用中的代码。
public class HDFSDemo {
FileSystem fs=null;
@Before
public void init() throws IOException, URISyntaxException, InterruptedException {
//首先创建FileSystem的实现类(工具类),并指定当前用户
fs =FileSystem.get(new URI
("hdfs://itcast01:9000"), new Configuration(),"root");
}
@Test
public void testUpLoad() throws Exception{
//读取本地文件系统的文件,返回输入流
InputStream in=new FileInputStream("c://test.zip");
//在HDFS上创建一个文件,返回输出流
OutputStream out=fs.create(new Path("/test1.zip"));
//输入流-》输出
IOUtils.copyBytes(in, out, 4096,true);
}
//创建文件夹
@Test
public void testMkDir() throws IllegalArgumentException, IOException{
boolean flag=fs.mkdirs(new Path("/nihao/11/22/33"));
System.out.println(flag);
}
//删除文件
@Test
public void del() throws IllegalArgumentException, IOException{
boolean flag=fs.delete(new Path("/nihao/11"),false);
System.out.println(flag);
}
//下载
@Test
public void getDown() throws Exception {
//连接HDFS,返回输入流
InputStream in=fs.open(new Path("/hadoop-2.5.2.tar.gz"));
//在本地建立文件夹,返回输出流
OutputStream out=new FileOutputStream("c://hadoop2");
//输入流-》输出
IOUtils.copyBytes(in, out, 4096,true);
}
//更快上传
@Test
public void testDownLoad() throws IllegalArgumentException, IOException{
fs.copyToLocalFile(true,new Path("/hadoop-2.5.2.tar.gz"), new Path("c://hadoop-2.5.2.tar.gz"));
}
}
3、RPC实例
- 概念
RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
- 原理
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
- 代码
接口
public interface Bizable {
//序列化序号
public static final long versionID=10010;
//接口方法——客户端需要调用,服务端实现
public String sayHi(String name);
}
客户端
public class RPCClient {
public static void main(String[] args) throws IOException {
//生成服务端的代理
Bizable proxy= RPC.getProxy(Bizable.class, 10010, new InetSocketAddress("192.168.8.***",9519), new Configuration());
//调用代理方法
String result=proxy.sayHi("tomacat");
//打印结果
System.out.println(result);
//关闭代理
RPC.stopProxy(proxy);
}
}
服务端
public class RPCServer implements Bizable{
//实现接口
public String sayHi(String name){
return "HI~"+name+".I am Service";
}
public static void main(String[] args) throws Exception {
Configuration conf=new Configuration();
//使用静态类Builder构造一个RPC Server
//其中,BindAddress(由函数setBindAddress设置)和Port(由函数setPort设置,0表示由系统随机选择一个端口号)分别表示服务器的host和监听端口号
Server server=new RPC.Builder(conf).setProtocol(Bizable.class).setInstance(new RPCServer()).setBindAddress("192.168.8.***").setPort(9519).build();
//启动服务。此时,服务器处理监听状态,等待客户端请求到达。
server.start();
}
}
总结:
到此,我们学习了HDFS的一个大概,从概念到原理最后到实际操作,基本的一些知识已经掌握,剩下的就需要在项目中历练了。接下来我们会继续分享Hadoop的另外一个核心部分MapReduce,敬请关注。
时间: 2024-10-30 06:18:37