从零开始学Hadoop----浅析HDFS(三)

      之前,我们简单介绍了一下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,敬请关注。

猜你喜欢

转载自blog.csdn.net/u010168160/article/details/51352221
今日推荐