真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hadoop的實現(xiàn)原理及基本使用方法

    網(wǎng)上有很多介紹Hadoop安裝部署的資料,這篇文章不會向大家介紹Hadoop的安裝及部署方法,我會重點向大家介紹Hadoop實現(xiàn)的基本原理,這樣當我們今后學習Hadoop生態(tài)相關的知識時可以快速入門。

目前成都創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)站空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設計、尉犁網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

        

Hadoop是什么

    我們首先要知道Hadoop是什么,按照官方的解釋,Hadoop是一個由Apache基金會開發(fā)的分布式系統(tǒng)基礎架構,可提供高可用、高擴展、高效、低成本的服務。

Hadoop提供的服務包括HDFS、MapReduce和YARN;其中HDFS用于海量數(shù)據(jù)的存儲,MapReduce用于海量數(shù)據(jù)的分析和計算,YARN怎用于資源的管理和調(diào)度,

Hadoop的高可用、高擴展及低成本的特性就是通過以上三種服務實現(xiàn)的。Hadoop適用于處理海量數(shù)據(jù),如果數(shù)據(jù)量不大則不建議使用Hadoop。

    Hadoop的生態(tài)圈包括以下常用的軟件,其中HDFS、YARN、MapReduce是Hadoop提供的核心服務;其它的則是依賴Hadoop構建的應用。

Hadoop的實現(xiàn)原理及基本使用方法

HDFS介紹

    HDFS即Hadoop分布式文件系統(tǒng)(Hadoop Distribute File System),用于存儲海量數(shù)據(jù),HDFS維護了一套虛擬的文件系統(tǒng)用戶管理保存的數(shù)據(jù);HDFS使用普通的PC機即可,這也是使用Hadoop處理大數(shù)據(jù)成本相對較低的原因。文件保存在Hadoop上時,Hadoop會根據(jù)配置將文件保存多個副本,這樣當有一臺機器宕機時,獲取文件不受任何影響,實現(xiàn)了高可用。

    HDFS主要提供了NameNode和DataNode兩個服務,其中Name用于接收客戶端的請求、保存元數(shù)據(jù);DateNode是真正保存數(shù)據(jù)的地方。當我們HDFS啟動成功后使用JPS命令可以看到實際上就是啟動了NameNode服務和DataNode服務,如下圖所示:

Hadoop的實現(xiàn)原理及基本使用方法          Hadoop的實現(xiàn)原理及基本使用方法

    NameNode中的元數(shù)據(jù)信息包括:HDFS文件的虛擬目錄、文件副本數(shù)量、文件塊名稱、文件塊所屬機器,如元數(shù)據(jù):/test/a.log, 2 ,{blk_1,blk_2}, [{blk_1:[10.2.200.1]},{blk_2:[10.2.200.2]}]表示,在Hadoop中的/test目錄下存在a.log文件,且這個文件被切分成2塊blk_1和blk_2,沒有副本,blk_1在10.2.200.1機器上,blk_2在10.2.200.2,元文件保存在NameNode所在的機器上,文件名為fsimage_*,如下圖所示:

Hadoop的實現(xiàn)原理及基本使用方法

    DataNode是真正保存文件數(shù)據(jù)的地方,DataNode接收客戶端的請求,并完成文件的讀或?qū)?,HDFS會將大文件切分保存,默認情況下塊的大小為128M。

    HDFS處理客戶端請求的大致流程如下圖所示:

Hadoop的實現(xiàn)原理及基本使用方法

    向Hadoop上傳文件的過程為(write):1、客戶端向NameNode請求上傳文件,NameNode維護虛擬目錄信息,根據(jù)文件大小計算出需要切分成多少塊,并分配DataNode節(jié)點,2、NameNode將分塊信息、分配的DataNode節(jié)點信息返回給客戶端,3、客戶端根據(jù)獲取的DataNode節(jié)點信息和DataNode節(jié)點通信,將文件上傳至DataNode節(jié)點。DataNode節(jié)點保存文件的實際位置通過dfs.namenode.name.dir配置。

    從Hadoop下載文件的過程為(read):1、客戶端向NameNode請求下載文件,2、NameNode根據(jù)提供的虛擬目錄返回元數(shù)據(jù)信息,3、客戶端根據(jù)返回的元數(shù)據(jù)信息到具體的DateNode上下載文件。


HDFS實現(xiàn)原理

   HDFS的服務是通過RPC調(diào)用的方式實現(xiàn)服務端和客戶端的通信,具體來說就是DataNode和NameNode均開啟了socket服務,客戶端和服務端實現(xiàn)了相同的接口,客戶端根據(jù)接口定義的方法,通過Java的動態(tài)代理調(diào)用相關的方法。(如果了解Dubbo,就能了解的比較具體,調(diào)用方式和Dubbo類似)。

    HDFS的RPC框架使用方式如下:

// 服務端開啟服務
Builder builder = new RPC.Builder(new Configuration());

// 設置服務的地址、端口、協(xié)議、及服務的實現(xiàn)實例
builder.setBindAddress("hadoop").setPort(18080).setProtocol(ILogin.class).setInstance(new LoginImpl());

// 啟動服務
Server server =builder.build();
server.start();


// 客戶端調(diào)用方式
ILogin login = RPC.getProxy(ILogin.class,1L,new InetSocketAddress("192.168.1.1",18080), new Configuration());
String returnMsg = login.login("tom");

HDFS相關API和shell

    HDFS提供了Java相關的API,以便通過程序調(diào)用的方式操作HDFS,通過HDFS的API我們可以對HDFS上的文件實現(xiàn)上傳、下載、刪除、修改、壓縮等操作。

// 下載文件
FSDataInputStream inputStream = fs.open(new Path("/test.txt"));
FileOutputStream fio = new FileOutputStream("/home/hadoop/hdfs.txt");
IOUtils.copy(inputStream, fio);

// 上傳文件
FSDataOutputStream os = fs.create(new Path("/test.txt"));
FileInputStream is = new FileInputStream("/home/hadoop/hdfs.txt");
IOUtils.copy(is, os);

// 刪除文件
fs.delete(new Path("/testHadoop"), true);

HDFS中經(jīng)常使用的Shell包括

hadoop fs -ls /hadoop   查看HDFS目錄列表

hadoop fs -mkdir /test  創(chuàng)建目錄test

hadoop fs -put ./test.txt /test 或 hadoop fs -copyFromLocal ./test.txt /test 上傳文件至HDFS

hadoop fs -get /test/test.txt 或 hadoop fs -getToLocal /test/test.txt  從HDFS上下載文件

hadoop fs -cp /test/test.txt /test1 拷貝文件

hadoop fs -rm /test1/test.txt 刪除文件

hadoop fs -mv /test/test.txt /test1  修改文件名

MapReduce介紹

    Hadoop中HDFS用于存儲數(shù)據(jù),MapReduce用于處理數(shù)據(jù),MapReduce程序的運行依賴于YARN分配資源;MapReduce程序主要有兩個階段構成:Map和Reduce,客戶端只要分別實現(xiàn)map()函數(shù)和reduce()函數(shù),即可實現(xiàn)分布式計算。

    map任務的處理過程為:讀取文件中每一行的內(nèi)容,根據(jù)具體的業(yè)務邏輯處理行數(shù)據(jù),并將處理結(jié)果生成鍵值對輸出

    reduce任務的處理過程為:在做reduce操作之前,會有一個shuffle的操作,該操作主要是對map的處理結(jié)果進行合并、排序,然后對map輸出的鍵值對進行處理,得到處理結(jié)果后,同樣以鍵值對的形式保存到文件。

    MapReduce的任務提交流程大致如下圖所示:

Hadoop的實現(xiàn)原理及基本使用方法

MapReduce Java API

    MapReduce提供了Java相關的API,我們可以根據(jù)提供的API實現(xiàn)MapReduce程序,這樣我們就可以根據(jù)實際的業(yè)務需求完成對大數(shù)據(jù)的處理,API示例如下:

// map函數(shù)處理過程
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    // 將該行內(nèi)容轉(zhuǎn)換為字符串
    String strValue = value.toString();
    String[] words = StringUtils.split(strValue, ' ');

    // 遍歷數(shù)組,并將數(shù)據(jù)輸出(key-value形式)
    for(String word : words) {
        context.write(new Text(word), new LongWritable(1));
    }
}

// reduce函數(shù)處理過程
@Override
protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
    int count = 0;

    for(LongWritable value : values) {
        count += value.get();
    }

    context.write(key, new LongWritable(count));
}

// 調(diào)用Map和Reduce
// job使用的mapper和reducer
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReduce.class);

// 設置reducer的輸入輸出類型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);

// 設置mapper的輸入輸出類型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);

// 設置map處理數(shù)據(jù)所在的路徑
FileInputFormat.setInputPaths(job, new Path("/upload/"));

// 設置reducer處理數(shù)據(jù)的輸出路徑(注:wordcount文件夾不能創(chuàng)建,程序會自動創(chuàng)建,如果自己創(chuàng)建會報錯)
FileOutputFormat.setOutputPath(job, new Path("/wordcount/"));

job.waitForCompletion(true);

Hive簡介

    通過上面的介紹我們知道對大數(shù)據(jù)的處理和運算需要通過編寫MapReduce程序來實現(xiàn),這就對大數(shù)據(jù)處理人員提出了編碼要求,為了簡化大數(shù)據(jù)處理的實現(xiàn),Hive出現(xiàn)了,Hive的本質(zhì)就是實現(xiàn)了對MapReduce的封裝,Hive通過解析SQL語句,將SQL語句中的相關內(nèi)容作為MapReduce程序的入?yún)ⅲ{(diào)用預先實現(xiàn)好的MapReduce任務,從而完成大數(shù)據(jù)的處理任務。通過編寫SQL進而實現(xiàn)數(shù)據(jù)處理,避免了開發(fā)人員親自編碼實現(xiàn)MapReduce,從而大大降低了數(shù)據(jù)處理的難度,提高了開發(fā)效率。

    Hive建庫就是在HDFS上創(chuàng)建文件夾,建表就是在庫對應的文件夾下創(chuàng)建子文件夾,表名即文件夾名,分區(qū)表就是在表下創(chuàng)建子文件夾,分桶表就是將一個大文件按照一定的規(guī)則劃分為幾個小文件,執(zhí)行Hive SQL的過程就是處理相關表對應的文件夾下文件的過程。

    額外說明下,Hive處理數(shù)據(jù)實際上就是執(zhí)行MapReduce的過程,而執(zhí)行MapReduce會有大量讀寫磁盤的操作,因此Hive處理大數(shù)據(jù)的過程會比較慢;Spark的出現(xiàn)解決了這個問題,Spark處理數(shù)據(jù)的原理和MapReduce總體相似,但是Spark處理數(shù)據(jù)和磁盤交互比較少,大部分都是在內(nèi)存中計算數(shù)據(jù),所以Spark處理數(shù)據(jù)的效率要比MapReduce高的多。

HBase簡介

    HBase可以理解為構建在HDFS上的NoSql數(shù)據(jù)庫,Hbase通過key、value的方式保存海量數(shù)據(jù),Hbase的數(shù)據(jù)文件保存在HDFS上,Hbase的Tabel在行的方向上分割為多個HRegion,每個Region由[startKey,EndKey]表示,Region分布在RegionServer,示意圖如下:

Hadoop的實現(xiàn)原理及基本使用方法

文章中相關API完整的源碼信息可關注微信公眾號 布衣暖 回復hadoop獲取

Hadoop的實現(xiàn)原理及基本使用方法



本文標題:Hadoop的實現(xiàn)原理及基本使用方法
當前地址:http://weahome.cn/article/gedehi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部