您好,登錄后才能下訂單哦!
小編給大家分享一下Hadoop,HBase和Hive知識(shí)點(diǎn)的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一 Hadoop
主要包括HDFS 和Yarn,Common
對(duì)于HDFS ,要熟悉基本的文件操作,shell命令hadoop fs -ls / hadoop fs -copyFromLocal path2 path3等
對(duì)于javaAPI ,熟悉FileSystem hdfs=FileSystem.get(conf) FileStatus
HDFS的NameNode 和SecondNameNode ,DataNode 的各個(gè)作用。
NameNode 文件的命名空間管理,讀寫(xiě)文件之前都要向他詢(xún)問(wèn),保存文件的元數(shù)據(jù),即文件名與數(shù)據(jù)塊。接受DataNode心跳響應(yīng),以及傳遞的數(shù)據(jù)塊&&DataNode 的位置的信息。
SecondNameNode 并不是NameNode的熱備份,他合并NameNode的fsimage和editLog,合成一個(gè)新的editLog,減輕內(nèi)存的占用
在HA中,分為Active NameNode 和StandardBy NameNode 通過(guò)共享editLog 雙方都及時(shí)的共享信息,配有故障轉(zhuǎn)移,且都向ZK注冊(cè)
因?yàn)镠DFS是三備份的,數(shù)據(jù)根據(jù)通過(guò)機(jī)架感知效應(yīng),分配的合理,盡量將計(jì)算在本地進(jìn)行或者距離數(shù)據(jù)較近的機(jī)器上進(jìn)行,減少網(wǎng)絡(luò)傳輸?shù)南摹?/p>
在網(wǎng)絡(luò)上傳輸用的是RPC,類(lèi)似于架構(gòu)層次的協(xié)議,就是把某些接口以及接口中的方法稱(chēng)為協(xié)議,客戶(hù)端和服務(wù)器端只要實(shí)現(xiàn)這些接口方法,就可以通信了。其中使用了動(dòng)態(tài)代理的技術(shù),NIO
DataNode 負(fù)責(zé)對(duì)數(shù)據(jù)實(shí)際的存儲(chǔ)位置,因?yàn)閿?shù)據(jù)是分塊的,即每個(gè)Block大小的設(shè)置,當(dāng)有一個(gè)很大的文件,NameNode 對(duì)其進(jìn)行切分時(shí),分成多少塊,占總文件的比例。
因?yàn)橛卸鄠€(gè)DataNode ,各個(gè)DataNode之間也是有通信的,DataNode 不僅要管理本地的數(shù)據(jù),與JobClient 的通信,其他DataNode的通信。
當(dāng)對(duì)文件進(jìn)行讀取的時(shí)候,NameNode 向DataNode 詢(xún)問(wèn)具體數(shù)據(jù)的位置,DataNode對(duì)于文件的定位。
還有就是文件的序列化問(wèn)題,Hadoop實(shí)現(xiàn)的是自己的方式。
NameNode 和DataNode 間的通信,依靠心跳響應(yīng),DataNode 每隔一段時(shí)間向NameNode 匯報(bào)執(zhí)行情況,當(dāng)出現(xiàn)宕機(jī)時(shí),NameNode會(huì)重新分配新的機(jī)器,還有就是當(dāng)一臺(tái)機(jī)器上的任務(wù)執(zhí)行速度很慢的時(shí)候,
NameNode 會(huì)再起一臺(tái),同時(shí)執(zhí)行。
HDFS中關(guān)于文件的輸入輸出格式,也可以自己定義格式,F(xiàn)ileInputFormat 和FileOutputFormat
對(duì)于HDFS的優(yōu)化:初始化Block的大小,數(shù)據(jù)備份的個(gè)數(shù),設(shè)置機(jī)架感知,心跳的時(shí)間間隔,3.0中對(duì)NameNode中的一些信息進(jìn)行適時(shí)的刪除,減輕NameNode 啟動(dòng)壓力。
Yarn 分為了資源分配管理,任務(wù)監(jiān)督執(zhí)行,以及真正的運(yùn)算平臺(tái)。
ResourceManager(Scheduler ,Application Manager)負(fù)責(zé)分配任務(wù)運(yùn)行所需要的資源,container(CPU和內(nèi)存)
NodeManager和Application Master分別負(fù)責(zé)對(duì)于任務(wù)的監(jiān)控以及任務(wù)的執(zhí)行。
yarn默認(rèn)的運(yùn)算平臺(tái)支持mapreduce和spark,stome吧
MapReduce 執(zhí)行過(guò)程:map階段和reduce階段。在map階段,通過(guò)InputFormat 對(duì)于輸出的數(shù)據(jù)進(jìn)行整理成<Key,Value>的形式,寫(xiě)入到內(nèi)存,接著進(jìn)行分區(qū),有幾個(gè)reducer就分為幾個(gè)partition,對(duì)每個(gè)partition內(nèi)的數(shù)據(jù)
按照key進(jìn)行排序,如果有combiner函數(shù),對(duì)相同key的值進(jìn)行合并,如果數(shù)據(jù)量達(dá)到內(nèi)存的80%自己設(shè)置的,則spill到磁盤(pán)中,最后對(duì)磁盤(pán)中的多個(gè)file進(jìn)行合并,最多10個(gè)file合并,這些就是map階段的結(jié)果。
在reduce階段,首先copy,開(kāi)啟多個(gè)進(jìn)程,把各個(gè)map上的結(jié)果拷貝到reduce機(jī)器的內(nèi)存中,滿(mǎn)了則磁盤(pán)上。對(duì)拷貝過(guò)來(lái)的文件,進(jìn)行merge,sort。最后進(jìn)行reduce計(jì)算。
MapReduce階段的優(yōu)化:map和reduce任務(wù)的個(gè)數(shù),以及每個(gè)map和reduce能夠處理的最大,最小數(shù)據(jù)量,是否能夠設(shè)置combiner函數(shù)(要求輸入和輸出格式統(tǒng)一),當(dāng)內(nèi)存中數(shù)據(jù)達(dá)到多少比例時(shí)溢寫(xiě)到磁盤(pán)。
對(duì)于map結(jié)果是否進(jìn)行壓縮,jvm是否重用。這其中緩存的使用。
當(dāng)map的文件都是小文件時(shí),將多個(gè)小文件進(jìn)行打包,或者使用AVRO格式合并
在copy過(guò)程中,開(kāi)啟的并行的進(jìn)程數(shù)。
Hive 數(shù)據(jù)倉(cāng)庫(kù),通過(guò)使用HiveQL,方便使用類(lèi)似SQL的語(yǔ)句進(jìn)行對(duì)表的管理,支持離散數(shù)據(jù)處理。
首先hive shell 創(chuàng)建表分為內(nèi)部表和外部表,內(nèi)部表是數(shù)據(jù)存儲(chǔ)在實(shí)際的倉(cāng)庫(kù)中,刪除時(shí)元數(shù)據(jù)和數(shù)據(jù)都刪除了。外部表只是執(zhí)行數(shù)據(jù)倉(cāng)庫(kù)的一個(gè)連接,刪除時(shí)只刪除元數(shù)據(jù)不擅長(zhǎng)實(shí)際數(shù)據(jù)。
create external table name() (partitioned by ) row format delimited fields terminnated by '\t' location hdfspath
加載數(shù)據(jù)到hive load data inpath hdfspath 或者從本地 load data local inpath file:\\
或者在創(chuàng)建表的時(shí)候就指定 create table name as select aaa bbb from t1
由多個(gè)表中導(dǎo)入數(shù)據(jù)的時(shí)候使用:from tableA insert into tableB select id,name,sex
將HIVE表的數(shù)據(jù)導(dǎo)出到表insert overwrite table a select ss form nn
導(dǎo)出也分為三種方式,insert overwrite local directory file:\\\ select aa,bb from table1 導(dǎo)出到HDFS insert overwrite directory hdfs:\\ select aa from table2
導(dǎo)出到其他表 insert into table test1 partition() select a from table3
Hive java API
Hive 底層使用MapReduce 進(jìn)行計(jì)算
Hive支持三種連接表的方式,map join ,reduce join 和semi join
map join 使用的條件是左表數(shù)據(jù)量較小,可以直接放到內(nèi)存中,那么右表與左表的數(shù)據(jù)進(jìn)行一一的比對(duì)。
reduce join 就是對(duì)map的結(jié)果進(jìn)行運(yùn)算,因?yàn)榇嬖诙鄠€(gè)map的結(jié)果,所以運(yùn)算量很大,網(wǎng)絡(luò)上的傳輸消耗也很大。
semi join 就是在進(jìn)行reduce join之前對(duì)map的結(jié)果進(jìn)行篩選,篩選一些重復(fù)的key,做法是將左表隨機(jī)分成一個(gè)小表,放入內(nèi)存,將另一部分與他進(jìn)行比較,去除重復(fù)的。
Hive的優(yōu)化:數(shù)據(jù)傾斜的問(wèn)題,使用分區(qū),join,group by 或者是
Hive 中的strict 模式,很多情況下都要設(shè)置為false,關(guān)閉嚴(yán)格模式。
clustered by 等同于distributed by ,sort by 結(jié)合
設(shè)置在map端聚合,set hive.map.aggr=true,設(shè)置map端聚合的條目數(shù) set hive.groupby.mapaggr.checkinterval=10000
是否合并map端輸出文件,set hive.merge.mapfile=true
是否合并reduce端輸出文件,set hive.merge.mapredfiles=true
HBase 列式數(shù)據(jù)庫(kù),表中必須有列族,列的個(gè)數(shù)可以實(shí)時(shí)的增加,支持實(shí)時(shí)的查詢(xún)。根據(jù)行健進(jìn)行查詢(xún)
create 'table1','fam' put ,get ,scan,Scanner ,delete
HMaster 負(fù)責(zé)監(jiān)控各個(gè)HRegionServer,且與ZK通信
HregionServer 管理各個(gè)HRegion ,向ZK注冊(cè)
一個(gè)HRegionServer 中有多個(gè)HRegion,一個(gè)HRegion相當(dāng)于一個(gè)map任務(wù)
寫(xiě)入數(shù)據(jù)時(shí),采用預(yù)寫(xiě)日志,然后寫(xiě)入到Memstore ,滿(mǎn)了,則spill成HFile,一個(gè)HFile格式<RowKey,Family,Qualifier,Timestamp,value>,寫(xiě)入過(guò)程中,會(huì)使用BlockCache對(duì)寫(xiě)入的文件進(jìn)行緩存
讀取特定的數(shù)據(jù)的時(shí)候,首先從ZK中得到-ROOT-的信息,從-ROOT-得到.META.的信息,找到特定的RegionServer中的Region,此過(guò)程也會(huì)對(duì)經(jīng)常要讀取的文件進(jìn)行緩存。
HBase java API HTable HBaseAdmin 負(fù)責(zé)對(duì)表的創(chuàng)建
HTableDescripter ,HColumnDescripter
HBase中的布隆過(guò)濾器,
最重要的是rowkey的設(shè)計(jì),一般防止熱點(diǎn),使用salt或者h(yuǎn)ash key來(lái)組合rowkey,使得分布的均勻
以上是“Hadoop,HBase和Hive知識(shí)點(diǎn)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。