freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于點(diǎn)擊流數(shù)據(jù)和hadoop的畢業(yè)論文-資料下載頁

2025-06-27 20:29本頁面
  

【正文】 在目錄H~/.bashmrc/usr/lib/hadoopHadoop公共目錄HADOOP_HOME~/.bashmrc$H/hadoopHIVE_HOME~/.bashmrc$H/hivePATH~/.bashmrc$PATH:$HADOOP_HOME/bin:HIVE_HOME/binCLASSPATH~/.bashmrc$CLASSPATH:$HADOOP_HOME/lib:$HIVE_HOME/libHdfs://master:9000/$H/hadoop/tmpMaser:9001最后啟動執(zhí)行命令“hadoop namenode –format”格式化NameNode節(jié)點(diǎn),執(zhí)行命令“hadoop”啟動HDFS和MapReduce守護(hù)進(jìn)程,執(zhí)行jps查看是否同時存在NameNode、SecondaryNameNode、JobTracker、DataNode、TaskTracker等Java進(jìn)行在執(zhí)行。如果是,則Hadoop集群配置成功。 Streaming的網(wǎng)站日志預(yù)處理如前文所述,網(wǎng)站日志本身具備了結(jié)構(gòu)化的特性,使用空格分隔字段,使用引號將包含空格的字段包圍起來。在Hadoop中,對網(wǎng)站日志進(jìn)行處理的最簡單方式是使用Hive創(chuàng)建日志表,一行日志對應(yīng)表的一行記錄。為此,需要定義Hive日志表的模式并將原始日志轉(zhuǎn)換成Hive所能識別的格式。 Hive日志表的創(chuàng)建為充分利用所搜集數(shù)據(jù),所設(shè)計(jì)Hive日志表應(yīng)覆蓋原始日志行的所有有效字段,而且在數(shù)據(jù)類型上應(yīng)與字段語義相符合。創(chuàng)建表的HQL如下:* CREATE TABLE weblog(ip string,time string,method string,resource string,protocol string,status int,bytes int,referrer string,agent string)。Hive表weblog共9個字段。除第二、三個字段在原始日志中無效(),不予存儲之外,其它字段均以其原始類型保存在表中。對日志行中存在引號包圍的包含空格的字段,不能直接通過將空格替換成Hive中規(guī)定的字段間在分隔符來將其規(guī)范化??梢越柚齽t表達(dá)式進(jìn)行處理。正則表達(dá)式 ^([^ ]+) \[([^ ]+) \+0800\] ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^]+)$符合日志行的規(guī)范模式,而且經(jīng)測試,它對實(shí)驗(yàn)數(shù)據(jù)中一天的網(wǎng)站日志(共150699行記錄)100%成功。括號分組中的各組分別匹配日志行中前述表中相應(yīng)的字段。日志預(yù)處理程序的原理,即將一行行匹配的字段值使用Hive默認(rèn)的字段分隔符進(jìn)行分隔,輸出到文本文件。 Hadoop Streaming編程實(shí)現(xiàn)借助Hadoop Streaming技術(shù),使用自己熟悉的語言,可以很容易地實(shí)現(xiàn)所設(shè)計(jì)日志行處理邏輯。以PHP為例,從標(biāo)準(zhǔn)輸入取得日志行,提取其中各個字段并使用Hive規(guī)定的字段分隔符(ASCII碼001)分隔,輸出到標(biāo)準(zhǔn)輸出的Mapper程序的代碼如下:?php// 所提取字段:ip, time, method, resource, protocol, status, bytes, referrer, agent$pattern=39。/^([^ ]+) \[([^ ]+) \+0800\] ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^]+) ([^]+)$/i39。// 字段分隔符$D=\001。// 使用標(biāo)準(zhǔn)輸入while(($line=fgets(STDIN))!==false){ if(preg_match($pattern, $line, $matches)){ $t=count($matches)。 $log=$matches[1]。 for($i=2。 $i$t。 $i++){ $log=$log$D$matches[$i]。 } echo $log\n。 }}?Reducer程序僅僅負(fù)責(zé)將輸入的結(jié)果輸出,代碼如下:?php// 將輸入的行直接輸出while(($line=fgets(STDIN))!=false){ echo $line。}?實(shí)驗(yàn)網(wǎng)站日志文件放置在/shared/data/,每日的日志放在一個日志文件中,共10個文件。采用如下命令運(yùn)行上述程序:$ cd $H/hadoop$ bin/hadoop jar share/hadoop/mapreduce1/contrib/streaming/ files input /shared/data/~/var/output mapper php reducer php 程序的輸出為保存在~/var/output目錄下的part00000。使用wc命令統(tǒng)計(jì)其行數(shù),為1152810行。10天115萬條資源請求的流量與一個個人技術(shù)博客的流量相當(dāng)。上一節(jié)已經(jīng)設(shè)計(jì)好了Hive表,并為其準(zhǔn)備好了規(guī)范化的數(shù)據(jù)。本節(jié)將其導(dǎo)入Hive,并使用HQL進(jìn)行基本統(tǒng)計(jì)指標(biāo)的分析。 Hive表數(shù)據(jù)導(dǎo)入向Hive表導(dǎo)入數(shù)據(jù)的一般方法不是通過HQL使用INSERT語句插入一行行的記錄,而是更加簡單:直接將符合Hive表模式的數(shù)據(jù)文件載入Hive數(shù)據(jù)倉庫中。使用Hive提供的命令行,載入方法如下:* LOAD DATA LOCAL INPATH 39。~/var/output/part00000 39。 INTO TABLE weblog。然而,導(dǎo)入數(shù)據(jù)后在hive命令行執(zhí)行以下命令,查詢記錄行數(shù):* SELECT count(ip) FROM weblog。結(jié)果為0,即載入失敗。載入失敗的原因,是前面的載入命令保留了數(shù)據(jù)文件的文件名,而含有特殊字符如減號的文件Hive會忽略處理。本質(zhì)上,前述載入命令僅僅只是將數(shù)據(jù)文件復(fù)制到了Hive數(shù)據(jù)倉庫數(shù)據(jù)庫表對應(yīng)目錄下,沒有任何其它額外操作。因此可通過直接將數(shù)據(jù)文件復(fù)制到Hive數(shù)據(jù)倉庫來實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入。在Linux命令行執(zhí)行代碼如下:$ cp ~/var/output/part00000 /var/hive/warehouse/weblog再次查詢記錄行數(shù),可得1152810,與前面數(shù)據(jù)文件的總記錄相等,載入成功。,使用“IP+UA”唯一確定一個訪客具有較高的合理性和可行性。借助HQL:* SELECT count(DISTINCT concat(ip,agent)) distinct_visitors FROM weblog。得出這十天內(nèi)訪問網(wǎng)站的唯一訪客數(shù)。結(jié)果是20493個獨(dú)立訪客。使用HQL:* SELECT concat(ip,39。 39。,agent) visitor, count(ip) hits FROM weblog GROUP BY concat(ip,39。 39。,agent) ORDER BY hits DESC LIMIT 10可得資源請求數(shù)最多的10名訪客。值得一提的是,HQL暫時不支持SELECT子句和GROUP BY子句別名的互通,因此在GROUP BY子句中的函數(shù)調(diào)用在SELECT子句中不可用別名替代,并且必須與前者相同。另外,在命令行使用$ hive e HQL 的形式執(zhí)行HQL,并將結(jié)果重定向到文本文件,可以使用Excel來對結(jié)果進(jìn)行圖形化展示,如圖41。圖41 資源請求數(shù)最多的10名訪客訪客的訪問量還可以從請求數(shù)據(jù)量的角度進(jìn)行衡量。執(zhí)行HQL:* SELECT count(bytes) site_bytes FROM weblog。可得這段時間內(nèi)全站資源請求所消耗的數(shù)據(jù)量為13020817898字節(jié),約合12GB。選擇流量前十的訪客,看看該流量的分布情況(結(jié)果如圖42):* SELECT concat(ip,39。 39。,agent) visitor, count(bytes) visitor_bytes FROM weblog GROUP BY concat(ip,39。 39。,agent) ORDER BY visitor_bytes DESC LIMIT 10。圖42 資源請求流量最多的10名訪客如果說資源請求數(shù)最多的10名訪客的數(shù)據(jù)對比還不明顯的話,資源請求流量最多的10名訪客請求流量間的對比則非常明顯。訪客“ curl/ (x86_64pclinuxgnu) libcurl/ OpenSSL/ zlib/ libidn/ librtmp/”請求流量高達(dá)2535186264字節(jié),約占總請求流量的20%。結(jié)合其非同尋常的代理方式(CURL命令行頁面獲取工具),有必要對該訪客的具體行為進(jìn)行觀察,對其目的和由此對網(wǎng)站乃至業(yè)務(wù)所產(chǎn)生的后果進(jìn)行進(jìn)一步分析。后面九個用戶中,有一個使用的代理的是Wget,其他八個是普通瀏覽器,其中一個是Safari,剩下七個Windows XP下的IE 6。以此看來,國內(nèi)的的XP和IE6用戶還是高居榜首。然而仔細(xì)研究,發(fā)現(xiàn)這七個Xp+IE6的IP地址極其相近,代理更是完全相同。它們有可能出自同一個真實(shí)訪客,只是使用了不同的代理服務(wù)器。假設(shè)這是事實(shí),關(guān)于該訪客使用使用多個IP來偽裝自己,在網(wǎng)站上大量請求頁面的原因,留待網(wǎng)站分析人員借助領(lǐng)域知識進(jìn)行深入調(diào)查,本文不再贅述。上一小節(jié)使用基于“IP+UA”的唯一訪客標(biāo)識方式對唯一訪客數(shù)和訪問最多訪客進(jìn)行了統(tǒng)計(jì),并發(fā)現(xiàn)了一些異常的問題留待網(wǎng)站分析人員具體解釋。除唯一訪客標(biāo)識外,訪客的訪問對象——網(wǎng)絡(luò)資源(頁面、圖片、CSS等)也需要唯一標(biāo)識。網(wǎng)站內(nèi)部為一個實(shí)際資源建立的多種訪問URL會使一個資源可能具有多個標(biāo)識,但這一問題可以通過改進(jìn)網(wǎng)站來避免;更加普遍的情況是,同一個資源允許加和不加文件分隔符(“/”)兩種訪問方式,導(dǎo)致將它們分開統(tǒng)計(jì)。單純的網(wǎng)站改進(jìn)無法強(qiáng)制訪客在URL中輸入網(wǎng)站時或其它地方在引用該資源時加上可選的末尾文件分隔符,因此必須在統(tǒng)計(jì)時進(jìn)行合并處理。然而,對于合并處理,卻不是簡單地在所有URL后面都加上文件分隔符,因?yàn)榭赡苡械腢RL確實(shí)指向一個文件而非目錄,不應(yīng)在后面加上文件分隔符;而是反過來,去掉所有URL末尾的文件分隔符。每使用到URL都必須進(jìn)行合并處理,對于這一頻繁使用的過程,應(yīng)該特別關(guān)注其執(zhí)行效率。Hive提供了豐富的字符串處理函數(shù),但高效的去掉最后一個文件分隔符的做法還是應(yīng)該特殊實(shí)現(xiàn)。Hive提供了自定義函數(shù)(UserDefined Function)機(jī)制對HQL進(jìn)行擴(kuò)展[34],自定義一個去掉最后一個文件分隔符的函數(shù)(函數(shù)名定義為trimrslash)也十分簡單:1) 使用eclipse,新建自定義函數(shù)庫項(xiàng)目(Java項(xiàng)目)hiveudf,導(dǎo)入$HIVE_HOME/lib下的hadoop/hive/lib/;2) 新建類trimrslash,;3) 實(shí)現(xiàn)函數(shù)public static String evaluate(String text),完成去掉最后一個文件分隔符的功能;4) 實(shí)現(xiàn)主函數(shù),對evaluate函數(shù)進(jìn)行一定測試。:package 。import 。public class trimrslash extends UDF { // 主函數(shù)僅供測試 public static void main(String[] args) { assert (evaluate(null) == null)。 assert (evaluate() == )。 assert (evaluate(/) == )。 assert (evaluate(.) == .)。 assert (evaluate(Hello/) == Hello)。 } // 刪除text末尾的斜杠(如果有) public static String evaluate(String text) { if (text != null) { int n = ()。 if ((n 1) == 39。/39。) { text = (0, n 1)。 } } return text。 }}運(yùn)行主函數(shù),測試通過后,使用eclipse將項(xiàng)目導(dǎo)出成jar文件,或使用命令$ jar cf workspace/hiveudf/bin/whut/zfj/hive/。接下來便是在Hive上添加該函數(shù)。使用Hive命令行:* add jar 。* create temporary function trimrslash as 39。39。之后trimrslash則可像HQL內(nèi)置函數(shù)一樣使用了。不過,所定義的函數(shù)trimrslash只是臨時的,在Hive會話關(guān)閉后就會結(jié)束。因此,可以通過將上述添加函數(shù)的命令放在~/.hiverc文件下,Hive每次打開時會自動執(zhí)行執(zhí)行它們,trimrslash因而可以在后面的分析中反復(fù)使用了。注意Hive命令必須以分號結(jié)尾,因此~/.hiverc文件的每行也應(yīng)該以分號結(jié)尾。上一小節(jié)對資源URL進(jìn)行規(guī)范化之后,本小節(jié)就可以對資源數(shù)量和使用情況進(jìn)行統(tǒng)計(jì)了。首先統(tǒng)計(jì)唯一資源數(shù)(確切地說是唯一被訪問資源數(shù);十天時間內(nèi)的1152810次請求基本能覆蓋網(wǎng)站的大部分資源,但并非全部)。HQL:* SELECT count(DISTINCT resource) distinct_resources FROM weblog。結(jié)果為56174。這56174個資源中哪些資源被請求最多呢?HQL:* SELECT resource, count(resource) hits FROM weblog GROU
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1