閱讀建議,有必定基礎的閱讀順序爲1,2,3,4節,沒有基礎的閱讀順序爲2,3,4,1節。html
大數據集羣規劃(以CDH集羣爲例),參考連接:java
https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_host_allocations.htmlnode
https://blog.csdn.net/xuefenxi/article/details/81563033nginx
官方文檔https://www.cloudera.com/documentation/enterprise/latest.htmlweb
CDH(Clouder's Distribution Including Apache hadoop),基於web的用戶界面,支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、pig、Hbase、Zookeeper、Sqoop,簡化了大數據平臺的安裝和使用難度。算法
Cloudera做爲一個強大的商業版數據中心管理工具,提供了各類可以快速穩定運行的數據計算框架。shell
CDH集羣能夠劃分爲不一樣的角色,主要包括如下幾種:數據庫
集羣大小劃分:後端
測試/開發集羣(小於10臺),小規模集羣(10-20臺),中小規模集羣(20-50臺),中等規模集羣(50-100臺),大型集羣(100-200臺),超大規模集羣(200-500臺),巨型規模集羣(500臺以上)。每臺機器的大小一般爲32G物理內存,1T磁盤大小。api
測試開發集羣(邏輯劃分):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生態體系中,HDFS提供文件存儲,YARN提供資源管理,在此基礎上,進行各類處理,包括mapreduce、Tez、Sprak、Storm等計算。
圖 Hadoop生態體系
hadoop基礎:https://blog.csdn.net/chengyuqiang/article/category/6905123/6
Hadoop集羣具體來講包含兩個集羣:HDFS集羣和YARN集羣,二者邏輯上分離,但物理上常在一塊兒。
(1)HDFS集羣:負責海量數據的存儲。
(2)YARN集羣:負責海量數據運算時的資源調度。
(3)MapReduce:它實際上是一個應用程序開發包。
hadoop三大組件:https://blog.csdn.net/wyfly69/article/details/79950039
(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(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(分佈式計算,是大數據應用技術的解決方案)
分而治之,一個大任務分紅多個小的任務(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
(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"
}
}
}
}
參考連接:http://www.javashuo.com/article/p-pdznndbg-eu.html
同時附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實現負載均衡,連接:http://www.javashuo.com/article/p-heaujxnz-z.html
(24) spark和spark2(大數據處理的計算引擎)
Spark是UC Berkeley AMP lab開發的一個集羣計算的框架,相似於Hadoop,但有不少的區別。最大的優化是讓計算任務的中間結果能夠存儲在內存中,不須要每次都寫入HDFS,更適用於須要迭代的MapReduce算法場景中,能夠得到更好的性能提高。例如一次排序測試中,對100TB數據進行排序,Spark比Hadoop快三倍,而且只須要十分之一的機器。Spark集羣目前最大的能夠達到8000節點,處理的數據達到PB級別,在互聯網企業中應用很是普遍.
連接:http://www.javashuo.com/article/p-xrhwyoyp-bb.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去執行。