從零開始學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,敬請關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章