一篇瞭解大數據架構及Hadoop生態圈 閱讀建議,有一定基礎的閱讀順序為1,2,3,4節,沒有基礎的閱讀順序為2,3,4,1節。 第一節 集群規劃 大數據集群規劃(以CDH集群為例),參考鏈接: https://www.cloudera.com/documentation/enterprise/la ...
一篇瞭解大數據架構及Hadoop生態圈
閱讀建議,有一定基礎的閱讀順序為1,2,3,4節,沒有基礎的閱讀順序為2,3,4,1節。
第一節 集群規劃
大數據集群規劃(以CDH集群為例),參考鏈接:
https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_host_allocations.html
https://blog.csdn.net/xuefenxi/article/details/81563033
Cloudera(CDH)簡介
官方文檔https://www.cloudera.com/documentation/enterprise/latest.html
CDH(Clouder's Distribution Including Apache hadoop),基於web的用戶界面,支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、pig、Hbase、Zookeeper、Sqoop,簡化了大數據平臺的安裝和使用難度。
Cloudera作為一個強大的商業版數據中心管理工具,提供了各種能夠快速穩定運行的數據計算框架。
CDH集群可以劃分為不同的角色,主要包括以下幾種:
- 管理節點(Master Hosts):主要用於運行Hadoop的管理進程,比如HDFS的NameNode,YARN的ResourceManager。
- 工具節點(Utility Hosts):主要用於運行非管理進程的其他進程,比如Cloudera Manager和Hive Metastore.
- 邊緣節點(Gateway Hosts):用於集群中啟動作業的客戶機器,邊緣節點的數量取決於工作負載的類型和數量。
- 工作節點(Worker Hosts):用戶運行DataNode以及其他分散式進程。
集群大小劃分:
測試/開發集群(小於10台),小規模集群(10-20台),中小規模集群(20-50台),中等規模集群(50-100台),大型集群(100-200台),超大規模集群(200-500台),巨型規模集群(500台以上)。每台機器的大小通常為32G物理記憶體,1T磁碟大小。
測試開發集群(邏輯劃分):1台管理節點+1台工具節點/1台邊緣節點+N台工作節點。
Master Hosts |
Utility Hosts |
Gateway Hosts |
Worker Hosts |
Master Host 1:
|
One host for all Utility and Gateway roles:
|
3 - 10 Worker Hosts:
|
(可在Cloudera Manager界面查看,埠號:7180)
1台機器上部署管理節點,通常包括的角色:
NN: NameNode (HDFS);
SHS: Spark History Server (Spark);
RM: Resource Manager (YARN);
JHS: JobHistoryServer
ZK: Zookeeper;
KM: kudu Master
ISS: Impala Statestore
1台機器部署工具節點/邊緣節點:
工具節點通常包括的角色:
CM: Cloudera Manager
JN: JournalNode
CMS: Cloudera Management service
ICS: Impala Catelog service
NMS: Navigator Metadata
HMS: Hive Metadata
NAS: Navigator Audit Srver
ZK, Fluem, Sqoop, Hue, HttpFS
邊緣節點通常包括的角色:
GW: Gateway configuration
Hue, Sqoop, Flume, HiveServer
工作節點通常包括的角色:
Impala Daemon, NodeManager, DataNode, Kudu Tablet Server
第二節 Hadoop生態圈
Hadoop生態體系中,HDFS提供文件存儲,YARN提供資源管理,在此基礎上,進行各種處理,包括mapreduce、Tez、Sprak、Storm等計算。
圖 Hadoop生態體系
hadoop基礎:https://blog.csdn.net/chengyuqiang/article/category/6905123/6
第三節 Hadoop三大核心組件
Hadoop集群具體來說包含兩個集群:HDFS集群和YARN集群,兩者邏輯上分離,但物理上常在一起。
(1)HDFS集群:負責海量數據的存儲。
(2)YARN集群:負責海量數據運算時的資源調度。
(3)MapReduce:它其實是一個應用程式開發包。
hadoop三大組件:https://blog.csdn.net/wyfly69/article/details/79950039
(1)HDFS
(1)HDFS(Hadoop Distributed File System)
(Hadoop分散式文件系統,存儲是大數據技術的基礎)
HDFS簡化了文件的一致性模型,通過流式數據訪問,提供高吞吐量應用程式的數據訪問功能,適合大型數據集的應用程式。它提供了一次寫入多次讀取的機制,數據以塊的形式,同時分佈在集群中不同物理機器上。
快速理解:
1)HDFS的文件被分成塊進行存儲,預設為64M,塊是文件存儲處理的邏輯單元。
2)HDFS有兩類節點,NameNode和DataNode
3)NameNode是管理節點,存儲文件元數據。文件與數據塊的映射表;數據塊與數據節點的映射表。
4)DataNode是HDFS的工作節點,存儲數據塊。
5)每個數據塊3個副本,分佈在兩個機架內的三個節點。
6)DataNode定期向NameNode發送心跳信息。
7)二級NameNode定期同步元數據映射文件和修改日誌,作為備胎。
特點:
1)數據冗餘,硬體容錯
2)流式的數據訪問
3)存儲大文件
應用:
1)適合數據批量讀寫,吞吐量高。不適合互動式應用,低延遲很難滿足。
2)適合一次寫入多次讀取,順序讀寫。不支持多用戶併發寫入相同文件。
常用操作指令:
#初始格式化
hadoop namenode -format
#列印Hdfs當前文件夾
hadoop fs -ls/
#創建並上傳文件操作
hadoop fs -mkdir input
hadoop fs -put hadoop_env.sh input /
#查看具體文件
hadoop fs -cat input/hadoop_env.sh
#下載文件
hadoop fs -get input/hadoop_env.sh hadoop_env2.sh
#查看文件系統所有文件
hadoop dfadmin -report
HDFS參考:https://blog.csdn.net/weixin_38625805/article/details/82120573
(2)YARN
(2)YARN(Yet Another Reduce Negotiator,另一種資源協調者)
YARN是一個通用的資源管理平臺,可為各類計算框架提供資源的管理和調度。
其核心出發點是為了分離資源管理與作業調度/監控,實現分離的做法是擁有一個全局的資源管理器(ResourceManager,RM),以及每個應用程式對應一個的應用管理器(ApplicationMaster,AM),應用程式由一個作業(Job)或者Job的有向無環圖(DAG)組成。
快速理解:
1)YARN可以將多種計算框架(如離線處理MapReduce、線上處理的Storm、迭代式計算框架Spark、流式處理框架S4等) 部署到一個公共集群中,共用集群的資源。並提供如下功能:
資源的統一管理和調度:
集群中所有節點的資源(記憶體、CPU、磁碟、網路等)抽象為Container(集裝箱)。計算框架需要資源進行運算任務時需要向YARN申請Container,YARN按照特定的策略對資源進行調度進行Container的分配。
資源隔離:
YARN使用了輕量級資源隔離機制Cgroups進行資源隔離以避免相互干擾,一旦Container使用的資源量超過事先定義的上限值,就將其殺死。
YARN是對Mapreduce V1重構得到的,有時候也稱為MapReduce V2。
YARN可以看成一個雲操作系統,由一個ResourceManager和多個NodeManager組成, 它負責管理所有NodeManger上多維度資源,並以Container(啟動一個Container相當於啟動一個進程)方式分配給應用程式啟動ApplicationMaster(相當於主進程中運行邏輯) ,或運行ApplicationMaster切分的各Task(相當於子進程中運行邏輯)
YARN鏈接:https://blog.csdn.net/qq_28001193/article/details/79480786
(3)MapReduce
(3)MapReduce(分散式計算,是大數據應用技術的解決方案)
分而治之,一個大任務分成多個小的任務(map),並行執行後,合併結果(reduce)
快速理解:
1)用於執行MapReduce任務的機器角色有兩個:一個是JobTracker;另一個是TaskTracker,JobTracker是用於調度工作的,TaskTracker是用於執行工作的。一個Hadoop集群中只有一臺JobTracker。
2)TaskTracker對應HDFS中的DataNode。
3)JobTracker的作用:作業調度,分配任務,監控任務執行進度;監督TaskTracker的狀態
4)TaskTracker的作用:執行任務,彙報任務狀態。
5)mapreduce的容錯機制,重覆執行(4次),推測執行。
應用:
1)100G的網路訪問日誌文件,找出訪問次數最多的地址。
2)wordcount.
鏈接:
1)https://blog.csdn.net/wuya814070935/article/details/78664674
2)https://blog.csdn.net/qq_24908345/article/details/52791944
3)https://www.imooc.com/article/34049
第四節 Hadoop其他組件介紹
(4) Flume(日誌收集工具)【水槽】
Flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。同時,Flume還具備能夠將日誌寫往各種數據目標的能力。
相關概念:
Flume邏輯上分為三層架構:agent, collector, storage
agent用於採集數據,collector用戶數據彙總,storage是存儲系統。
(5) sqoop(數據同步傳輸工具)
用於hadoop(hive)與傳統資料庫的數據傳輸。TEL
(6) Zookeeper(分散式協作服務)【動物飼養員】
Zookeeper解決分佈環境下的數據管理問題:統一命名,狀態同步,集群管理,配置同步等。Hadoop的許多組件依賴於Zookeeper,它運行在計算集群上面,用戶管理Hadoop操作。分散式應用程式可以基於 ZooKeeper 實現諸如數據發佈/訂閱、負載均衡、命名服務、分散式協調/通知、集群管理、Master 選舉、分散式鎖和分散式隊列等功能。
快速理解:
Zookeeper的核心功能,文件系統和通信機制。
1)文件系統:
每個目錄都是一個znode節點;Znode節點可直接存儲數據;類型,持久化。
2)通信機制:
客戶端監聽關心的Znode節點;znode節點有變化時,通知客戶端。
3)Zookeeper的核心是原子廣播,保證了各個Server之間的同步。實現這種機制的協作叫做ZAB協議。(Zookeeper Atomic BrodCast)
ZAB協議:
核心演算法paxos演算法,一種基於消息傳遞且具有高度容錯性的一致性演算法。分散式系統中的節點通信存在兩種模型,共用記憶體,消息傳遞。
paxos演算法解決的問題是一個可能發生上述異常的分散式系統中如何就某個值達成一致,保證不論發生以上任何異常,都不會破壞決策的一致性。
(7) Hbase(分散式列存儲資料庫)
hbase是運行在hdfs之上的一種資料庫,以鍵值對的形式存儲數據,能夠快速在主機內數十億行數據中定位所需的數據並訪問,而HDFS缺乏隨即讀寫操作,不能滿足實時需求。
快速理解:
1)海量數據存儲
2)準實時查詢,100ms
特點:
1)容量大,百億行,百萬列
2)面向列,列式存儲,可單獨對列進行操作
3)擴展性,底層依賴於HDFS,動態增加機器即可
4)可靠性,HDFS本身也有備份
5)高性能,LSM數據結構,Rowkey有序排序
Hbase表結構:
1)列簇,1張列簇不超過5個,列簇沒有限制,列只有插入數據才存在,列在列簇中是有序的。eg:個人信息|教育信息|工作經歷
2)不支持條件查詢,列動態增加,數據自動切分,高併發讀寫。
啟動方式:
輸入:habse shell
查詢表:list
查詢表數據信息:(1)scan '表名' (2)count '表名'
命令:(註意,複製可能報錯,只能手打)
#查看
scan '表名:列簇','條件'
#只返回前兩行記錄
scan 'table_name:info',{LIMIT =>2}
#查看具體某一行
get 'table_name:info','00123_22'
#模糊查找某一列數據
scan 'table_name:info',FILTER=>"ColumnPrefixFilter('td_id') AND ValueFilter(=,'substring:$_08_03')"
(8) Hive(數據倉庫)
Hive是建立在hadoop上的數據倉庫基礎架構,類似一種SQL解析引擎,它將SQL語句轉成MapReduce,然後再Hadoop上執行。
啟動方式:
hive;
show tables;
select * from table_name;
quit;
命令:
# 創建數據文件
hadoop fs -vi /home/testdata.dat
#創建庫
create database test
#創建表
create table test(id int,name string,age string) ROW format DELIMITED FIELDS
TERMINATED BY '\t' stored as TEXTFILE;
#載入數據
load data local inpath '/root/data/students.txt' into table test;
#刪除表
drop database if exists test;
#大小寫轉換
select lower('hello world'),upper('hello world')
#去掉前後的空格
trim
#habse 和 hive的區別
1) habse是基於Haddoop實現的資料庫,不支持SQL
2) hive是基於hadoop實現的數據倉庫,適合海量全量數據,支持類SQL操作。
#數據倉庫的特性
數據倉庫用稱做數據立方體的多維數據結構建模,它是一個從多個數據源收集的信息存儲庫,存放在一致的模式下,並且通常駐留在單個站點上。
數據倉庫是面向主題的、集成的、其數據是隨著時間變化而變化的,其數據是不可修改的。
(9) Tez
支持DAG作業的計算框架,對MapReduce的進一步拆分。
(10) OOzie(工作流調度系統)
用來管理hadoop任務,工作流調度:工作流程的編排、調整,安排事件的觸發執行。OOzie是一個可擴展的工作體系,集成於Hadoop的堆棧,用於協調多個MapReduce作業的執行。OOzie的工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)的一組動作(例如,hadoop的Map/Reduce作業,Pig作業等),其中指定了動作執行的順序。OOzie使用hPDL(一種XML流程定義語言)來描述這個圖。
(11) Hue (Hadoop user Experience)大數據協作框架,web訪問。
訪問埠:8889
使用Hue我們可以在瀏覽器端的Web控制臺上與Hadoop集群進行交互來分析處理數據,例如操作HDFS上的數據,運行MapReduce Job,執行Hive的SQL語句,瀏覽Hbase資料庫。
(12) Impala (數據查詢系統)
提供SQL語義,能查詢存儲在Hadoop的HDFS和HBASE的PB級的大數據。Impala沒有使用MapReduce進行並行運算,所以Hive適合於長時間的批處理查詢分析,而Impala適合於實時互動式SQL查詢。
(13) Sentry(事件日誌記錄和彙集的平臺)【哨兵】
Sentry是一個開源的實時錯誤報告工具,支持Web前後端、移動應用以及游戲。通常我們所說的Sentry是指後端,有Django編寫。
(14) Solr(全文搜索伺服器,基於lucene)
Sentry是一個獨立的企業其搜索應用伺服器,它是一個高性能,採用JAVA5開發,它對外提供類似於Web-service的API介面。用戶可以通過HTTP請求,向搜索引擎提交一定格式的XML文件,生成索引。
(15) Lucene
它是一套用於全文檢索和搜索的開發源代碼程式庫。Lucene提供了一個簡單卻強大的應用介面程式,能夠做全文索引和搜索,它是最受歡迎的免費Java信息檢索程式庫。
(16) pig
為大型數據集的處理提供抽象,與MapReduce相比,Pig提供了更豐富的數據結構,一般都是多值和嵌套的數據結構。它提供強大的數據變換,包括在MapReduce中被忽視的連接Join操作。
(17) Ambari
一種基於web的工具,支持hadoop集群的供應、管理和監控。
(18)Storm(實時處理框架)【暴風雨】
類似於Hadoop的實時處理框架,毫秒級。隨著越來越多的場景對Hadoop的MapReduce高延遲無法容忍,比如網站統計、推薦系統、預警系統、金融系統(高頻交易)等等,大數據實時處理解決方法的應用日趨廣泛,其中Strom成為流計算技術中的佼佼者。
基本概念:
Storm的主從架構由Nimbus(主結點)、zookeeper(協作框架)、supervisor(從節點)和worker(各個機器)組成。
1)Nimbus的作用:接收客戶端代碼,拆分成多個task,將task信息存入zookeper;將task分配給supervisor,將映射關係存入zookeeper;故障檢測
2)supervisor的作用:從Nimbus目錄讀取代碼,從zk上讀取分配的task;啟動工作進程worker執行任務;檢測運行的工作進度worker.
3) worker的作用:從zk上去讀取分配的task,並計算出task需要給哪些task分佈消息;啟動一個或多個Executor線程執行任務Task.
4)zookeeper的作用:協調Nimbus與supervisor進行通信;協調supervisor與worker進行通信;保證Nimbus的高可用性。
(19)Kylin【麒麟】
一個開源的分散式分析引擎,為Hadoop等大型分散式數據平臺之上的超大規模數據集提供通過標準SQL查詢及多維分析(OLAP)的功能,提供亞秒級的交互分析能力。
Tips:ETL(數據倉庫技術)
extract,transform,load(抽取)(轉換)(載入)
(20) Kibana
它是一個開源的分析和可視化平臺,設計用於和ElasticSearch一起工作,你用Kibana來搜索,查看並存在ES索引中的數據進行交互。
常用埠(ES):5601
常用es查詢指令:
通常格式:GET 索引/類型
例如:
精確查找:
GET topic_index/topic_type/_search
{
"query":{
"term":{
"id":{
"value":"$09_1213"
}
}
}
}
模糊首碼查找:
GET topic_index/topic_type/_search
{
"query":{
"prefix":{
"id":{
"value":"$09"
}
}
}
}
參考鏈接:https://blog.csdn.net/u011262847/article/details/78007119
同時附es-java-api:
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html
(21) Kafka(分散式消息隊列)
埠號:9092
主要用於處理活躍的流式數據,這些數據包括網站的pv,uv。
它由producer、Broker和consumer三部分組成。
基本概念:
producer: 消息和數據的生產者,向kafka的一個topic發佈消息的進程、代碼、服務,負責發佈消息到Broker.
Broker: Kafka集群包含一個或多個伺服器,這種服務被稱為Broker.
Consumer: 消息和數據的消費者,訂閱消息,向Broker讀取消息的客戶端。
Topic: kafka消息的類別,每條發佈到kafka集群的消息都有一個類別,這個類別稱為Topic.
Partition: kafka下數據存儲的基本單元,每個Topic包含一個或多個Partition.
Consumer Group: 對於同一個Topic,會廣播給不同的Group。每個Consumer屬於一個特定的Consumer Group.
Replication Leader: 負責partition上Producer與Consumer的交互。
ReplicaManager: 負責管理當前Broker所有分區和副本的信息。
特點:
1)多分區
2)多副本
3)多訂閱者
4)基於zookeeper調度
應用場景:
1)消息隊列
2)行為跟蹤
3)元數據監控
4)日誌收集
5)流處理,時間源
6)持久性日誌
手動導入數據到Kafka命令
#創建主題,replication-factor表示該topic需要在不同的broker中保存幾份,partions為幾個分區
./kafka-topics.sh --create --zookeeper cdh-node04:2111 --replication-factor 3 -- partitions 1 --topic test01
#描述主題
./kafka-topic.sh --zookeeper cdh-node04:2111 --describe --topic test01
#生產者發送數據
./kafka-console-producer.sh --broker-list cdh-node04:2111,cdh-node05:3111 --topic test01 +(複製黏貼的數據【固定格式:一般為JSON 】)
#消費者消費數據
./kafaka-console-consumer.sh --zookeeper cdh-node04:2111 --topic test01 (--from-beginning從頭開始查看數據)
(22) Azkaban(批量工作流任務調度器)
主要用於在一個工作流內以一個特定的順序運行一組工作和流程,它的配置是通過簡單的key:value鍵值對的方式,通過配置中的dependencies來設置依賴關係,這個依賴關係是無環的,否則會被視為無效的工作流。相比於OOzie的配置複雜度高,Azkaban有如下有點:
1)通過job配置文件快速建立任務和任務之間的依賴關係。
2)提供功能清晰,簡單易用的web UI界面。
3)提供模塊化和可插拔的插件機制,原生支持command,java,pig,hadoop。
4) 基於java開發,代碼結構清晰,易於二次開發。
(23) Nginx(反向代理伺服器)
它是一個高性能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。Nginx是一款輕量級的Web伺服器/反向代理伺服器以及電子郵件代理伺服器,併在一個BSD-like協議下髮型,其特點是占有記憶體小,併發能力強。事實上nginx的併發能力確實在同類型的網路伺服器中表現較好,中國大陸使用nginx網站的有:百度,京東,騰訊,淘寶,網易。
應用:
Nginx實現負載均衡,鏈接:https://www.cnblogs.com/JimBo-Wang/p/6556360.html
(24) spark和spark2(大數據處理的計算引擎)
Spark是UC Berkeley AMP lab開發的一個集群計算的框架,類似於Hadoop,但有很多的區別。最大的優化是讓計算任務的中間結果可以存儲在記憶體中,不需要每次都寫入HDFS,更適用於需要迭代的MapReduce演算法場景中,可以獲得更好的性能提升。例如一次排序測試中,對100TB數據進行排序,Spark比Hadoop快三倍,並且只需要十分之一的機器。Spark集群目前最大的可以達到8000節點,處理的數據達到PB級別,在互聯網企業中應用非常廣泛.
鏈接:https://www.cnblogs.com/smuxiaolei/p/7663744.html
相關概念:
1)在spark中,所有計算都是通過RDDS的創建、轉化和操作完成的。RDDS(Resilent Distributed datasets,彈性分散式數據集)是並行分佈在整個數據集中,是spark分發數據和計算的基礎抽象類。
2)Spark運行架構包括集群資源管理器(Cluster Manager),運行作業任務的工作節點(worker Node),每個應用的任務控制節點(Driver)和每個工作節點上負責任務的執行進程(Executor).
Spark程式的執行過程:
1)創建SparkContext對象
2)從外部數據源讀取數據,創建fileRDD對象
3)構建依賴關係,fileRDD->filterRDD,形成DAG
4)Cache()緩存,對filterRDD進行持久化
5)Count()執行。
spark基礎:http://dblab.xmu.edu.cn/blog/spark/
與Hadoop MapReduce比較:
1)spark採用多線程來執行任務,而MapReduce採用多進程,優點是減少了任務開銷。
2)Excutor中有一個BlockManager存儲模塊,會將記憶體和磁碟共同作為存儲設備,當需要多輪時,可將中間結果存儲到這個模塊中,下次需要時,可以直接讀取,不需要讀寫到HDFS等文件系統中,減少IO開銷。
3)實例:100T的數據量,spark 206個節點,只需23分鐘;MapReduce 2000個節點,需要72分鐘。
鏈接:http://dblab.xmu.edu.cn/blog/985-2/
RDD在Spark架構中的運行過程(如圖所示):
(1)創建RDD對象;
(2)SparkContext負責計算RDD之間的依賴關係,構建DAG;
(3)DAGScheduler負責把DAG圖分解成多個階段,每個階段中包含了多個任務,每個任務會被任務調度器分發給各個工作節點(Worker Node)上的Executor去執行。