从零开始学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,敬请关注。

时间: 2024-10-30 06:18:37

从零开始学Hadoop----浅析HDFS(三)的相关文章

从零开始学ios开发(三):第一个有交互的app

感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12点了,就要去睡了,现在身体汤不牢啊,如果不早点睡,第二天上班肯定没精神,要靠红牛了,呵呵,在这样的情况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题. 这几天看来书的第三章,主要讲了如何添加按钮,然后为按钮添加响应事件,当点击按钮后,触

《OD学hadoop》第三周0709

一.MapReduce编程模型1. 中心思想: 分而治之2. map(映射)3. 分布式计算模型,处理海量数据4. 一个简单的MR程序需要制定map().reduce().input.output5. 处理的数据放在input中.处理的结果放在output中6. MR程序>八股文7. MR在处理数据的时候,是由一个流向,数据在处理过程中的流向格式:以<key,value>进行流向8. input -> map() -> reduce() -> output<key

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

上一篇,我们简单介绍了一下Hadoop的核心之一HDFS,对其中的一些概念有了一定的了解.今天我们来看看HDFS的一些原理解析. 二.原理解析 1.架构 HDFS是一个主/从(Mater/Slave)体系结构,从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行CRUD(Create.Read.Update和Delete)操作.但由于分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNode. NameNode管理文件系统的元数据,DataNode存储实际

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

之前,我们简单介绍了一下Hadoop,知道他是一个处理大数据的框架.今天我们来看看Hadoop的核心构成之一--HDFS. 一.基础概念 1.是什么 HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统. 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户机/服务器模式.一个典型的网络可能包括多个供多用户

从零开始学C#——数据类型(三)

C#数据类型 在C#中,变量分为以下几种类型: 值类型 引用类型 指针类型 值类型 值类型变量可以直接分配给一个值,他们是从类System.ValucTpyc中派生. 值类型直接包含数据,比如int.char.float,它们分别存储数字.字母.浮点数.当您声明一个int类型时,系统分配内存来存储值. 下表列出值类型: 类型 描述 范围 默认值 bool 布尔值 True 或 False False byte 8 位无符号整数 0 到 255 0 char 16 位 Unicode 字符 U +

从零开始学Go之容器(三):映射

map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典. 声明: var 映射名称 map[键类型]值类型 var map1 map[string]int key 可以是任意可以用 == 或者 != 操作符比较的类型,比如 string.int.float value 可以是任意类型的:通过使用空接口类型,我们可以存储任意值,但是使用这种类型作为值时需要先做一次类型断言 在map中key值是

从零开始学java之出入门卫管理系统(三)

  这个系统包含了四块,第一块就是人员管理,经理分配三位分别有"ABC"权限的人,分别管理请假申请,请假审批,门卫登记管理.同时不属于本公司的内部人员,如别的公司的人员如果想到本公司访问,也是先通过这"ABC"权限的三个人代为写来访申请,来访审批,来访门卫登记管理.     具体步骤如下:     因为后面都会用到很多相同的方法,和相同的属性,所以我先建立了两个接口让后面的方法类和属性类都实现这两个接口,这样就降低了耦合度.     从零开始学Java之出入门卫管理

从零开始学Xamarin.Forms(三) Android 制作启动画面

Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:splash_screen.png,并拷贝到 Resources 文件夹下的相应 Drawable 文件夹中: 2.在其中的 Drawable 文件夹下创建 splashscreen.xml ,内容为: <?xml version="1.0" encoding="utf-8" ?> <bitmap xmlns:android="h

【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物

覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折线.多边形.信息窗口.聚合marker.麻点图和图片覆盖物.本文会详细介绍每一种覆盖物的概念,添加方法,修改方法,移除方法等.最后会提供示例和源代码下载. 示例demo:http://zhaoziang.com/amap/zero_3_1.html ----------------------------