欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Hadoop生態(tài)之分析MapReduce及Hive

這篇文章主要講解了“Hadoop生態(tài)之分析MapReduce及Hive”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Hadoop生態(tài)之分析MapReduce及Hive”吧!

創(chuàng)新互聯(lián)專(zhuān)注于井陘網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供井陘營(yíng)銷(xiāo)型網(wǎng)站建設(shè),井陘網(wǎng)站制作、井陘網(wǎng)頁(yè)設(shè)計(jì)、井陘網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造井陘網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供井陘網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

 1.計(jì)算框架

Hadoop 是一個(gè)計(jì)算框架,目前大型數(shù)據(jù)計(jì)算框架常用的大致有五種:

  • 僅批處理框架:Apache hadoop.

  • 僅流處理框架:Apache Storm、Apache Samza.

  • 混合框架:Apache Spark、Apache Flink.

這其中名氣最大、使用最廣的當(dāng)屬 Hadoop 和 Spark。

雖然兩者都被稱(chēng)為大數(shù)據(jù)框架,但實(shí)際層級(jí)不同。Hadoop 是一個(gè)分布式數(shù)據(jù)基礎(chǔ)設(shè)施,包括計(jì)算框架 MapReduce、分布式文件系統(tǒng) HDFS、YARN  等。而Spark 是專(zhuān)門(mén)用來(lái)對(duì)分布式存儲(chǔ)的大數(shù)據(jù)的處理工具,并不會(huì)進(jìn)行數(shù)據(jù)存儲(chǔ),更像是 MapReduce 的替代。

在使用場(chǎng)景上,Hadoop 主要用于離線(xiàn)數(shù)據(jù)計(jì)算,Spark更適用于需要精準(zhǔn)實(shí)時(shí)的場(chǎng)景。

2. MapReduce

2.1 MapReduce 是什么

一個(gè)基于 Java 的并行分布式計(jì)算框架。

前文有提到 HDFS 提供了基于主從結(jié)構(gòu)的分布式文件系統(tǒng),基于此存儲(chǔ)服務(wù)支持,MapReduce  可以實(shí)現(xiàn)任務(wù)的分發(fā)、跟蹤、執(zhí)行等工作,并收集結(jié)果。

2.2 MapReduce 組成

MapReduce 主要思想講的通俗一點(diǎn)就是將一個(gè)大的計(jì)算拆分成 Map(映射)和 Reduce(化簡(jiǎn))。說(shuō)到這里,其實(shí) JAVA8 在引入 Lambda  后,也有 map 和 reduce 方法。下面是一段 Java 中的用法:

List<Integer> nums = Arrays.asList(1, 2, 3); List<Integer> doubleNums = nums.stream().map(number -> number * 2).collect(Collectors.toList()); 結(jié)果:[2,4,6] Optional<Integer> sum = nums.stream().reduce(Integer::sum); 結(jié)果:[6]

代碼很簡(jiǎn)單,map 負(fù)責(zé)歸類(lèi),reduce 負(fù)責(zé)計(jì)算。而 Hadoop 中的 MapReduce 也有異曲同工之處。

下面結(jié)合官方案例 WordCount 進(jìn)行分析:

public class WordCount {  // Mapper泛型類(lèi),4個(gè)參數(shù)分別代表輸入鍵、值,輸出鍵、值類(lèi)型  public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{  private final static IntWritable one = new IntWritable(1);  private Text word = new Text();  public void map(Object key, Text value, Context context) throws IOException, InterruptedException {  // 字符解析  StringTokenizer itr = new StringTokenizer(value.toString());  while (itr.hasMoreTokens()) {  // nextToken():返回從當(dāng)前位置到下一個(gè)分隔符的字符串  word.set(itr.nextToken());  context.write(word, one);  }  }  }    // Reducer同樣也是四個(gè)參數(shù)  public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {  private IntWritable result = new IntWritable();  public void reduce(Text key, Iterable<IntWritable> values,Context context) throws   IOException,InterruptedException {  int sum = 0;  // 循環(huán)values,并記錄“單詞”個(gè)數(shù)  for (IntWritable val : values) {  sum += val.get();  }  result.set(sum);  context.write(key, result);  }  }

在這段代碼中,不難看出程序核心是 map 函數(shù)和 reduce 函數(shù)。是否 MapReduce 就是由這兩者組成的?接著往下看。

2.3 Map 和 Reduce

2.3.1 Map

在 WordCount 案例中,明顯看到 map 函數(shù)的輸入主要是一個(gè)

Context 在這里暫時(shí)性忽略,其是 Mapper 類(lèi)的內(nèi)部抽象類(lèi),一般計(jì)算中不會(huì)用到,可以先當(dāng)做“上下文”理解。

map 函數(shù)計(jì)算過(guò)程是: 將這行文本中的單詞提取出來(lái),針對(duì)每個(gè)單詞輸出一個(gè)

2.3.2 Reduce

接著就來(lái)看看 reduce ,這里輸入?yún)?shù) Values 就是上面提到的由很多個(gè) 1 組成的集合,而 Key 就是具體“單詞” word。

它的計(jì)算過(guò)程是: 將集合里的1求和,再將單詞(word)與這個(gè)和(sum)組成一個(gè)

假設(shè)有兩個(gè)數(shù)據(jù)塊的文本數(shù)據(jù)需要進(jìn)行詞頻統(tǒng)計(jì),MapReduce 計(jì)算過(guò)程如下圖所示:

Hadoop生態(tài)之分析MapReduce及Hive

到這都很容易理解,畢竟只是個(gè) HelloWorld 的例子~,但整個(gè)MapReduce過(guò)程中最關(guān)鍵的部分其實(shí)是在 map 到 reduce 之間。

還拿上面例子來(lái)說(shuō):統(tǒng)計(jì)相同單詞在所有輸入數(shù)據(jù)中出現(xiàn)的次數(shù),一個(gè) Map 只能處理一部分?jǐn)?shù)據(jù),而熱點(diǎn)單詞就很可能會(huì)出現(xiàn)在所有 Map  中了,意味著同一單詞必須要合并到一起統(tǒng)計(jì)才能得到正確結(jié)果。這種數(shù)據(jù)關(guān)聯(lián)幾乎在所有的大數(shù)據(jù)計(jì)算場(chǎng)景都需要處理,如果是例子這種的當(dāng)然只對(duì) Key  合并就OK了,但類(lèi)似數(shù)據(jù)庫(kù) join 操作這種較復(fù)雜的,就需對(duì)兩種類(lèi)型(或更多)的數(shù)據(jù)依據(jù) Key 關(guān)聯(lián)。

這個(gè)數(shù)據(jù)關(guān)聯(lián)操作在 MapReduce中的叫做:shuffle。

2.4 shuffle

shuffle 從字面意思來(lái)看,洗牌。下面是一個(gè)完整的MR過(guò)程,看一看如何洗牌。

Hadoop生態(tài)之分析MapReduce及Hive

先看左半邊

1. 從 HDFS 中讀取數(shù)據(jù),輸入數(shù)據(jù)塊到一個(gè)個(gè)的 map,其中 map 完成計(jì)算時(shí),計(jì)算結(jié)果會(huì)存儲(chǔ)到本地文件系統(tǒng)。而當(dāng) map 快要進(jìn)行完時(shí),就會(huì)啟動(dòng)  shuffle 過(guò)程。

2. 如圖,shuffle 也可分為兩種,在Map端的是 Map shuffle。大致過(guò)程為:Map 任務(wù)進(jìn)程會(huì)調(diào)用一個(gè) Partitioner 接口,對(duì)  Map 產(chǎn)生的每個(gè)

這里就實(shí)現(xiàn)了對(duì) Map 結(jié)果的分區(qū)、排序、分割,以及將同一分區(qū)的輸出合并寫(xiě)入磁盤(pán),得到一個(gè)分區(qū)有序的文件。這樣不管 Map 在哪個(gè)服務(wù)器節(jié)點(diǎn),相同的  Key 一定會(huì)被發(fā)送給相同 Reduce 進(jìn)程。Reduce 進(jìn)程對(duì)收到的

再看右半邊

1. Reduce shuffle,又可分為復(fù)制 Map 輸出、排序合并兩階段。

  • Copy:Reduce 任務(wù)從各個(gè) Map 任務(wù)拖取數(shù)據(jù)后,通知父 TaskTracker 狀態(tài)已更新,TaskTracker 通知  JobTracker。Reduce 會(huì)定期向JobTracker 獲取 Map 的輸出位置,一旦拿到位置,Reduce 任務(wù)會(huì)從此輸出對(duì)應(yīng)的  TaskTracker 上復(fù)制輸出到本地,不會(huì)等到所有的Map任務(wù)結(jié)束。

  • Merge sort:

  • Copy 的數(shù)據(jù)先放入內(nèi)存緩沖區(qū),若緩沖區(qū)放得下就把數(shù)據(jù)寫(xiě)入內(nèi)存,即內(nèi)存到內(nèi)存 merge。

  • Reduce 向每個(gè) Map 去拖取數(shù)據(jù),內(nèi)存中每個(gè) Map 對(duì)應(yīng)一塊數(shù)據(jù),當(dāng)內(nèi)存緩存區(qū)中存儲(chǔ)的數(shù)據(jù)達(dá)到一定程度,開(kāi)啟內(nèi)存中  merge,把內(nèi)存中數(shù)據(jù)merge 輸出到磁盤(pán)文件中,即內(nèi)存到磁盤(pán) merge。

  • 當(dāng)屬于該 reduce 的 map 輸出全部拷貝完成,會(huì)在 reduce 上生成多個(gè)文件,執(zhí)行合并操作,即磁盤(pán)到磁盤(pán) merge。此刻 Map  的輸出數(shù)據(jù)已經(jīng)是有序的,Merge 進(jìn)行一次合并排序,所謂 Reduce 端的 sort 過(guò)程就是這個(gè)合并的過(guò)程。

2. 經(jīng)過(guò)上一步Reduce shuffle后,reduce進(jìn)行最后的計(jì)算,將輸出寫(xiě)入HDFS中。

以上便是 shuffle 大致四個(gè)步驟,關(guān)鍵是 map 輸出的 shuffle 到哪個(gè) Reduce 進(jìn)程,它由 Partitioner  來(lái)實(shí)現(xiàn),MapReduce 框架默認(rèn)的 Partitioner 用 Key 哈希值對(duì) Reduce 任務(wù)數(shù)量取模,相同 Key 會(huì)落在相同的 Reduce 任務(wù)  ID 上。

public int getPartition(K2 key, V2 value, int numReduceTasks) {  return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;   }

如果對(duì) Shuffle 總結(jié)一句話(huà): 分布式計(jì)算將不同服務(wù)器中的數(shù)據(jù)合并到一起進(jìn)行后續(xù)計(jì)算的過(guò)程。

shuffle 是大數(shù)據(jù)計(jì)算過(guò)程中神奇的地方,不管是 MapReduce 還是 Spark,只要是大數(shù)據(jù)批處理計(jì)算,一定會(huì)有 shuffle  過(guò)程,只有讓數(shù)據(jù)關(guān)聯(lián)起來(lái),它的內(nèi)在關(guān)系和價(jià)值才會(huì)呈現(xiàn)。

3. Hive

上一部分介紹了 MapReduce,接下來(lái)簡(jiǎn)單談?wù)?Hive .

我覺(jué)得任何一項(xiàng)技術(shù)的出現(xiàn)都是為了解決某類(lèi)問(wèn)題, MapReduce 毫無(wú)疑問(wèn)簡(jiǎn)化了大數(shù)據(jù)開(kāi)發(fā)的編程難度。但實(shí)際上進(jìn)行數(shù)據(jù)計(jì)算更常用的手段可能是  SQL,那么有沒(méi)有辦法直接運(yùn)行 SQL ?

3.1 Hive是什么

基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),定義了一種類(lèi)SQL查詢(xún)語(yǔ)言:Hive SQL。

這里有一個(gè)名詞 數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)是指:面向主題(Subject  Oriented)、集成(Integrated)、相對(duì)穩(wěn)定(Non-Volatile)、反應(yīng)歷史變化(Time  Variant)的數(shù)據(jù)集合,用于支持管理決策。

這么說(shuō)可能有點(diǎn)抽象,分解一下:

  • 主題:數(shù)據(jù)倉(cāng)庫(kù)針對(duì)某個(gè)主題來(lái)進(jìn)行組織,指使用數(shù)據(jù)倉(cāng)庫(kù)決策時(shí)所關(guān)心的重點(diǎn)方面。比如訂閱分析就可以當(dāng)做一個(gè)主題。

  • 集成:數(shù)據(jù)倉(cāng)庫(kù)要將多個(gè)數(shù)據(jù)源數(shù)據(jù)存到一起,但數(shù)據(jù)以前的存儲(chǔ)方式不同,要經(jīng)過(guò)抽取、清洗、轉(zhuǎn)換。(也就是 ETL)

  • 穩(wěn)定:保存的數(shù)據(jù)是一系列歷史快照,不允許修改,只能分析。

  • 時(shí)變:會(huì)定期接收到新的數(shù)據(jù),反應(yīng)出新的數(shù)據(jù)變化。

現(xiàn)在再看下定義:數(shù)據(jù)倉(cāng)庫(kù)是將多個(gè)數(shù)據(jù)源的數(shù)據(jù)按照一定的主題集成,進(jìn)行抽取、清洗、轉(zhuǎn)換。且處理整合后的數(shù)據(jù)不允許隨意修改,只能分析,還需定期更新。

3.2 為什么是 Hive

了解了 Hive 的基礎(chǔ)定義,想一下:一個(gè)依賴(lài)于 HDFS 的數(shù)據(jù)倉(cāng)庫(kù)在 Hadoop 環(huán)境中可以扮演什么角色?

前面說(shuō)到,可不可以讓 SQL 直接運(yùn)行在 Hadoop 平臺(tái),這里的答案便是 Hive。它可以將 Hive SQL 轉(zhuǎn)換為 MapReduce  程序運(yùn)行。

Hive 初期版本默認(rèn) Hive on Mapreduce

啟動(dòng) hive 前通常要先啟動(dòng) hdfs 和 yarn, 同時(shí)一般需要配置 MySQL,Hive 依賴(lài)于 HDFS 的數(shù)據(jù)存儲(chǔ),但為了能操作 HDFS  上的數(shù)據(jù)集,要知道數(shù)據(jù)切分格式、存儲(chǔ)類(lèi)型、地址等。這些信息通過(guò)一張表存儲(chǔ),稱(chēng)為元數(shù)據(jù),可以存儲(chǔ)到 MySQL 中。

  • 現(xiàn)在來(lái)看下 Hive 的部分命令

  • 新建數(shù)據(jù)庫(kù):create database xxx;

  • 刪除數(shù)據(jù)庫(kù):drop database xxx;

  • 建表:

  • create table table_name(col_name data_type);

  • Hive  的表有兩個(gè)概念:**內(nèi)部表和外部表**。默認(rèn)內(nèi)部表,簡(jiǎn)單來(lái)說(shuō),內(nèi)部表數(shù)據(jù)存儲(chǔ)在每個(gè)表相應(yīng)的HDFS目錄下。外部表的數(shù)據(jù)存在別處,要?jiǎng)h除這個(gè)外部表,該外部表所指向的數(shù)據(jù)是不會(huì)被刪除的,只會(huì)刪除外部表對(duì)應(yīng)的元數(shù)據(jù)。

  • 查詢(xún):

  • select * from t_table **where** a<100 **and** b>1000;

  • 連接查詢(xún):

  • select a.*,b.* from t_a a join t_b b on a.name=b.name;

看到這里,可能會(huì)覺(jué)得我在寫(xiě) SQL, 沒(méi)錯(cuò),對(duì)于熟悉 SQL 的人來(lái)說(shuō),Hive 是非常易于上手的。

3.3 HIVE SQL To MapReduce

前面說(shuō)到 HQL 可以&lsquo;轉(zhuǎn)換&rsquo;為 MapReduce, 下面就來(lái)看看:一個(gè) HQL 是如何轉(zhuǎn)化為 MapReduce 的Hive的基礎(chǔ)架構(gòu):

Hadoop生態(tài)之分析MapReduce及Hive

通過(guò) Client 向 Hive 提交 SQL 命令。如果是 DDL,Hive 就會(huì)通過(guò)執(zhí)行引擎 Driver 將數(shù)據(jù)表的信息記錄在 Metastore  元數(shù)據(jù)組件中,這個(gè)組件通常用一個(gè)關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn),記錄表名、字段名、字段類(lèi)型、關(guān)聯(lián) HDFS 文件路徑等 Meta 信息(元信息)。

如果是DQL,Driver 就會(huì)將該語(yǔ)句提交給自己的編譯器 進(jìn)行語(yǔ)法分析、解析、優(yōu)化等一系列操作,最后生成一個(gè) MapReduce  執(zhí)行計(jì)劃。再根據(jù)執(zhí)行計(jì)劃生成一個(gè) MapReduce 的作業(yè),提交給 Hadoop 的 MapReduce 計(jì)算框架處理。

比如輸入一條 select xxx from a ; 其執(zhí)行順序?yàn)椋菏紫仍?metastore 查詢(xún)--> sql 解析-->  查詢(xún)優(yōu)化---> 物理計(jì)劃--> 執(zhí)行 MapReduce。

感謝各位的閱讀,以上就是“Hadoop生態(tài)之分析MapReduce及Hive”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Hadoop生態(tài)之分析MapReduce及Hive這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站名稱(chēng):Hadoop生態(tài)之分析MapReduce及Hive
文章URL:http://aaarwkj.com/article42/pdhehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站排名建站公司、外貿(mào)網(wǎng)站建設(shè)、電子商務(wù)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
久久综合给合综合久久| 日韩高清在线不卡视频| 五月天丁香婷婷狠狠狠| 国产激情盗摄一区二区三区| 国产乱码免费一区二区三区| 91久久精品国产免费一区| 免费无遮挡18禁视频| 色91精品在线观看剧情| 亚洲一区二区视频在线观看免费| 青青青在线视频观看华人| 琪琪精品免费一区二区三区| 国产精品欧美一区二区视频| 日韩女优中文字幕在线播放| 岛国av有码高清在线观看| 国产精品三级一区二区三区| 久久精品亚洲国产成人av| 精品人妻va人妻中文字幕麻豆| 欧美欧美欧美欧美在线| 久久国产亚洲欧美日韩精品| 欧美日韩69av网| 久久精品国产亚洲av制服| 毛片成人18毛片免费看| 在线观看亚洲av日韩av| 91精品蜜臀国产综合久久久久久 | 香蕉视频在线观看亚洲精品| 青青草免费在线视频视频| 成年人网站一级黄色免费| 免费看真人性生活视频| 亚洲福利网址一二三区| 久章草在线免费视频播放| 日韩久久这里只有精品视频| 中文字幕一区二区三区三级| 国内精品久久久久久2021| 美女被男人操国产精品| 免费在线观看欧美色妇| 亚洲美腿丝袜综合在线| 中文欧美一区二区精品| 日韩精品福利片午夜免费| 亚洲人妻av一区二区| 蜜臀av在线国产一区 | 91精品国内手机在线高清|