小編給大家分享一下Hadoop,HBase和Hive知識點(diǎn)的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括小店網(wǎng)站建設(shè)、小店網(wǎng)站制作、小店網(wǎng)頁制作以及小店網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,小店網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到小店省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一 Hadoop
主要包括HDFS 和Yarn,Common
對于HDFS ,要熟悉基本的文件操作,shell命令hadoop fs -ls / hadoop fs -copyFromLocal path2 path3等
對于javaAPI ,熟悉FileSystem hdfs=FileSystem.get(conf) FileStatus
HDFS的NameNode 和SecondNameNode ,DataNode 的各個(gè)作用。
NameNode 文件的命名空間管理,讀寫文件之前都要向他詢問,保存文件的元數(shù)據(jù),即文件名與數(shù)據(jù)塊。接受DataNode心跳響應(yīng),以及傳遞的數(shù)據(jù)塊&&DataNode 的位置的信息。
SecondNameNode 并不是NameNode的熱備份,他合并NameNode的fsimage和editLog,合成一個(gè)新的editLog,減輕內(nèi)存的占用
在HA中,分為Active NameNode 和StandardBy NameNode 通過共享editLog 雙方都及時(shí)的共享信息,配有故障轉(zhuǎn)移,且都向ZK注冊
因?yàn)镠DFS是三備份的,數(shù)據(jù)根據(jù)通過機(jī)架感知效應(yīng),分配的合理,盡量將計(jì)算在本地進(jìn)行或者距離數(shù)據(jù)較近的機(jī)器上進(jìn)行,減少網(wǎng)絡(luò)傳輸?shù)南摹?/p>
在網(wǎng)絡(luò)上傳輸用的是RPC,類似于架構(gòu)層次的協(xié)議,就是把某些接口以及接口中的方法稱為協(xié)議,客戶端和服務(wù)器端只要實(shí)現(xiàn)這些接口方法,就可以通信了。其中使用了動(dòng)態(tài)代理的技術(shù),NIO
DataNode 負(fù)責(zé)對數(shù)據(jù)實(shí)際的存儲位置,因?yàn)閿?shù)據(jù)是分塊的,即每個(gè)Block大小的設(shè)置,當(dāng)有一個(gè)很大的文件,NameNode 對其進(jìn)行切分時(shí),分成多少塊,占總文件的比例。
因?yàn)橛卸鄠€(gè)DataNode ,各個(gè)DataNode之間也是有通信的,DataNode 不僅要管理本地的數(shù)據(jù),與JobClient 的通信,其他DataNode的通信。
當(dāng)對文件進(jìn)行讀取的時(shí)候,NameNode 向DataNode 詢問具體數(shù)據(jù)的位置,DataNode對于文件的定位。
還有就是文件的序列化問題,Hadoop實(shí)現(xiàn)的是自己的方式。
NameNode 和DataNode 間的通信,依靠心跳響應(yīng),DataNode 每隔一段時(shí)間向NameNode 匯報(bào)執(zhí)行情況,當(dāng)出現(xiàn)宕機(jī)時(shí),NameNode會重新分配新的機(jī)器,還有就是當(dāng)一臺機(jī)器上的任務(wù)執(zhí)行速度很慢的時(shí)候,
NameNode 會再起一臺,同時(shí)執(zhí)行。
HDFS中關(guān)于文件的輸入輸出格式,也可以自己定義格式,F(xiàn)ileInputFormat 和FileOutputFormat
對于HDFS的優(yōu)化:初始化Block的大小,數(shù)據(jù)備份的個(gè)數(shù),設(shè)置機(jī)架感知,心跳的時(shí)間間隔,3.0中對NameNode中的一些信息進(jìn)行適時(shí)的刪除,減輕NameNode 啟動(dòng)壓力。
Yarn 分為了資源分配管理,任務(wù)監(jiān)督執(zhí)行,以及真正的運(yùn)算平臺。
ResourceManager(Scheduler ,Application Manager)負(fù)責(zé)分配任務(wù)運(yùn)行所需要的資源,container(CPU和內(nèi)存)
NodeManager和Application Master分別負(fù)責(zé)對于任務(wù)的監(jiān)控以及任務(wù)的執(zhí)行。
yarn默認(rèn)的運(yùn)算平臺支持mapreduce和spark,stome吧
MapReduce 執(zhí)行過程:map階段和reduce階段。在map階段,通過InputFormat 對于輸出的數(shù)據(jù)進(jìn)行整理成
按照key進(jìn)行排序,如果有combiner函數(shù),對相同key的值進(jìn)行合并,如果數(shù)據(jù)量達(dá)到內(nèi)存的80%自己設(shè)置的,則spill到磁盤中,最后對磁盤中的多個(gè)file進(jìn)行合并,最多10個(gè)file合并,這些就是map階段的結(jié)果。
在reduce階段,首先copy,開啟多個(gè)進(jìn)程,把各個(gè)map上的結(jié)果拷貝到reduce機(jī)器的內(nè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í)溢寫到磁盤。
對于map結(jié)果是否進(jìn)行壓縮,jvm是否重用。這其中緩存的使用。
當(dāng)map的文件都是小文件時(shí),將多個(gè)小文件進(jìn)行打包,或者使用AVRO格式合并
在copy過程中,開啟的并行的進(jìn)程數(shù)。
Hive 數(shù)據(jù)倉庫,通過使用HiveQL,方便使用類似SQL的語句進(jìn)行對表的管理,支持離散數(shù)據(jù)處理。
首先hive shell 創(chuàng)建表分為內(nèi)部表和外部表,內(nèi)部表是數(shù)據(jù)存儲在實(shí)際的倉庫中,刪除時(shí)元數(shù)據(jù)和數(shù)據(jù)都刪除了。外部表只是執(zhí)行數(shù)據(jù)倉庫的一個(gè)連接,刪除時(shí)只刪除元數(shù)據(jù)不擅長實(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)行一一的比對。
reduce join 就是對map的結(jié)果進(jìn)行運(yùn)算,因?yàn)榇嬖诙鄠€(gè)map的結(jié)果,所以運(yùn)算量很大,網(wǎng)絡(luò)上的傳輸消耗也很大。
semi join 就是在進(jìn)行reduce join之前對map的結(jié)果進(jìn)行篩選,篩選一些重復(fù)的key,做法是將左表隨機(jī)分成一個(gè)小表,放入內(nèi)存,將另一部分與他進(jìn)行比較,去除重復(fù)的。
Hive的優(yōu)化:數(shù)據(jù)傾斜的問題,使用分區(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ù)庫,表中必須有列族,列的個(gè)數(shù)可以實(shí)時(shí)的增加,支持實(shí)時(shí)的查詢。根據(jù)行健進(jìn)行查詢
create 'table1','fam' put ,get ,scan,Scanner ,delete
HMaster 負(fù)責(zé)監(jiān)控各個(gè)HRegionServer,且與ZK通信
HregionServer 管理各個(gè)HRegion ,向ZK注冊
一個(gè)HRegionServer 中有多個(gè)HRegion,一個(gè)HRegion相當(dāng)于一個(gè)map任務(wù)
寫入數(shù)據(jù)時(shí),采用預(yù)寫日志,然后寫入到Memstore ,滿了,則spill成HFile,一個(gè)HFile格式
讀取特定的數(shù)據(jù)的時(shí)候,首先從ZK中得到-ROOT-的信息,從-ROOT-得到.META.的信息,找到特定的RegionServer中的Region,此過程也會對經(jīng)常要讀取的文件進(jìn)行緩存。
HBase java API HTable HBaseAdmin 負(fù)責(zé)對表的創(chuàng)建
HTableDescripter ,HColumnDescripter
HBase中的布隆過濾器,
最重要的是rowkey的設(shè)計(jì),一般防止熱點(diǎn),使用salt或者h(yuǎn)ash key來組合rowkey,使得分布的均勻
以上是“Hadoop,HBase和Hive知識點(diǎn)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!