大数据相关整理
1.hdfs
1.1.namenode
所有文件的讀寫入口,用來保存文件的元信息
元信息包括:
1.2.datanode
用來真正保存文件內(nèi)容的節(jié)點
datanode有很多個,保存的是若干個block塊
1.3.secondarynamenode
定期合并editlogs文件,防止editlogs文件過大,文件過大時,重啟會特別慢。
這個editlogs就類似于redis的AOF持久化機制,也是定期得合并,不然太大就會造成重啟慢。
1.4.block
hdfs中保存文件的基本單位,默認(rèn)128M,可改。
如果文件大于128M,會拆分成多個block塊,保存在多個datanode中。
分布式就是將block打散放在不同的node上,
每個block塊都有一個唯一標(biāo)識,這個唯一標(biāo)識保存在namenode的fsimage文件中
2.mapreduce
2.1 map
歸納整理,將hdfs文件解析拆成key-value
2.2 reduce
真正的計算,一般是多臺機器同時計算
在hadoop2中,mapreduce實現(xiàn)用到了Yarn組件
2.3 Yarn組件(yet another resource nevatitor : 下一代資源管理者)
2.3.1 ResourceManager資源管理器(簡稱RM)
mapreduce的執(zhí)行入口
接收客戶端的job請求 協(xié)調(diào)job所用資源 產(chǎn)生一個jobId和appMaster(后面的AM)通信 監(jiān)聽任務(wù)的開始和結(jié)束2.3.2 NodeManager(簡稱NM)
運行在各個datanode上,有幾個datanode,就有幾個NodeManager
負(fù)責(zé)和RM,AM通信
由NM啟動各個YarnChild
2.3.3 MRAppMaster(簡稱AM)
由RM在各個NM中指定一個機器啟動
負(fù)責(zé)具體的某一個map任務(wù),即:
2.3.4 YarnChild
由NM在各個節(jié)點上啟動YarnChild
執(zhí)行map,YarnChild1啟動,關(guān)閉
執(zhí)行reduce,YarnChild2啟動,關(guān)閉
如果某個YarnChild不行了,由AM再選一個NM啟動一個YarnChild,再繼續(xù)干
2.4 shuffe(洗牌)
map完會shuffe,再交給reduce
shuffe:合并key,并排序(按照key字典順序排)
2.5 split計算過程
一個split對應(yīng)一個map任務(wù)
有幾個split,在mapreduce過程中就會有幾個map任務(wù)并行計算
2.6 job提交過程
從job.writeForCompletion(),開始debug
2.7 mapreduce中常見的輸入輸出類型
3.hbase(hadoop database)
存儲在hdfs之上的,對hdfs的封裝,簡化hdfs的操作
是一種key-value類型的nosql數(shù)據(jù)庫
沒有事務(wù)
基于內(nèi)存
只支持key查詢
面向列存儲
3.1 hbase概念
3.1.1 namespace(命名空間)
hbase中沒有數(shù)據(jù)庫的概念,但有個namespace,命名空間,類似于庫
3.1.2 table(表)
3.1.3 column family(列簇)
分類管理列,由相同特性的列組成
一個表有多個列簇
列簇必須在創(chuàng)建表的時候指定
列簇不宜設(shè)置過多,能用一個就不用兩個,用列簇是為了方便管理
3.1.4 column(列)
隸屬于列簇,一個列簇下可以有多個列
列名需在添加數(shù)據(jù)時指定
3.1.5 value(值,保存列名對應(yīng)的值)
同一條數(shù)據(jù),可以有多個值,每個值對應(yīng)一個版本
通過timestamp當(dāng)版本號,一個value默認(rèn)可以保存3個版本
3.2 hbase核心服務(wù)
3.2.1 hregion
一個hregion包含了某個表的全部或局部內(nèi)容
默認(rèn)每個hregion的大小為256M
3.2.2 hmaster
監(jiān)聽用戶對表的操作(建表,刪表,修改表信息)
hmaster集群,采用副本集,一主多從,用zk管理
3.2.3 zookeeper
4.hive
對mapreduce的封裝,可以當(dāng)成一個數(shù)據(jù)庫
hive是建立在hadoop上的數(shù)據(jù)倉庫基礎(chǔ)架構(gòu)
倉庫保存的數(shù)據(jù)一般都是經(jīng)過特殊處理的(一般是ELT)
4.1 hive組件
4.1.1 Driver
4.1.2 metastore
4.2 hive分區(qū)
4.3 hive分桶
4.4 hive中的類型
5.flume
日志收集組件
一般是將日志收集到hdfs存儲
這里的日志不僅僅是nginx中的日志,任何數(shù)據(jù)都可以認(rèn)為是日志
5.1 三大核心組件
5.1.1 source
定義數(shù)據(jù)的來源,即日志來源
5.1.2 channel
通道,用來傳輸數(shù)據(jù)
為什么有chanel:如果source很快,sink很慢,就會宕機,所以加上channel來緩解sink的壓力
5.1.3 sink
定義數(shù)據(jù)的目的地
5.2 agent
三大組件合起來叫agent
agent分別管理若干個source,channel,sink
一個agent代表一個JVM
5.3 event
事件,數(shù)據(jù)傳輸?shù)幕締挝?br /> flume在讀數(shù)據(jù)的時候,是一個event一個event的讀
event可以理解為日志文件中的一行或多行
5.4 flume的強大之處
1.使用簡單
2.可以進(jìn)行各種source,channel,sink的組裝,即一個agent中可以有多個source,多個channel,多個sink,多個組件之間可以相互搭配
3.可以進(jìn)行多級agent,提高單agent的抓取效率,agent之間一般用消息隊列傳輸,比如kafka
4.多個agent數(shù)據(jù)合并成一個agent,稱為sink的聚合
5.多路agent,即一個source,對應(yīng)多個channel,對應(yīng)多個不同的sink,最終存儲到不同的地方
6.flume支持集群,有負(fù)載均衡和容災(zāi)策略
7.flume內(nèi)置了和其他組件的的集成方式(這也是用flume的主要原因)
總結(jié)
- 上一篇: 经典逻辑编程题(本文用python实现)
- 下一篇: Xcode中StaticLibrary和