更新時間:2018-11-29 來源:黑馬程序員技術(shù)社區(qū) 瀏覽量:
DW層的數(shù)據(jù)應(yīng)該是一致的、準(zhǔn)確的、干凈的數(shù)據(jù),即對源系統(tǒng)數(shù)據(jù)進(jìn)行了清洗(去除了雜質(zhì))后的數(shù)據(jù)。這一層的數(shù)據(jù)一般是遵循數(shù)據(jù)庫第三范式的,其數(shù)據(jù)粒度通常和ODS的粒度相同。在DW層會保存BI系統(tǒng)中所有的歷史數(shù)據(jù),例如保存10年的數(shù)據(jù)。
EDW主要面向?qū)I(yè)分析人員、輔助決策支持人員等,為了實現(xiàn)基于歷史數(shù)據(jù)的統(tǒng)計分析和數(shù)據(jù)挖掘,以獲得客戶深層次的特征和市場發(fā)展的規(guī)律,例如專業(yè)分析人員的經(jīng)營狀況趨勢分析由EDW提 供支撐。
DM
數(shù)據(jù)集市,以某個業(yè)務(wù)應(yīng)用為出發(fā)點而建設(shè)的局部DW。DM只關(guān)心自己需要的數(shù)據(jù),不會全量考慮企業(yè)整體數(shù)據(jù)架構(gòu)和應(yīng)用,每個應(yīng)用有自己的DM。 數(shù)據(jù)集市就是滿足特定的部門或者用戶的需求,按照多維的方式進(jìn)行存儲,包括定義維度、需要計算的指標(biāo)、維度的層次等,生成面向決策分析需求的數(shù)據(jù)立方體(data cube)。
這層數(shù)據(jù)是面向主題來組織數(shù)據(jù)的,通常是星形或雪花結(jié)構(gòu)的數(shù)據(jù)。從數(shù)據(jù)粒度來說,這層的數(shù)據(jù)是輕度匯總級的數(shù)據(jù),已經(jīng)不存在明細(xì)數(shù)據(jù)了。從數(shù)據(jù)的時間跨度來說,通常是 DW 層的一部分,主要的目的是為了滿足用戶分析的需求,而從分析的角度來說,用戶通常只需要分析近幾年(如近三年的數(shù)據(jù))的即可。從數(shù)據(jù)的廣度來說,仍然覆蓋了所有業(yè)務(wù)數(shù)據(jù)。一個星型結(jié)構(gòu)包含兩個基本部分——一個事實表和各種支持維表。
事實表 ----
描述數(shù)據(jù)集市中最密集的數(shù)據(jù)。在電話公司中,用于呼叫的數(shù)據(jù)是典型的最密集數(shù)據(jù);在銀行中,與賬目核對和自動柜員機(jī)有關(guān)的數(shù)據(jù)是典型的最密集數(shù)據(jù)。對于零售業(yè)而言,銷售和庫存數(shù)據(jù)是最密集的數(shù)據(jù)等。通常,事實表的數(shù)據(jù)不能更改,但可以輸入數(shù)據(jù)。 它包括:一個反映事實表建立目的的實體的主鍵,如一張訂單、一次銷售、一個電話等等,主鍵信息,連接事實表與維表的外鍵。
維度表 ---- 維表是圍繞著事實表建立的。維表包含非密集型數(shù)據(jù),它通過外鍵與事實表相連。典型的維表建立在數(shù)據(jù)集市的基礎(chǔ)上,包括產(chǎn)品目錄、客戶名單、廠商列表等等。
數(shù)據(jù)集市產(chǎn)品 ---
國外知名的Garnter關(guān)于數(shù)據(jù)集市產(chǎn)品報告中,位于第一象限的敏捷商業(yè)智能產(chǎn)品有QlikView, Tableau和SpotView
2. hive 的幾種存儲格式
Hive文件存儲格式
1.textfile
textfile為默認(rèn)格式
存儲方式:行存儲
磁盤開銷大 數(shù)據(jù)解析開銷大
壓縮的text文件 hive無法進(jìn)行合并和拆分
2.sequencefile
二進(jìn)制文件,以<key,value>的形式序列化到文件中
存儲方式:行存儲
可分割 壓縮
一般選擇block壓縮
優(yōu)勢是文件和Hadoop api中的mapfile是相互兼容的。
3.rcfile
存儲方式:數(shù)據(jù)按行分塊 每塊按照列存儲
壓縮快 快速列存取
讀記錄盡量涉及到的block最少
讀取需要的列只需要讀取每個row group 的頭部定義。
讀取全量數(shù)據(jù)的操作 性能可能比sequencefile沒有明顯的優(yōu)勢
4.orc
存儲方式:數(shù)據(jù)按行分塊 每塊按照列存儲
壓縮快 快速列存取
效率比rcfile高,是rcfile的改良版本
5.自定義格式
用戶可以通過實現(xiàn)inputformat和 outputformat來自定義輸入輸出格式。
總結(jié):
textfile 存儲空間消耗比較大,并且壓縮的text 無法分割和合并 查詢的效率最低,可以直接存儲,加載數(shù)據(jù)的速度最高
sequencefile 存儲空間消耗最大,壓縮的文件可以分割和合并 查詢效率高,需要通過text文件轉(zhuǎn)化來加載
rcfile 存儲空間最小,查詢的效率最高 ,需要通過text文件轉(zhuǎn)化來加載,加載的速度最低
3.flume 各個組件的介紹
1. SourceNetCat Source:綁定的端口(tcp、udp),將流經(jīng)端口的每一個文本行數(shù)據(jù)作為Event輸入;type:source的類型,必須是netcat。
bind:要監(jiān)聽的(本機(jī)的)主機(jī)名或者ip。此監(jiān)聽不是過濾發(fā)送方。一臺電腦不是說只有一個IP。有多網(wǎng)卡的電腦,對應(yīng)多個IP。
port:綁定的本地的端口。
Avro Source:監(jiān)聽一個avro服務(wù)端口,采集Avro數(shù)據(jù)序列化后的數(shù)據(jù);type:avrosource的類型,必須是avro。
bind:要監(jiān)聽的(本機(jī)的)主機(jī)名或者ip。此監(jiān)聽不是過濾發(fā)送方。一臺電腦不是說只有一個IP。有多網(wǎng)卡的電腦,對應(yīng)多個IP。
port:綁定的本地的端口。
Exec Source:于Unix的command在標(biāo)準(zhǔn)輸出上采集數(shù)據(jù);type:source的類型:必須是exec。
command:要執(zhí)行命令。
Spooling Directory Source:監(jiān)聽一個文件夾里的文件的新增,如果有則采集作為source。type:source 的類型:必須是spooldir
spoolDir:監(jiān)聽的文件夾 【提前創(chuàng)建目錄】
fileSuffix:上傳完畢后文件的重命名后綴,默認(rèn)為.COMPLETED
deletePolicy:上傳后的文件的刪除策略never和immediate,默認(rèn)為never。
fileHeader:是否要加上該文件的絕對路徑在header里,默認(rèn)是false。
basenameHeader:是否要加上該文件的名稱在header里,默認(rèn)是false。
2. SinkHDFS Sink:將數(shù)據(jù)傳輸?shù)絟dfs集群中。type:sink的類型 必須是hdfs。
hdfs.path:hdfs的上傳路徑。
hdfs.filePrefix:hdfs文件的前綴。默認(rèn)是:FlumeData
hdfs.rollInterval:間隔多久產(chǎn)生新文件,默認(rèn)是:30(秒) 0表示不以時間間隔為準(zhǔn)。
hdfs.rollSize:文件到達(dá)多大再產(chǎn)生一個新文件,默認(rèn)是:1024(bytes)0表示不以文件大小為準(zhǔn)。
hdfs.rollCount:event達(dá)到多大再產(chǎn)生一個新文件,默認(rèn)是:10(個)0表示不以event數(shù)目為準(zhǔn)。
hdfs.batchSize:每次往hdfs里提交多少個event,默認(rèn)為100
hdfs.fileType:hdfs文件的格式主要包括:SequenceFile, DataStream ,CompressedStream,如果使用了CompressedStream就要設(shè)置壓縮方式。
hdfs.codeC:壓縮方式:gzip, bzip2, lzo, lzop, snappy
注:%{host}可以使用header的key。以及%Y%m%d來表示時間,但關(guān)于時間的表示需要在header里有timestamp這個key。
Logger Sink將數(shù)據(jù)作為日志處理(根據(jù)flume中的設(shè)置的日志方式來顯示)要在控制臺顯示在運行agent的時候加入:-Dflume.root.logger=INFO,console 。
type:sink的類型:必須是 logger。
maxBytesToLog:打印body的最長的字節(jié)數(shù) 默認(rèn)為16
Avro Sink:數(shù)據(jù)被轉(zhuǎn)換成Avro Event,然后發(fā)送到指定的服務(wù)端口上。type:sink的類型:必須是 avro。
hostname:指定發(fā)送數(shù)據(jù)的主機(jī)名或者ip
port:指定發(fā)送數(shù)據(jù)的端口
File Roll Sink:數(shù)據(jù)發(fā)送到本地文件。type:sink的類型:必須是 file_roll。
sink.directory:存儲文件的目錄【提前創(chuàng)建目錄】
batchSize:一次發(fā)送多少個event。默認(rèn)為100
sink.rollInterval:多久產(chǎn)生一個新文件,默認(rèn)為30s。單位是s。0為不產(chǎn)生新文件。【即使沒有數(shù)據(jù)也會產(chǎn)生文件】
3.ChannelMemory Channel使用內(nèi)存作為數(shù)據(jù)的存儲。Type channel的類型:必須為memory
capacity:channel中的最大event數(shù)目
transactionCapacity:channel中允許事務(wù)的最大event數(shù)目
File Channel 使用文件作為數(shù)據(jù)的存儲Type channel的類型:必須為 file
checkpointDir :檢查點的數(shù)據(jù)存儲目錄【提前創(chuàng)建目錄】
dataDirs :數(shù)據(jù)的存儲目錄【提前創(chuàng)建目錄】
transactionCapacity:channel中允許事務(wù)的最大event數(shù)目
Spillable Memory Channel 使用內(nèi)存作為channel超過了閥值就存在文件中Type channel的類型:必須為SPILLABLEMEMORY
memoryCapacity:內(nèi)存的容量event數(shù)
overflowCapacity:數(shù)據(jù)存到文件的event閥值數(shù)
checkpointDir:檢查點的數(shù)據(jù)存儲目錄
dataDirs:數(shù)據(jù)的存儲目錄
4. InterceptorTimestamp Interceptor 時間戳攔截器 在header里加入key為timestamp,value為當(dāng)前時間。type:攔截器的類型,必須為timestamp
preserveExisting:如果此攔截器增加的key已經(jīng)存在,如果這個值設(shè)置為true則保持原來的值,否則覆蓋原來的值。默認(rèn)為false
Host Interceptor 主機(jī)名或者ip攔截器,在header里加入ip或者主機(jī)名type:攔截器的類型,必須為host
preserveExisting:如果此攔截器增加的key已經(jīng)存在,如果這個值設(shè)置為true則保持原來的值,否則覆蓋原來的值。默認(rèn)為false
useIP:如果設(shè)置為true則使用ip地址,否則使用主機(jī)名,默認(rèn)為true
hostHeader:使用的header的key名字,默認(rèn)為host
Static Interceptor 靜態(tài)攔截器,是在header里加入固定的key和value。type:avrosource的類型,必須是static。
preserveExisting:如果此攔截器增加的key已經(jīng)存在,如果這個值設(shè)置為true則保持原來的值,否則覆蓋原來的值。默認(rèn)為false
key:靜態(tài)攔截器添加的key的名字
value:靜態(tài)攔截器添加的key對應(yīng)的value值
5. Channel SelectorMultiplexing Channel Selector 根據(jù)header的key的值分配channelselector.type 默認(rèn)為replicating
selector.header:選擇作為判斷的key
selector.default:默認(rèn)的channel配置
selector.mapping.*:匹配到的channel的配置
6. Sink Processor負(fù)載均衡
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=load_balance
a1.sinkgroups.g1.processor.backoff=true
a1.sinkgroups.g1.processor.selector=round_robin
a1.sinkgroups.g1.processor.selector.maxTimeOut=30000
backoff:開啟后,故障的節(jié)點會列入黑名單,過一定時間再次發(fā)送,如果還失敗,則等待是指數(shù)增長;直到達(dá)到最大的時間。
如果不開啟,故障的節(jié)點每次都會被重試。
selector.maxTimeOut:最大的黑名單時間(單位為毫秒)。
故障轉(zhuǎn)移
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=failover
a1.sinkgroups.g1.processor.priority.k1=10
a1.sinkgroups.g1.processor.priority.k2=5
a1.sinkgroups.g1.processor.maxpenalty=10000
#maxpenalty 對于故障的節(jié)點最大的黑名單時間 (in millis 毫秒)
今日小作業(yè):
4. flume 和 kafka 的區(qū)別
hive的底層實現(xiàn)原理
hive和hbase的區(qū)別 以及為什么hive是數(shù)據(jù)倉庫
spark 消費 kafka時 會出現(xiàn)的問題 和 spark消費kafka時 是如何消費的
hive 和spark的運行機(jī)理有什么不同
hive 實現(xiàn) 查詢某字段連續(xù)出現(xiàn) 查詢列表時間
作者:黑馬程序員大數(shù)據(jù)培訓(xùn)學(xué)院
首發(fā): http://java.itheima.com