《PySpark大數據分析實戰》-02.了解Hadoop

📋 博主簡介

  • 💖 作者簡介:大家好,我是wux_labs。😜
    熱衷于各種主流技術,熱愛數據科學、機器學習、云計算、人工智能。
    通過了TiDB數據庫專員(PCTA)、TiDB數據庫專家(PCTP)、TiDB數據庫認證SQL開發專家(PCSD)認證。
    通過了微軟Azure開發人員、Azure數據工程師、Azure解決方案架構師專家認證。
    對大數據技術棧Hadoop、Hive、Spark、Kafka等有深入研究,對Databricks的使用有豐富的經驗。
  • 📝 個人主頁:wux_labs,如果您對我還算滿意,請關注一下吧~🔥
  • 📝 個人社區:數據科學社區,如果您是數據科學愛好者,一起來交流吧~🔥
  • 🎉 請支持我:歡迎大家 點贊👍+收藏??+吐槽📝,您的支持是我持續創作的動力~🔥

《PySpark大數據分析實戰》-02.了解Hadoop

  • 《PySpark大數據分析實戰》-02.了解Hadoop
    • 前言
    • 了解Hadoop
      • 分布式文件系統HDFS
      • 分布式計算框架MapReduce
      • 資源調度管理框架YARN
    • 結束語

《PySpark大數據分析實戰》-02.了解Hadoop

前言

大家好!今天為大家分享的是《PySpark大數據分析實戰》第1章第2節的內容:了解Hadoop。

了解Hadoop

2002年,Hadoop之父Doug Cutting和Mike Cafarella等人決定開創一個優化搜索引擎算法的平臺,重新打造一個網絡搜索引擎,于是一個可以運行的網頁爬取工具和搜索引擎系統Nutch就面世了。Nutch項目是基于Doug Cutting的文本搜索系統Apache Lucene的,Nutch本身也是Lucene的一部分。后來,開發者認為Nutch的靈活性不夠,不足以解決數十億網頁的搜索問題,剛好谷歌于2003年發表的關于GFS的論文以及GFS的架構可以解決他們對于網頁爬取和索引過程中產生的超大文件的需求。2004年他們開始實現開源版本的Nutch分布式文件系統(NDFS)。2005年,Nutch的開發人員基于谷歌關于MapReduce的論文在Nutch上實現了一個MapReduce系統,并且將Nutch的主要算法全部移植,使用NDFS和MapReduce來運行。2006年,開發人員將NDFS和MapReduce移出Nutch形成一個Lucene的子項目,并用Doug Cutting的小孩的毛絨象玩具的名字Hadoop進行命名,至此,Hadoop便誕生了,其核心便是Hadoop分布式文件系統HDFS和分布式計算框架MapReduce,集群資源調度管理框架是YARN。

分布式文件系統HDFS

HDFS提供了在廉價服務器集群中進行大規模文件存儲的能力,并且具有很好的容錯能力,還能兼容廉價的硬件設備。HDFS采用了主從模型,一個HDFS集群包括一個NameNode和若干個DataNode,NameNode負責管理文件系統的命名空間和客戶端對文件的訪問,DataNode負責處理文件系統客戶端的讀寫請求,在NameNode的統一調度下進行數據塊(Block)的創建、刪除、復制等操作。HDFS的容錯能力體現在可以對數據塊保存至少3份以上的副本數據,并且同時分布在相同機架和不同機架的節點上,即便一個數據塊損壞,也可以從其他副本中恢復數據。HDFS的體系結構如圖所示。

當客戶端需要向HDFS寫入文件的時候,首先需要跟NameNode進行通信,以確認可以寫文件并獲得接收文件的DataNode,然后客戶端按順序將文件按數據塊逐個傳遞給DataNode,由接收到數據塊的DataNode向其他DataNode復制指定副本數的數據塊。HDFS文件的寫入流程如圖所示。

當客戶端需要從HDFS讀取文件的時候,客戶端需要將文件的路徑發送給NameNode,由NameNode返回文件的元數據信息給客戶端,客戶端根據元數據信息中的數據塊號、數據塊位置等找到相應的DataNode逐個獲取文件的數據塊并完成合并從而獲得整個文件。從HDFS讀取文件的流程如圖所示。

分布式計算框架MapReduce

一個存儲在HDFS的大規模數據集,會被切分成許多獨立的小數據塊,并分布在HDFS的不同的DataNode上,這些小數據塊可以被MapReduce中的多個Map任務并行處理。MapReduce框架會為每個Map任務輸入一個數據子集,通常是一個數據塊,并且在數據塊所在的DataNode節點上啟動Map任務,Map任務生成的結果會繼續作為Reduce任務的輸入,最終由Reduce任務輸出最后的結果到HDFS。MapReduce的設計理念是移動計算而不是移動數據,也就是說,數據在哪個節點就將在哪個節點上執行計算任務,而不是將一個節點的數據復制到另一個計算節點上,因為移動數據需要大量的網絡傳輸開銷,在大規模數據的環境下,這種開銷太大,移動計算比移動數據要經濟實惠。
使用MapReduce框架編程,簡單實現一些接口就可以完成一個分布式程序,這個分布式程序就可以分布到大量廉價的PC機器運行。以經典的WordCount程序為例,統計一個文件中每個單詞出現的次數,準備一個文本文件words.txt。文件內容如下:

Hello Python
Hello Spark You
Hello Python Spark
You know PySpark

Map任務對讀取的文件進行單詞拆分,StringTokenizer按照空格、制表符、換行符等將文本拆分成一個一個的單詞,循環迭代對拆分的每個單詞賦予初始計數為1,并將結果以鍵值對的形式組織用于Map任務的輸出。Map任務的代碼如下:

public class WordMapper extendsMapper<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()) {word.set(itr.nextToken());context.write(word, one);}}
}

經過對Map輸出的鍵值對按照鍵分組,相同鍵的數據在同一個分組。Reduce任務對分組后的數據進行迭代,取出Map任務中賦予的初始值1進行累加,最終得到單詞出現的次數。Reduce任務代碼如下:

public class WordReducer extendsReducer<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;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}
}

在主任務中,需要將Map任務和Reduce任務串聯起來,并指定Map任務的輸入文件和Reduce任務的輸出,主任務代碼如下:

public class WordCount {public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "WordCount");job.setJarByClass(WordCount.class);job.setMapperClass(WordMapper.class);job.setReducerClass(WordReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path("words.txt"));FileOutputFormat.setOutputPath(job, new Path("count"));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}

將程序打包、提交運行,運行結束后在count目錄下生成最終的結果,結果如下:

Hello 3
Python 2
Spark 2
You 2
know 1
PySpark 1

MapReduce的工作流程如圖所示。

資源調度管理框架YARN

Hadoop的兩個組件HDFS和MapReduce是由批量處理驅動的,JobTracker必須處理任務調度和資源管理,這容易導致資源利用率低或者作業失敗等問題。由于數據處理是分批完成的,因此獲得結果的等待時間通常會比較長。為了滿足更快速、更準確的處理數據的需求,YARN誕生了。YARN代表的是Yet Another Resource Negotiator,最初被命名為MapReduce2,是Hadoop的主要組件之一,用于分配和管理資源。YARN整體上屬于Master/Slave模型,采用3個主要組件來實現功能,第1個是ResourceManager,是整個集群資源的管理者,負責對整個集群資源進行管理;第2個是NodeManager,集群中的每個節點都運行著1個NodeManager,負責管理當前節點的資源,并向ResourceManager報告節點的資源信息、運行狀態、健康信息等;第3個是ApplicationMaster,是用戶應用生命周期的管理者,負責向ResourceManager申請資源并和NodeManager交互來執行和監控具體的Task。YARN不僅做資源管理,還提供作業調度,用戶的應用在YARN中的執行過程如圖所示。

:在YARN集群中,NodeManager定期向ResourceManager匯報節點的資源信息、任務運行狀態、健康信息等。

1:客戶端程序向ResourceManager提交應用并請求一個ApplicationMaster實例。

2:ResourceManager根據集群的資源情況,找到一個可用的節點,在節點上啟動一個Container,在Container中啟動ApplicationMaster。

3:ApplicationMaster啟動之后,反向向ResourceManager進行注冊,注冊之后客戶端通過ResourceManager就可以獲得ApplicationMaster的信息。

4:ResourceManager根據客戶端提交的應用的情況,為ApplicationMaster分配Container。

5:Container分配成功并啟動后,可以與ApplicationMaster交互,ApplicationMaster可以檢查它們的狀態,并分配Task,Container運行Task并把運行進度、狀態等信息匯報給ApplicationMaster。

6:在應用程序運行期間,客戶端可以和ApplicationMaster交流獲得應用的運行狀態、進度信息等。

7:一旦應用程序執行完成,ApplicationMaster向ResourceManager取消注冊然后關閉,ResourceManager會通知NodeManager進行Container資源的回收、日志清理等。

結束語

好了,感謝大家的關注,今天就分享到這里了,更多詳細內容,請閱讀原書或持續關注專欄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214638.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode 2962. Count Subarrays Where Max Element Appears at Least K Times

Leetcode 2962. Count Subarrays Where Max Element Appears at Least K Times 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;2962. Count Subarrays Where Max Element Appears at Least K Times 1. 解題思路 這一題思路上同樣很直接&#xff0c;就是找到最大的元素所在的全…

云降水物理基礎

云降水物理基礎 云的分類 相對濕度變化方程 由相對濕度的定義&#xff0c;兩邊取對數之后可以推出 聯立克勞修斯-克拉佩龍方程&#xff08;L和R都為常數&#xff09; 由右式看出&#xff0c;增加相對濕度的方式&#xff1a;增加水汽&#xff08;de增大&#xff09;和降低…

開源好用EasyImages簡單圖床源碼

源碼介紹 開源好用EasyImages簡單圖床源碼分享&#xff0c;雖然它是開源程序&#xff0c;但功能一點也不弱&#xff0c;不僅支持多文件上傳、文字/圖片水印、支持API和鑒黃、還能自定義代碼&#xff0c;最重要的是它不強制使用數據庫運行&#xff0c;這就給我們的部署和維護帶…

人工智能的技術演進與未來趨勢

人工智能的技術演進與未來趨勢 一、引言 人工智能&#xff08;AI&#xff09;已經成為當今科技領域的熱門話題&#xff0c;其在各個行業的應用越來越廣泛。從智能語音助手到自動駕駛汽車&#xff0c;從智能家居系統到醫療診斷&#xff0c;AI技術已經深入到我們的日常生活。在…

OpenVINS學習2——VIRAL數據集eee01.bag運行

前言 周末休息了兩天&#xff0c;接著做上周五那個VIRAL數據集沒有運行成功的工作。現在的最新OpenVINS需要重新寫配置文件&#xff0c;不像之前那樣都寫在launch里&#xff0c;因此需要根據數據集情況配置好estimator_config.yaml還有兩個標定參數文件。 VIRAL數據集 VIRAL…

WooCommerce商城個人微信支付網關 適合個人微信收款

點擊獲取WooCommerce商城個人微信支付網關 適合個人微信收款原文https://gplwp.eastfu.com/product/woocommerce-ge-ren-wei-xin-zhi-fu-wang-guan-shi-he-ge-ren/ 個人微信支付網關接口&#xff0c;無需提現&#xff0c;100%資金安全&#xff0c;官方清算&#xff0c;金額無限…

壓力測試過程中出現線程死鎖情況如何解決

確認問題是線程死鎖的方法有以下幾種&#xff1a; 1. 分析日志&#xff1a;查看應用程序的日志&#xff0c;如果發現有線程死鎖的日志信息&#xff0c;可以確認問題是線程死鎖。 2. 使用線程分析工具&#xff1a;可以使用線程分析工具&#xff0c;例如Java的jstack工具&#xf…

axios的使用

Axios 是一個基于 promise 的 HTTP 庫&#xff0c;可以用在瀏覽器和 node.js 中。 如果您想在瀏覽器中使用 Axios&#xff0c;首先需要安裝它。您可以使用 npm&#xff08;Node 包管理器&#xff09;或 yarn 來安裝 Axios。例如&#xff0c;在命令行中輸入以下命令&#xff1a…

Docker 容器運行實戰:從啟動到停止一切你想知道的

要啟動一個新的容器&#xff0c;我們使用 docker run 命令&#xff0c;后跟鏡像名稱。基本語法如下&#xff1a; docker run [選項] 鏡像 [COMMAND] [ARG...] 例如&#xff0c;要運行官方的 Nginx 鏡像&#xff0c;我們可以使用&#xff1a; docker run -d -p 8080:80 nginx…

IoTDB服務安裝教程-集群版

文章目錄 官方說明文檔下載地址服務安裝節點服務分配修改配置文件修改堆內存啟動集群啟動第一個節點啟動其他兩個節點的 ConfigNode 和 DataNode檢驗集群狀態修改集群密碼 【附錄】清理環境 集群擴容修改配置擴容驗證擴容結果 集群縮容縮容一個 ConfigNode縮容一個 DataNode驗證…

XCube——用于超高分辨率 3D 形狀和場景的生成模型!

他們的方法在稀疏體素網格的層次結構上訓練潛在擴散模型的層次結構。他們在稀疏結構 VAE 的潛在空間上進行擴散&#xff0c;它為層次結構的每個級別學習緊湊的潛在表示。 XCube 是稀疏體素層次上的分層潛在擴散模型&#xff0c;即從粗到細的 3D 稀疏體素網格序列&#xff0c;使…

靈茶 2023 - 12 - 11

鏈接 : Problem - C - Codeforces 題意 : 輸入一個長度 ≤1e5 的字符串 s&#xff0c;只包含小寫字母。 找到一個最小的 k&#xff0c;使得所有長度 > k 的連續子串&#xff0c;有公共字母&#xff08;這些子串的交集不為空&#xff09;。 思路 : 就是求每個字母的…

智能優化算法之粒子群模型(含python案例代碼)

粒子群優化模型概述 粒子群優化&#xff08;Particle Swarm Optimization&#xff0c;簡稱PSO&#xff09;是一種基于群體智能的優化算法&#xff0c;最早由美國社會心理學家James Kennedy和Russell Eberhart于1995年提出。PSO的靈感來自鳥群和魚群等自然界群體行為的觀察。 PS…

Linux驅動入門——編寫第一個驅動

目錄 前言 驅動入門知識 1.APP 打開的文件在內核中如何表示 2.打開字符設備節點時&#xff0c;內核中也有對應的 struct file 編寫 Hello 驅動程序步驟 1.流程介紹 2.驅動代碼&#xff1a; 3.應用層代碼&#xff1a; 4.本驅動程序的 Makefile 內容&#xff1a; 5.上機…

4fiddler抓包工具的使用

一、定義 1.1 抓包的定義 說明&#xff1a;客戶端向服務器發送請求以及服務器響應客戶端的請求&#xff0c;都是以數據包來傳遞的。 抓包(packet capture)&#xff1a;通過工具攔截客戶端與服務器交互的數據包 1.2 fiddler的介紹 Fiddler是一個http協議調試代理工具&#…

Java程序設計基礎 - 課程概述

文章目錄 一、程序員最具共性的心理特征二、Java開發工程師的崗位要求(一)素質和職業道德需求(二)崗位能力需求統計三、針對Java工程師崗位需求的課程目標(一)熟練掌握Java編程語言,掌握編程技能(二)精通使用集成開發工具Eclipse或IntelliJ IDEA(三)需要將“用戶體驗…

市場全局復盤 20231208

一、板塊成交額排名&#xff1a; 資金流入前三個板塊K 線&#xff1a; 行業成交額排名&#xff1a; 個股資金流入排名&#xff1a; select 成交額排名 ,近日指標提示 ,短線主題 ,漲停分析,CODE,名稱,DDE大單凈量,現價,量比,連板天,周漲停,月漲停,年漲停天,連漲天,…

【每日一題】—— B. StORage room(Codeforces Round 912 (Div. 2))(位操作符)

&#x1f30f;博客主頁&#xff1a;PH_modest的博客主頁 &#x1f6a9;當前專欄&#xff1a;每日一題 &#x1f48c;其他專欄&#xff1a; &#x1f534; 每日反芻 &#x1f7e1; C跬步積累 &#x1f7e2; C語言跬步積累 &#x1f308;座右銘&#xff1a;廣積糧&#xff0c;緩稱…

工業傳感器

工業傳感器 電子元器件百科 文章目錄 工業傳感器前言一、工業傳感器是什么二、工業傳感器的類別三、工業傳感器的應用實例四、工業傳感器的作用原理總結前言 工業傳感器的應用可以幫助提高工業過程的效率、安全性和可靠性,實現工業自動化和智能化。 一、工業傳感器是什么 工…

使用阿里云國際CDN加速后網站無法訪問的排查步驟

使用阿里云國際CDN加速后網站無法訪問的排查步驟&#xff0c;下面是一些常見的問題&#xff0c;以&#xff1a;www.c.9he.com為例&#xff0c;如果解決不了來信服務器廠商解決。 檢查CDN訪問異常是CDN節點的問題還是源站問題 如果是源站訪問異常&#xff0c;請直接排查源站服務…