課程五:海量數(shù)據(jù)處理-Hive數(shù)據(jù)倉庫_第1頁
課程五:海量數(shù)據(jù)處理-Hive數(shù)據(jù)倉庫_第2頁
課程五:海量數(shù)據(jù)處理-Hive數(shù)據(jù)倉庫_第3頁
課程五:海量數(shù)據(jù)處理-Hive數(shù)據(jù)倉庫_第4頁
課程五:海量數(shù)據(jù)處理-Hive數(shù)據(jù)倉庫_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

HADOOP大數(shù)據(jù)課程童小軍2013年3月Hive數(shù)據(jù)倉庫暴風(fēng)公司數(shù)據(jù)倉庫案例集群接收日志超過1.2TB/天3500+任務(wù)/日任務(wù)數(shù)據(jù)吞吐10TB+/天,離線小時(shí)數(shù)據(jù)分析數(shù)據(jù)挖掘和用戶精分推薦系統(tǒng)用戶按地域收入年齡性別收入層次劃分廣告系統(tǒng)數(shù)據(jù)系統(tǒng)的進(jìn)化-一代數(shù)據(jù)系統(tǒng)的進(jìn)化-二代數(shù)據(jù)系統(tǒng)的進(jìn)化-三代暴風(fēng)Hadoop集群架構(gòu)流程Scribenginx+php使用的Hadoop生態(tài)圈Hadoop1.0.3基礎(chǔ)計(jì)算框架

Hive離線數(shù)據(jù)分析95%任務(wù)

Pig離線數(shù)據(jù)分析HBase部分?jǐn)?shù)據(jù)的存儲(chǔ)Mahout數(shù)據(jù)挖掘暴風(fēng)指數(shù)暴風(fēng)指數(shù)暴風(fēng)指數(shù)DataWarehousingatFacebook

WebServersScribeServersFilersHiveonHadoopClusterOracleRACFederatedMySQLWhatisHive

構(gòu)建于hadoop的hdfs和mapred之上,用于管理和查詢結(jié)構(gòu)化/非結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)倉庫。使用HQL作為查詢接口使用HDFS作為底層存儲(chǔ)使用MapRed作為執(zhí)行層WhatisHive

InstallationandConfiguration

安裝和配置hadoop集群下載hive安裝包解壓至安裝目錄配置HADOOP_HOME和JAVA_HOME變量修改存儲(chǔ)元數(shù)據(jù)的數(shù)據(jù)庫(derby、mysql、oracle)

InstallationandConfiguration

hive的元數(shù)據(jù)存儲(chǔ)hive默認(rèn)使用內(nèi)存數(shù)據(jù)庫derby存儲(chǔ)元數(shù)據(jù),使用時(shí)不需要修改任何配置,缺點(diǎn):hiveserver重啟后所有的元數(shù)據(jù)都會(huì)丟失hive還執(zhí)行mysql、oracle等任何支持JDBC連接方式的數(shù)據(jù)庫來存儲(chǔ)元數(shù)據(jù),需要修改相應(yīng)的配置項(xiàng)

InstallationandConfiguration

hive的元數(shù)據(jù)存儲(chǔ)

DDLandDMLOperations

hive建表語法格式

DDLandDMLOperations

hive建表語法格式

external外部表,類似于mysql的csv引擎

partitionedby指定分區(qū)字段clusteredbysortedby可以對表和分區(qū)對某個(gè)列進(jìn)行分桶操作,也可以利用sortedby對某個(gè)字段進(jìn)行排序rowformat指定數(shù)據(jù)行中字段間的分隔符和數(shù)據(jù)行分隔符storedas指定數(shù)據(jù)文件格式:textfilesequencercfileinputformat(自定義的inputformat類)location指定數(shù)據(jù)文件存放的hdfs目錄

DDLandDMLOperations

hive建表語句

CREATETABLEpage_view(viewTimeINT,useridBIGINT,page_urlSTRING,referrer_urlSTRING,ipSTRINGCOMMENT'IPAddressoftheUser')COMMENT'Thisisthepageviewtable'PARTITIONEDBY(dtSTRING,countrySTRING)CLUSTEREDBY(userid)SORTEDBY(viewTime)INTO32BUCKETSROWFORMATDELIMITEDFIELDSTERMINATEDBY'\001'COLLECTIONITEMSTERMINATEDBY'\002'MAPKEYSTERMINATEDBY'\003'STOREDASSEQUENCEFILE;

DDLandDMLOperations

刪除表droptable[IFEXISTS]table_name刪除內(nèi)部表時(shí)會(huì)刪除元數(shù)據(jù)和表數(shù)據(jù)文件刪除外部表(external)時(shí)只刪除元數(shù)據(jù)

DDLandDMLOperations

修改表增加分區(qū)

ALTERTABLEpage_viewADDPARTITION(dt='2008-08-08',country='us')location'/path/to/us/part080808'PARTITION(dt='2008-08-09',country='us')location'/path/to/us/part080809';修改表刪除分區(qū)

ALTERTABLEpage_viewDROPPARTITION(dt='2008-08-08',country='us');修改表重命名表

ALTERTABLEtable_nameRENAMETOnew_table_name修改表修改字段

ALTERTABLEtest_changeCHANGEaa1STRINGAFTERb;

DDLandDMLOperations

加載數(shù)據(jù)

LOADDATAINPATH'/user/myname/kv2.txt'OVERWRITEINTOTABLEinvitesPARTITION(ds='2008-08-15');加載(本地、hdfs)文件到指定的表分區(qū)FROMsrc

INSERTOVERWRITETABLEdest1SELECTsrc.*WHEREsrc.key<100

INSERTOVERWRITETABLEdest2SELECTsrc.key,src.valueWHEREsrc.key>=100andsrc.key<200從指定表中選取數(shù)據(jù)插入到其他表中HQLusecase

select語法結(jié)構(gòu)

SELECT[ALL|DISTINCT]select_expr,select_expr,...

FROMtable_reference

[WHEREwhere_condition]

[GROUPBYcol_list]

[CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]]

[LIMITnumber]

HQLusecase

select案例

SELECTpv.pageid,u.ageFROMpage_viewpJOINuseruON(pv.userid=u.userid)JOINnewuserxon(u.age=x.age);

HiveExtension

User-definedFunctionUDF作用于單個(gè)數(shù)據(jù)行,輸出一個(gè)數(shù)據(jù),如字符處理函數(shù)UDAF作用于多個(gè)數(shù)據(jù)行,輸出一個(gè)數(shù)據(jù),如count,sum函數(shù)UDTF作用于單個(gè)數(shù)據(jù)行,輸出多個(gè)數(shù)據(jù)行支持用戶使用java自定義開發(fā)UDF函數(shù)Hivestreaming

支持用戶在hiveQL語句中嵌入自定義的streaming處理腳本

使用UDFaddjar/tmp/helloUDF.jar;createtemporaryfunctionhelloworldas'com.hrj.hive.udf.HelloUDF';selecthelloworld(t.col1)fromtlimit10;droptemporaryfunctionhelloworld;HiveOptimization

使用分區(qū)Hive中的每個(gè)分區(qū)都對應(yīng)hdfs上的一個(gè)目錄,分區(qū)列也不是表中的一個(gè)實(shí)際的字段,而是一個(gè)或者多個(gè)偽列,在表的數(shù)據(jù)文件中實(shí)際上并不保存分區(qū)列的信息與數(shù)據(jù)。Partition關(guān)鍵字中排在前面的為主分區(qū)(只有一個(gè)),后面的為副分區(qū)靜態(tài)分區(qū):靜態(tài)分區(qū)在加載數(shù)據(jù)和使用時(shí)都需要在sql語句中指定

案例:(stat_date='20120625',province='hunan')動(dòng)態(tài)分區(qū):使用動(dòng)態(tài)分區(qū)需要設(shè)置hive.exec.dynamic.partition參數(shù)值為true,默認(rèn)值為false,在默認(rèn)情況下,hive會(huì)假設(shè)主分區(qū)時(shí)靜態(tài)分區(qū),副分區(qū)使用動(dòng)態(tài)分區(qū);如果想都使用動(dòng)態(tài)分區(qū),需要設(shè)置set

hive.exec.dynamic.partition.mode=nostrick,默認(rèn)為strick

案例:(stat_date='20120625',province)HiveOptimization

排序優(yōu)化

Order

by

實(shí)現(xiàn)全局排序,一個(gè)reduce實(shí)現(xiàn),效率低Sort

by

實(shí)現(xiàn)部分有序,單個(gè)reduce輸出的結(jié)果是有序的,效率高,通常和DISTRIBUTE

BY關(guān)鍵字一起使用(DISTRIBUTE

BY關(guān)鍵字

可以指定map

reduce端的分發(fā)key)CLUSTER

BY

col1

等價(jià)于DISTRIBUTE

BY

col1

SORT

BY

col1合并小文件文件數(shù)目過多,會(huì)給

HDFS

帶來壓力,并且會(huì)影響處理效率,可以通過合并

Map

Reduce

的結(jié)果文件來消除這樣的影響hive.merge.mapfiles

=

true是否和并

Map

輸出文件,默認(rèn)為

Truehive.merge.mapredfiles

=

false是否合并

Reduce

輸出文件,默認(rèn)為

Falsehive.merge.size.per.task

=

256*1000*1000合并文件的大小HiveOptimization

groupby優(yōu)化

Map端聚合,首先在map端進(jìn)行初步聚合,最后在reduce端得出最終結(jié)果,相關(guān)參數(shù):hive.map.aggr

=

true是否在

Map

端進(jìn)行聚合,默認(rèn)為

True

hive.groupby.mapaggr.checkinterval

=

100000在

Map

端進(jìn)行聚合操作的條目數(shù)目數(shù)據(jù)傾斜聚合優(yōu)化,設(shè)置參數(shù)hive.groupby.skewindata

=

true,當(dāng)選項(xiàng)設(shè)定為

true,生成的查詢計(jì)劃會(huì)有兩個(gè)

MR

Job。第一個(gè)

MR

Job

中,Map

的輸出結(jié)果集合會(huì)隨機(jī)分布到

Reduce

中,每個(gè)

Reduce

做部分聚合操作,并輸出結(jié)果,這樣處理的結(jié)果是相同的

Group

By

Key

有可能被分發(fā)到不同的

Reduce

中,從而達(dá)到負(fù)載均衡的目的;第二個(gè)

MR

Job

再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照

Group

By

Key

分布到

Reduce

中(這個(gè)過程可以保證相同的

Group

By

Key

被分布到同一個(gè)

Reduce

中),最后完成最終的聚合操作。HiveOptimization

join優(yōu)化

Join查找操作的基本原則:應(yīng)該將條目少的表/子查詢放在

Join

操作符的左邊。原因是在

Join

操作的

Reduce

階段,位于

Join

操作符左邊的表的內(nèi)容會(huì)被加載進(jìn)內(nèi)存,將條目少的表放在左邊,可以有效減少發(fā)生內(nèi)存溢出錯(cuò)誤的幾率。Join查找操作中如果存在多個(gè)join,且所有參與join的表中其參與join的key都相同,則會(huì)將所有的join合并到一個(gè)mapred程序中。案例:SELECT

a.val,

b.val,

c.val

FROM

a

JOIN

b

ON

(a.key

=

b.key1)

JOIN

c

ON

(c.key

=

b.key1)

在一個(gè)mapre程序中執(zhí)行joinSELECT

a.val,

b.val,

c.val

FROM

a

JOIN

b

ON

(a.key

=

b.key1)

JOIN

c

ON

(c.key

=

b.key2)

在兩個(gè)mapred程序中執(zhí)行joinMap

join的關(guān)鍵在于join操作中的某個(gè)表的數(shù)據(jù)量很小,案例:SELECT

/*+

MAPJOIN(b)

*/

a.key,

a.value

FROM

a

join

b

on

a.key

=

b.key

HiveOptimization

join優(yōu)化

Mapjoin

的限制是無法執(zhí)行a

FULL/RIGHT

OUTER

JOIN

b,和map

join相關(guān)的hive參數(shù):erval

hive.mapjoin.size.key

hive.mapjoin.cache.numrows由于join操作是在where操作之前執(zhí)行,所以當(dāng)你在執(zhí)行join時(shí),where條件并不能起到減少join數(shù)據(jù)的作用;案例:SELECT

a.val,

b.val

FROM

a

LEFT

OUTER

JOIN

b

ON

(a.key=b.key)

WHERE

a.ds='2009-07-07'

AND

b.ds='2009-07-07'最好修改為:SELECT

a.val,

b.val

FROM

a

LEFT

OUTER

JOIN

b

ON

(a.key=b.key

AND

b.ds='2009-07-07'

AND

a.ds='2009-07-07')在join操作的每一個(gè)mapred程序中,hive都會(huì)把出現(xiàn)在join語句中相對靠后的表的數(shù)據(jù)stream化,相對靠前的變的數(shù)據(jù)緩存在內(nèi)存中。當(dāng)然,也可以手動(dòng)指定stream化的表:SELECT

/*+

STREAMTABLE(a)

*/

a.val,

b.val,

c.val

FROM

a

JOIN

b

ON

(a.key

=

b.key1)

JOIN

c

ON

(c.key

=

b.key1)HiveOptimization

實(shí)現(xiàn)(not)in通過left

outer

join進(jìn)行查詢(假設(shè)B表中包含另外的一個(gè)字段

key1

select

a.key

from

a

left

outer

join

b

on

a.key=b.key

where

b.key1

is

null通過left

semi

join

實(shí)現(xiàn)

inSELECT

a.key,

a.val

FROM

a

LEFT

SEMI

JOIN

b

on

(a.key

=

b.key)Left

semi

join

的限制:join條件中右邊的表只能出現(xiàn)在join條件中。Hql使用自定義的mapred腳本注意事項(xiàng):在使用自定義的mapred腳本時(shí),關(guān)鍵字MAP

REDUCE

是語句SELECT

TRANSFORM

(

...

)的語法轉(zhuǎn)換,并不意味著使用MAP關(guān)鍵字時(shí)會(huì)強(qiáng)制產(chǎn)生一個(gè)新的map過程,使用REDUCE關(guān)鍵字時(shí)會(huì)產(chǎn)生一個(gè)red過程。自定義的mapred腳本可以是hql語句完成更為復(fù)雜的功能,但是性能比hql語句差了一些,應(yīng)該盡量避免使用,如有可能,使用UDTF函數(shù)來替換自定義的mapred腳本HiveOptimization

join優(yōu)化

Mapjoin

的限制是無法執(zhí)行a

FULL/RIGHT

OUTER

JOIN

b,和map

join相關(guān)的hive參數(shù):erval

hive.mapjoin.size.key

hive.mapjoin.cache.numrows由于join操作是在where操作之前執(zhí)行,所以當(dāng)你在執(zhí)行join時(shí),where條件并不能起到減少join數(shù)據(jù)的作用;案例:SELECT

a.val,

b.val

FROM

a

LEFT

OUTER

JOIN

b

ON

(a.key=b.key)

WHERE

a.ds='2009-07-07'

AND

b.ds='2009-07-07'最好修改為:SELECT

a.val,

b.val

FROM

a

LEFT

OUTER

JOIN

b

ON

(a.key=b.key

AND

b.ds='2009-07-07'

AND

a.ds='2009-07-07')在join操作的每一個(gè)mapred程序中,hive都會(huì)把出現(xiàn)在join語句中相對靠后的表的數(shù)據(jù)stream化,相對靠前的變的數(shù)據(jù)緩存在內(nèi)存中。當(dāng)然,也可以手動(dòng)指定stream化的表:SELECT

/*+

STREAMTABLE(a)

*/

a.val,

b.val,

c.val

FROM

a

JOIN

b

ON

(a.key

=

b.key1)

JOIN

c

ON

(c.key

=

b.key1)創(chuàng)建LZO壓縮表CREATEEXTERNALTABLEfoo(columnAstring,columnBstring)PARTITIONEDBY(datestring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY"\t"STOREDASINPUTFORMAT"com.hadoop.mapred.DeprecatedLzoTextInputFormat"OUTPUTFORMAT"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"LOCATION'/data/dw/uid/';HiveLzo文件加載流程壓縮lzopuid.txt上傳hadoopfs-putuid.txt.lzo/data/dw/uid/創(chuàng)建索引hadoopjar/path/to/your/hadoop-lzo.jarpression.lzo.DistributedLzoIndexer/data/dw/uid/uid.txt.lzo生成1000widshadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-mapper'seq100000'-numReduceTasks0-input/user/hadoop/PiEstimator_TMP_3_141592654/in/-output/opt/ids/生成r.pl代碼#!/usr/bin/perl-X$i=0;while($i<=10000){

$i++;

print`</dev/urandomtr-dc_A-Z-a-z-0-9|head-c10`."\n\r";}hadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-mapper'cat'-reducer'seq10000'-numReduceTasks10-input/data/-output/data/test3/1.seq10>texthadoopfs-puttest/data/texthadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-mapper'cat'-reducer'seq10000'-numReduceTasks10-input/data/text-output/data/test3/CREATEEXTERNALTABLEtest3(textstring)LOCATION'/data/test3/'Hivevssql

優(yōu)化策略使用Partition減少掃描數(shù)量使用Map端Join配置Reduce數(shù)量xml,json提取適用腳本提取,而非使用函數(shù)使用INSERTINTOLOCALDIRECTORY‘/home/me/pv_age_sum.dir’,而非適用HiveServer。使用LZO壓縮存儲(chǔ)數(shù)據(jù)適用外部表,而非內(nèi)部表press.output=false,true適用隊(duì)列管理任務(wù)執(zhí)行生成100億車牌號(hào)hadoopjarhadoop-examples-1.0.3.jarpi10010000生成100個(gè)文件hadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-numReduceTasks0-filerand.pl-mapperrand.pl-input/user/root/PiEstimator_TMP_3_141592654/in-output/opt/chepai/chepaicreateEXTERNALtablechepai(idbigint)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'collectionitemsterminatedby"\n"storedastextfilelocation'/opt/chepai/';Hive高可用措施健全監(jiān)控體系使用負(fù)載均衡配置隊(duì)列調(diào)度配置重啟機(jī)制定時(shí)清理日志配置隊(duì)列運(yùn)行set=ETLselect*fromuid;-D=ETL運(yùn)維和工具介紹-Cacti

Page

48Hadoop集群匯總監(jiān)控GangliaHAProxy+Hive網(wǎng)絡(luò)拓?fù)銺ueriesHAProxyHAProxyHiveHiveHiveHiveHadoopHAProxy+Hive高可用集群phpHiveAdmin界面

材料材料:.tw/cloud//downloads/sqoop/查詢界面:任務(wù)調(diào)度/oozie///azkaban/screenshots.php數(shù)據(jù)交換/p/datax/wiki/DataX%E4%BA%A7%E5%93%81%E8%AF%B4%E6%98%8E//zhuyeqing/ComETL//cdh/3/sqoop/SqoopUserGuide.htmlhadoopwindows版本.tw/cloud/wiki/Hadoop4WinIntroductiontoPigPig是一個(gè)基于Hadoop的大規(guī)模數(shù)據(jù)分析平臺(tái),它提供的SQL-LIKE語言叫PigLatin,該語言的編譯器會(huì)把類SQL的數(shù)據(jù)分析請求轉(zhuǎn)換為一系列經(jīng)過優(yōu)化處理的MapReduce運(yùn)算。Pig為復(fù)雜的海量數(shù)據(jù)并行計(jì)算提供了一個(gè)簡單的操作和編程接口。PigSystemexecutionplanPigCompilerClusterparsedprogramParserusercross-joboptimizerPigLatinprogramMap-RMRCompilerjoinoutputfilterXf()YIntroductiontoPigPig的主要操作load操作:加載數(shù)據(jù)foreach操作:循環(huán)指定數(shù)據(jù)集中的所有數(shù)據(jù)filter操作:根據(jù)過濾條件篩選數(shù)據(jù),通常和foreach配合使用group操作:分組操作,和sql中的groupby功能一致union操作:聯(lián)合操作,和sql中的union功能一致join操作:join操作,和sql中的join功能一致store操作:將制定數(shù)據(jù)集存儲(chǔ)至指定目錄

IntroductiontoPigPig操作實(shí)例Users=LOAD‘users.in’AS(name,age);Fltrd=FILTERUsersbyage>=18andage<=25;

Pages=LOAD‘pages.in’AS(user,url);Jnd=JOINFltrdBYname,PagesBYuser;Grpd=GROUPJndbyurl;Smmd=FOREACHGrpdGENERATEgroup,COUNT(Jnd)ASclicks;Srtd=ORDERSmmdBYclicks;Top100=LIMITSrtd100;STORETop100INTO‘top100sites.out’;BI其他解決方案R+HadoopSqoop最佳實(shí)踐第六次技術(shù)聚會(huì)分享HDFS到DBsqoopexport--connectjdbc:oracle:thin:@XXX:1521:XXX--usernameXXXX--passwordXXXXX--export-dir/user/flume/part-r-00000-m1--tableNS_SLLOG_CLIENT_SUM_OS--update-keyACTIVITYTIME,CLIENT_VER,OS--update-modeallowinsert--input-fields-terminated-by'\t'--outdirjobs--package-namecom.uusee.sqoop日志收集——flumeNG1)它是FlumeOG的重構(gòu)版本,apache來開發(fā)管理。2)它變的很簡單,Master、zookeeper、collector和WebUI沒有了3)簡化成了1、source(avro:很簡單使用;exec:使用shell命令)2、sink(hdfs、file)3、channel(Memory、disk)FlumeNG——架構(gòu)圖FlumeNG——數(shù)據(jù)獲取1)RPC1、在flume中,Avro客戶端使用AVRORPC機(jī)制可以發(fā)送一個(gè)給定的文件

Avro

源:2、$bin/flume-ngavro-client-Hlocalhost-p

41414

-F/usr/logs/log.103、上面的命令將發(fā)送的/usr/logs/log.10的內(nèi)容到

flume源監(jiān)聽端2)Executingcommands1、還有一個(gè)exec執(zhí)行一個(gè)給定的命令獲得輸出的源。一個(gè)單一的輸出,即“l(fā)ine”。回車('\R')或換行符('\N

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論