主頁 > 資料庫 > Hadoop-談談你對Hadoop的正確認識和理解

Hadoop-談談你對Hadoop的正確認識和理解

2020-09-11 06:05:33 資料庫

什么叫大資料,“大”,說的并不僅是資料的“多”!不能用資料到了多少TB ,多少PB 來說,

對于大資料,可以用四個詞來表示:大量,多樣,實時,不確定,

也就是資料的量龐大,資料的種類繁雜多樣話,資料的變化飛快,資料的真偽存疑,

大量:這個大家都知道,想百度,淘寶,騰訊,Facebook,Twitter等網站上的一些資訊,這肯定算是大資料了,都要存盤下來,

多樣:資料的多樣性,是說資料可能是結構型的資料,也可能是非結構行的文本,圖片,視頻,語音,日志,郵件等,

實時:大資料需要快速的,實時的進行處理,如果說對時間要求低,那弄幾個機器,對小資料進行處理,等個十天半月的出來結果,這樣也沒有什么意義了,

不確定: 資料是存在真偽的,各種各樣的資料,有的有用,有的沒用,很難辨析,

根據以上的特點,我們需要一個東西,來:

1.存盤大量資料

2.快速的處理大量資料

3.從大量資料中進行分析

于是就有了這樣一個模型hadoop,

一.什么是hadoop?

1.Hadoop是Apache旗下的一套開源軟體平臺,是用來分析和處理大資料的軟體平臺,

2.Hadoop提供的功能:利用服務器集群,根據用戶的自定義業務邏輯, 對海量資料進行分布式處理,
3.Hadoop的核心組件:由底層往上分別是 HDFS、Yarn、MapReduce,
4.廣義上來說,Hadoop通常指的是指一個更廣泛的概念->Hadoop生態 圈,
5.云計算是分布式計算、并行計算、網格計算、多核計算、網路存盤、虛 擬化、負載均衡等傳統計算機技術和互聯網技術融合發展的產物,借助 IaaS(基礎設施即服務)、PaaS(平臺即服務)、SaaS(軟體即服務)等業 務模式,把強大的計算能力提供給終端用戶,
6.現階段,云計算的兩大底層支撐技術為虛擬化和大資料技術,
7.HADOOP則是云計算的PaaS層的解決方案之一,并不等同于PaaS,更不等同于云計算本身,
8.HADOOP應用于資料服務基礎平臺建設,
9.HADOOP用于用戶畫像,
10.HADOOP用于網站點擊流日志資料挖掘

 

二.Hadoop的生態圈和核心組件

 

這就相當于一個生態系統,或者可以看成一個作業系統XP,win7,win10

HDFS和MapReduce為作業系統的核心,Hive,Pig,Mathout,Zookeeper,Flume,Sqoop,HBase等,都是作業系統上的一些軟體,或應用,

核心組件:HDFS(分布式檔案系統)、YARN(集群資源管理系統)、MapReduce(分布式計算框架)

  

1.HDFS: 分布式檔案存盤系統(Hadoop Distributed File System)

HDFS是塊級別的分布式檔案存盤系統,是hadoop中資料存盤管理的基礎,具有高度容錯性,能檢測和應對硬體故障,

包含四個部分:HDFS Client、NameCode(nn)、DataNode(dn)、Secondary NameCode(2nn)

HDFS Client:就是客戶端,
1、提供一些命令來管理、訪問 HDFS,比如啟動或者關閉HDFS,
2、與 DataNode 互動,讀取或者寫入資料;讀取時,要與 NameNode 互動,獲取檔案的位置資訊;寫入 HDFS 的時候,Client 將檔案切分成 一個一個的Block,然后進行存盤,

NameNode(nn):元資料節點,存盤檔案的元資料,如檔案名、檔案目錄結構,檔案屬性(生成時間、副本數、檔案權限),以及每個檔案的塊串列和塊所在得到DataNode等;管理HDFS的名稱空間和資料塊映射資訊,配置副本策略,處理客戶端請求;

它是描述資料的資料,相當于圖書館的檢索系統,

DataNode(dn):資料節點,在本地檔案系統存盤檔案塊資料,以及塊資料的校驗和,

存盤實際的資料,匯報存盤資訊給namenode,相當于書柜,

Secondary NameNode(2nn):用來監控HDFS狀態的輔助后臺程式,每隔一段時間獲取HDFS元資料的快照,輔助namenode,分擔其作業量:定期合并fsimage和fsedits,推送給namenode,

 

 

從圖上來看,HDFS的簡單原理,

Rack1,Rack2,Rack3是三個機架;

1,2,3,4,5,6,7,8,9,10,11,12 是機架上的十二臺服務器,

Block A, Block B, Block C為三個資訊塊,也就是要存的資料,

從整體布局上來看,資訊塊被分配到機架上,看似很均勻,這樣分配的目的,就是備份,防止某一個機器宕機后,單點故障的發生,

 

HDFS有很多特點

    ① 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復,默認存3份,

    ② 運行在廉價的機器上,

    ③ 適合大資料的處理,多大?多小?HDFS默認會將檔案分割成block,64M為1個block,然后將block按鍵值對存盤在HDFS上,并將鍵值對的映射存到記憶體中,如果小檔案太多,那記憶體的負擔會很重,(從2.7.3版本開始,官方關于Data Blocks 的說明中,block size由64 MB變成了128 MB的,)

 

如上圖所示,HDFS也是按照Master和Slave的結構,分NameNode、SecondaryNameNode、DataNode這幾個角色,

HDFS Client就是客戶端,
1、提供一些命令來管理、訪問 HDFS,比如啟動或者關閉HDFS,
2、與 DataNode 互動,讀取或者寫入資料;讀取時,要與NameNode 互動,獲取檔案的位置資訊;寫入 HDFS 的時候,Client 將檔案切分成 一個一個的Block,然后進行存盤,

NameNode:是Master節點,是大領導,管理資料塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;

SecondaryNameNode:是一個小弟,分擔大哥namenode的作業量;是NameNode的冷備份;合并fsimage和fsedits然后再發給namenode,

DataNode:Slave節點,奴隸,干活的,負責存盤client發來的資料塊block;執行資料塊的讀寫操作,

熱備份:b是a的熱備份,如果a壞掉,那么b馬上運行代替a的作業,

冷備份:b是a的冷備份,如果a壞掉,那么b不能馬上代替a作業,但是b上存盤a的一些資訊,減少a壞掉之后的損失,

fsimage:元資料鏡像檔案(檔案系統的目錄樹,)

edits:元資料的操作日志(針對檔案系統做的修改操作記錄)

namenode記憶體中存盤的是=fsimage+edits,

SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合并,然后再發送給namenode,減少namenode的作業量,

HDFS作業原理:

寫操作

  

有一個檔案FileA,100M大小,Client將FileA寫入到HDFS上,

HDFS按默認配置,

HDFS分布在三個機架上Rack1,Rack2,Rack3,

 

a. Client將FileA按64M分塊,分成兩塊,block1和Block2;

b. Client向nameNode發送寫資料請求,如圖藍色虛線------>

c. NameNode節點,記錄block資訊,并回傳可用的DataNode,如粉色虛線--------->

    Block1: host2,host1,host3

    Block2: host7,host8,host4

 原理:

        NameNode具有RackAware機架感知功能,這個可以配置,

        若client為DataNode節點,那存盤block時,規則為:副本1,同client的節點上;副本2,不同機架節點上;副本3,同第二個副本機架的另一個節點上;其他副本隨機挑選,

        若client不為DataNode節點,那存盤block時,規則為:副本1,隨機選擇一個節點上;副本2,不同副本1,機架上;副本3,同副本2相同的另一個節點上;其他副本隨機挑選,

d. client向DataNode發送block1;發送程序是以流式寫入,

    流式寫入程序,

        1>將64M的block1按64k的package劃分;

        2>然后將第一個package發送給host2;

        3>host2接收完后,將第一個package發送給host1,同時client想host2發送第二個package;

        4>host1接收完第一個package后,發送給host3,同時接收host2發來的第二個package,

        5>以此類推,如圖紅線實線所示,直到將block1發送完畢,

        6>host2,host1,host3向NameNode,host2向Client發送通知,說“訊息發送完了”,如圖粉紅顏色實線所示,

        7>client收到host2發來的訊息后,向namenode發送訊息,說我寫完了,這樣就真完成了,如圖黃色粗實線

        8>發送完block1后,再向host7,host8,host4發送block2,如圖藍色實線所示,

        9>發送完block2后,host7,host8,host4向NameNode,host7向Client發送通知,如圖淺綠色實線所示,

        10>client向NameNode發送訊息,說我寫完了,如圖黃色粗實線,,,這樣就完畢了,

分析,通過寫程序,我們可以了解到:

    寫1T檔案,我們需要3T的存盤,3T的網路流量貸款,

    在執行讀或寫的程序中,NameNode和DataNode通過HeartBeat進行保存通信,確定DataNode活著,如果發現DataNode死掉了,就將死掉的DataNode上的資料,放到其他節點去,讀取時,要讀其他節點去,

    掛掉一個節點,沒關系,還有其他節點可以備份;甚至,掛掉某一個機架,也沒關系;其他機架上,也有備份,

 

讀操作 

 

 讀操作就簡單一些了,如圖所示,client要從datanode上,讀取FileA,而FileA由block1和block2組成, 

 

那么,讀操作流程為:

a. client向namenode發送讀請求,

b. namenode查看Metadata資訊,回傳fileA的block的位置,

    block1:host2,host1,host3

    block2:host7,host8,host4

c. block的位置是有先后順序的,先讀block1,再讀block2,而且block1去host2上讀取;然后block2,去host7上讀取;

 

上面例子中,client位于機架外,那么如果client位于機架內某個DataNode上,例如,client是host6,那么讀取的時候,遵循的規律是:

優選讀取本機架上的資料

 

2. Yarn:分布式資源管理器 (Yet Another Resource Negotiator,另一種資源協調者)

Yarn顧名思義 管理資源的 那么具有足夠的通用性,可以支持其他的分布式計算模式,

Yarn還能很方便的管理諸如Hive、Hbase、Pig、Spark/Shark等應用,

Yarn可以使各種應用互不干擾的運行在同一個Hadoop系統中,實作整個集群資源的共享,

包含兩個行程:Nodemanager,ResourceManager

 

3. MapReduce:分布式計算框架

mapreduce是一種采用分而治之的分布式計算框架,用于處理資料量大的計算,

如一復雜的計算任務,單臺服務器無法勝任時,可將此大任務切分成一個個小的任務,小任務分別在不同的服務器上并行的執行;最終再匯總每個小任務的結果

MapReduce由兩個階段組成:

  Map階段(切分成一個個小的任務)

  Reduce階段(匯總小任務的結果)

用戶只需實作map()和reduce()兩個函式,即可實作分布式計算

 

執行流程圖如下:

jobtracker

master節點,只有一個,管理所有作業,任務/作業的監控,錯誤處理等,將任務分解成一系列任務,并分派給tasktracker,

tacktracker

slave節點,運行 map task和reducetask;并與jobtracker互動,匯報任務狀態,

map task

決議每條資料記錄,傳遞給用戶撰寫的map()并執行,將輸出結果寫入到本地磁盤(如果為map—only作業,則直接寫入HDFS),

reduce task

從map 它深刻地執行結果中,遠程讀取輸入資料,對資料進行排序,將資料分組傳遞給用戶撰寫的reduce函式執行

 

原理圖如下:

總體來說:是個總分總的結構,先分解成多個小任務,在map階段處理完成后,匯總成少數個小任務server在Reduce階段處理進行排序 分組等操作,

Map階段解說:先把一個大任務分解split成多個小任務

(1) 讀取HDFS中的檔案,每一行決議成一個<k,v>,每一個鍵值對呼叫一次map函式,<0,hello you> <1,hello me>

(2)覆寫map(),接收(1)產生的<k,v>,進行處理,轉換為新的<k,v>輸出,  <hello,1> <you,1> <hello,1> <me,1>

(3)對(2)輸出的<k,v>進行磁區,默認分為一個區,

(4)對不同磁區中的資料進行排序(按照k)、分組,分組指的是相同key的value放到一個集合中, 排序后:<hello,1> <hello,1> <me,1> <you,1> 分組后:<hello,{1,1}><me,{1}><you,{1}>

(5)(可選)對分組后的資料進行歸約,

Rduce階段解說:把map階段的結果進行匯總

(1)多個map任務的輸出,按照不同的磁區,通過網路copy到不同的reduce節點上,
(2)對多個map的輸出進行合并、排序,覆寫reduce函式,接收的是分組后的資料,實作自己的業務邏輯,<hello,2> <me,1> <you,1> 處理后,產生新的<k,v>輸出,
(3)對reduce輸出的<k,v>寫到HDFS中,

 

 

參考文獻:

https://www.cnblogs.com/laov/p/3434917.html

https://www.jianshu.com/p/f1e785fffd4d,

https://blog.csdn.net/qq_39783601/article/details/104928348,

https://blog.csdn.net/zcb_data/article/details/80402411,

https://www.cnblogs.com/ahu-lichang/p/6645074.html.

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4567.html

標籤:大數據

上一篇:ElasticSearch 7.7 + Kibana的部署

下一篇:Hadoop的shell操作

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more