jiuxing2015
Hive中SQL的執(zhí)行順序:
(1) from :對from左邊的表和右邊的表計(jì)算笛卡爾積,產(chǎn)生虛表VT1;
(2) on : 對虛表VT1進(jìn)行on過濾,只有那些符合 的行才會被記錄在虛表VT2中;
(3) join :如果指定了outer join(比如left join、 right join),那么保留表中未匹配的行就會作為外部行添加到虛擬表VT2中,產(chǎn)生虛擬表VT3;
(4) where :對虛擬表VT3進(jìn)行where條件過濾。只有符合 的記錄才會被插入到虛擬表VT4中;
(5) group by :根據(jù)group by子句中的列,對VT4中的記錄進(jìn)行分組操作,產(chǎn)生VT5;
(6) having : 對虛擬表VT5應(yīng)用having過濾,只有符合 的記錄才會被 插入到虛擬表VT6中;
(7) select :執(zhí)行select操作,選擇指定的列,插入到虛擬表VT7中;
(8) distinct :對VT7中的記錄進(jìn)行去重。產(chǎn)生虛擬表VT8;
(9) order :將虛擬表VT8中的記錄按照 進(jìn)行排序操作,產(chǎn)生虛擬表VT9;
(10) limit :取出指定行的記錄,產(chǎn)生虛擬表VT10, 并將結(jié)果返回;
partition by 通常會用于和開窗及分析函數(shù)一起使用,partition by是在select執(zhí)行完 后 的結(jié)果集上進(jìn)行的;
(每日1小題,進(jìn)步1點(diǎn)點(diǎn))
mengjia097
HDFS是如何保證數(shù)據(jù)可靠性的?
(1)安全模式
① HDFS剛啟動時,NameNode進(jìn)入安全模式,處于安全模式的NameNode不能做任何的文件操作,甚至內(nèi)部的副本創(chuàng)建也是不允許的,NameNode這時需要和各個DataNode進(jìn)行通信,獲得DataNode存儲的數(shù)據(jù)塊信息,并對數(shù)據(jù)塊信息進(jìn)行檢查,只有通過了NameNode的檢查,一個數(shù)據(jù)塊才被認(rèn)為是安全的。當(dāng)認(rèn)為安全的數(shù)據(jù)塊所占比例達(dá)到了某個閾值,NameNode才會開始啟動;
(2)SecondaryNamenode備份機(jī)制
① 在Hadoop中使用SecondaryNameNode來備份NameNode的元數(shù)據(jù),以防止在NameNode宕機(jī)的時候,能從SecondaryNameNode中恢復(fù)出NameNode上的元數(shù)據(jù);
② NameNode中保存了整個文件系統(tǒng)的元數(shù)據(jù),而SecondaryNameNode的作用就是周期性保存NameNode的元數(shù)據(jù)。元數(shù)據(jù)中包括FSImage鏡像文件數(shù)據(jù)和EditLog編輯日志。FSImage相當(dāng)于HDFS的檢查點(diǎn),NameNode啟動時候會讀取FSImage的內(nèi)容到內(nèi)存,并將其與EditLog日志中的所有修改信息合并生成新的FSImage。在NameNode運(yùn)行過程中,所有關(guān)于HDFS的修改都將寫入EditLog日志文件中。這樣,如果NameNode宕機(jī),可以通過SecondaryNameNode中保存的FSImage和EditLog數(shù)據(jù)恢復(fù)出NameNode最近的狀態(tài),盡量減少數(shù)據(jù)的損失;
(3)心跳機(jī)制和副本重新創(chuàng)建
① 為了保證NameNode和各個DataNode的聯(lián)系,HDFS采用了心跳機(jī)制。NameNode周期性的向各個DataNode發(fā)送心跳包,而收到心跳包的DataNode要進(jìn)行回復(fù)。因?yàn)樾奶嵌〞r發(fā)送的,所以NameNode就把要執(zhí)行的命令也通過心跳包發(fā)送給DataNode,而DataNode收到心跳包,一方面要回復(fù)NameNode,另一方面就要開始應(yīng)用數(shù)據(jù)的傳輸;
② 如果檢測到DataNode失效,NameNode之前保存在這個DataNode上的數(shù)據(jù)就變成不可用數(shù)據(jù)。如果有的副本存儲在失效的DataNode上,那么需要重新創(chuàng)建這個副本,放到另外可用的地方去;
(4)數(shù)據(jù)一致性
① 一般來講,DataNode與應(yīng)用交互的大部分情況都是通過網(wǎng)絡(luò)進(jìn)行的,而網(wǎng)絡(luò)數(shù)據(jù)傳輸帶來的一大問題就是數(shù)據(jù)是否原樣到達(dá)。為了保證數(shù)據(jù)的一致性,HDFS采用了數(shù)據(jù)校驗(yàn)和(checkSum)機(jī)制。創(chuàng)建文件時,HDFS會為這個文件生成一個校驗(yàn)和,校驗(yàn)和文件和文件本身保存在同一空間中。傳輸數(shù)據(jù)時會將數(shù)據(jù)與校驗(yàn)和數(shù)據(jù)一起傳輸,應(yīng)用收到數(shù)據(jù)后可以進(jìn)行校驗(yàn),如果兩個校驗(yàn)的結(jié)果不同,則文件出錯了,這個數(shù)據(jù)塊就變成無效的。如果判定為無效,則需要從其他DataNode上讀取副本數(shù)據(jù);
(每日1小題,進(jìn)步1點(diǎn)點(diǎn))
優(yōu)質(zhì)工程師考試問答知識庫