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

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

Hadoop的實現(xiàn)原理及基本使用方法-創(chuàng)新互聯(lián)

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

10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有黃埔免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。


Hadoop是什么


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

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

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

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


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ù)配置將文件保存多個副本,這樣當(dāng)有一臺機器宕機時,獲取文件不受任何影響,實現(xiàn)了高可用。

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


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會將大文件切分保存,默認(rèn)情況下塊的大小為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的服務(wù)是通過RPC調(diào)用的方式實現(xiàn)服務(wù)端和客戶端的通信,具體來說就是DataNode和NameNode均開啟了socket服務(wù),客戶端和服務(wù)端實現(xiàn)了相同的接口,客戶端根據(jù)接口定義的方法,通過Java的動態(tài)代理調(diào)用相關(guān)的方法。(如果了解Dubbo,就能了解的比較具體,調(diào)用方式和Dubbo類似)。

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


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

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

// 啟動服務(wù)
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相關(guān)API和shell

HDFS提供了Java相關(guān)的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程序主要有兩個階段構(gòu)成:Map和Reduce,客戶端只要分別實現(xiàn)map()函數(shù)和reduce()函數(shù),即可實現(xiàn)分布式計算。


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


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


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


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

MapReduce Java API

MapReduce提供了Java相關(guān)的API,我們可以根據(jù)提供的API實現(xiàn)MapReduce程序,這樣我們就可以根據(jù)實際的業(yè)務(wù)需求完成對大數(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);

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

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

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

// 設(shè)置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語句中的相關(guān)內(nèi)容作為MapReduce程序的入?yún)?,調(diào)用預(yù)先實現(xiàn)好的MapReduce任務(wù),從而完成大數(shù)據(jù)的處理任務(wù)。通過編寫SQL進(jìn)而實現(xiàn)數(shù)據(jù)處理,避免了開發(fā)人員親自編碼實現(xiàn)MapReduce,從而大大降低了數(shù)據(jù)處理的難度,提高了開發(fā)效率。


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

    額外說明下,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可以理解為構(gòu)建在HDFS上的NoSql數(shù)據(jù)庫,Hbase通過key、value的方式保存海量數(shù)據(jù),Hbase的數(shù)據(jù)文件保存在HDFS上,Hbase的Tabel在行的方向上分割為多個HRegion,每個Region由[startKey,EndKey]表示,Region分布在RegionServer,示意圖如下:

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

文章中相關(guān)API完整的源碼信息可關(guān)注微信公眾號 布衣暖回復(fù)hadoop獲取

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁標(biāo)題:Hadoop的實現(xiàn)原理及基本使用方法-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/edgjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部